Vagrant 配置术语
Vagrant config terminology
TL;DR;有人可以帮助我理解 Vagrantfile 中定义的这些 "names" 之间的区别吗?
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中的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
TL;DR;有人可以帮助我理解 Vagrantfile 中定义的这些 "names" 之间的区别吗?
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中的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