Vagrant 配置术语

Vagrant config terminology

TL;DR;有人可以帮助我理解 Vagrantfile 中定义的这些 "names" 之间的区别吗?

  1. config.vm.define "worker"
  2. box.vm.box = "ots-box"
  3. box.vm.host_name = "worker"
  4. vb.name = "barhost"

在尝试更改我拥有的 vagrant 实例的主机名时,我迷失在 Vagrantfile 语法中。现在我已经成功更改了主机名,但其他一些东西(网络)无法正常工作。我怀疑我更改了一些导致 vagrant 以特定方式配置盒子的东西,这导致了这个问题。

Vagrant.configure("2") do |config|
  config.vm.define "worker".to_sym do |box|
    box.vm.box = "ots-box"
    box.vm.box_url = "http://testing.xxx.com.s3.amazonaws.com/ots-fe.box"
    box.vm.host_name = "worker"
end

我想这无关紧要,但我正在尝试使用 Oracle VirtualBox 和 vagrant 版本 1.7.4 在 Mac El-capitan 上创建一个 ubuntu 框。


Documentation 说: config.vm.box - 这配置了机器将被启动的盒子。这里的值应该是已安装盒子的名称或HashiCorp的Atlas中的shorthand盒子名称。

Example here引入另一个术语vb.name:

Vagrant.configure('2') do |config|
  config.vm.box = "precise64"
  config.vm.box_url = "http://files.vagrantup.com/precise64.box"
  config.vm.define "foohost" do |foohost|
  end
  config.vm.provider :virtualbox do |vb|
      vb.name = "barhost"
  end
end

我尽量逐点回答:

首先是下面的语法

Vagrant.configure("2") do |config|   
  config.vm.define "worker".to_sym do |box|
    box.vm.box = "ots-box"
    box.vm.box_url = "http://testing.xxx.com.s3.amazonaws.com/ots-fe.box"
    box.vm.host_name = "worker" 
  end

主要用于如果你有多个 VM 运行 (https://docs.vagrantup.com/v2/multi-machine/) 所以你需要为 VM 定义一个名称,在你的情况下 worker 所以在下一个块中所有将为 worker VM 设置参数,为了使 ruby 语法满意,您需要定义一个变量名 (box)

所以如果你的 Vagrantfile 中只有一个虚拟机,你不需要这个语法,你可以只需要

Vagrant.configure("2") do |config|   
    config.vm.box = "ots-box"
    config.vm.box_url = "http://testing.xxx.com.s3.amazonaws.com/ots-fe.box"
    config.vm.hostname = "worker" 
  end

其次,config/box.vm.box 指向一个 vagrant box This is a very important concept of Vagrant as each VM you will spin must be created against an existing box. You can download box from internet (vagrant atlas, http://www.vagrantbox.es/) or make the box yourself. You can review the available boxes installed on your machine by running vagrant box list. If the box set in your Vagrantfile is not available in the available box, vagrant will try to download (so if you point something like ubuntu/trusty64, even if you did not install it, vagrant will download it from https://atlas.hashicorp.com/ubuntu/boxes/trusty64,假设它对您的提供商可用)

第三,config/box.vm.hostname 将是您感兴趣的变量(不是主机名与 host_name),来自 doc

config.vm.hostname - The hostname the machine should have. Defaults to nil. If nil, Vagrant won't manage the hostname. If set to a string, the hostname will be set on boot.

因此,如果您在 Vagrantfile 中设置此变量并启动机器,ubuntu 中的 hostname 变量将被解析为相同的值。例如,来自以下 Vagrantfile

Vagrant.configure(2) do |config|
  ...
  config.vm.box = "ubuntu/trusty64"
  config.vm.hostname = "ubuntu"
  ...

从虚拟机,我得到

fhenri@machine:~/project/examples/vagrant/ubuntu$ vagrant ssh
Welcome to Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-29-virtual x86_64)

 * Documentation:  https://help.ubuntu.com/
Last login: Tue Jan  5 10:21:54 2016 from 172.16.42.1
vagrant@ubuntu:~$ hostname
ubuntu

最后是 name 主题,config/box.vm.name 将用于提供程序(在您的情况下为 VirtualBox)的 VM 名称,从以下 answer