Vagrant配置术语

4
TL;DR:请问有人能帮我理解 Vagrantfile 中定义的这些“名称”之间的区别吗?
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

我想这个可能不相关,但我正在尝试在Mac El-capitan上使用Oracle VirtualBox和vagrant版本1.7.4创建一个ubuntu盒子。
文档说: config.vm.box - 这配置了机器将要启动的box。这里的值应该是已安装box的名称或HashiCorp Atlas中box的简写名称。 这里的例子介绍了另一个术语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
1个回答

4
我会尝试逐点回答:
首先是以下的语法。
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

这主要用于多个虚拟机同时运行 (https://docs.vagrantup.com/v2/multi-machine/),所以您需要为虚拟机定义一个名称,在您的情况下是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这是Vagrant的一个非常重要的概念,因为您将要创建的每个VM都必须基于现有的box创建。您可以从互联网上下载box(vagrant atlas,http://www.vagrantbox.es/)或者自己制作box。您可以通过运行vagrant box list来查看在您的计算机上安装的可用box。如果在Vagrantfile中设置的box不在可用box中,则vagrant会尝试下载(因此,如果您指向像ubuntu/trusty64这样的东西,即使您没有安装它,vagrant也会从https://atlas.hashicorp.com/ubuntu/boxes/trusty64下载它,假设它对您的提供商可用)。
第三,config/box.vm.hostname 将会是你感兴趣的变量(不是 hostname vs host_name),可以参考 doc

config.vm.hostname - 机器应该拥有的主机名。默认为 nil。如果为 nil,则 Vagrant 不会管理主机名。如果设置为字符串,则主机名将在启动时设置。

因此,如果你在 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

最后是关于名称的主题,config/box.vm.name将用于提供程序(在您的情况下为VirtualBox)中虚拟机的名称,以下answer很好地解释了这一点。

感谢您的精彩写作!所以最后一个(vb.name)只是提供程序 GUI 的名称,对吗?在我的情况下,它是在 Oracle VirtualBox GUI 中显示的名称。 - Kashyap
是的,您可以设置名称以使其有意义。 - Frederic Henri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接