TL; 博士;有人可以帮助我理解 Vagrantfile 中定义的这些“名称”之间的区别吗?
config.vm.define "worker"
box.vm.box = "ots-box"
box.vm.host_name = "worker"
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 中框的简写名称。
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 中只有一个 VM,则不需要此语法,只需使用
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 都必须针对现有框创建。你可以从网上下载盒子(vagrant atlas,http://www.vagrantbox.es/)或者自己制作盒子。您可以通过运行 vagrant box list
来查看机器上安装的可用框。如果 Vagrantfile 中设置的框在可用框中不可用,则 vagrant 将尝试下载(因此,如果您指向 ubuntu/trusty64
之类的东西,即使您没有安装它,vagrant 也会从 https://atlas.hashicorp.com/ubuntu/boxes/trusty64 下载它,假设它可用于您的提供者)第三,
config/box.vm.hostname
将是您感兴趣的变量(不是主机名与主机名),来自 doc所以如果你在你的 Vagrantfile 中设置这个变量并启动机器,ubuntu 中的
hostname
变量将被解析为相同的值。例如,来自以下 VagrantfileVagrant.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
将用于提供者的 VM 名称(在您的情况下为 VirtualBox),下面的 answer 对此进行了很好的解释关于ubuntu - Vagrant 配置术语,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34661018/