TL; DR;有人可以帮助我理解Vagrantfile中定义的这些“名称”之间的区别吗?
-
config.vm.define "worker"
-
box.vm.box = "ots-box"
-
box.vm.host_name = "worker"
-
vb.name = "barhost"
在尝试更改我所拥有的vagrant实例的主机名时,我迷失在Vagrantfile语法中 . 现在我已经成功更改了主机名,但其他一些东西(网络)无效 . 我怀疑我已经改变了导致流浪者配置盒子的东西是一种特殊的方式,这导致了这个问题 .
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
1 回答
我会尝试逐点回答:
首先是以下语法
主要用于运行多个虚拟机(https://docs.vagrantup.com/v2/multi-machine/),因此您需要为VM定义一个名称,在您的情况下
worker
所以在下一个块中,将为worker
VM设置所有参数并使您需要的ruby语法高兴定义变量名称(box
)因此,如果您的Vagrantfile中只有一个VM,则不需要这种语法,您可以拥有
其次,
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
将是你感兴趣的变量(不是hostname vs host_name),来自doc因此,如果您在Vagrantfile中设置此变量并启动计算机,则ubuntu中的
hostname
变量将被解析为相同的值 . 例如,来自以下Vagrantfile从vm,我得到
最后,名称主题
config/box.vm.name
将用于提供者的VM名称(在您的案例中为VirtualBox),从以下answer可以很好地解释