原文地址html
Vagrantfile 是一种很是灵活的配置格式。语法基于 Ruby,能够用它作不少事情。在本页使用一些提示和技巧时,请注意正确使用它们。node
若是你想对多机器应用稍微不一样的配置,能够使用一个循环来作到这一点。例如,若是你想建立三台机器:web
(1..3).each do |i|
config.vm.define "node-#{i}" do |node|
node.vm.provision "shell",
inline: "echo hello from node #{i}"
end
end
警告:多机器定义和 provider 覆盖的内部部分是延迟加载的(The inner portion of multi-machine definitions and provider overrides are lazy-loaded)。若是更改配置中使用的变量的值,这可能会致使问题。例如,下面的循环不起做用:shell
# THIS DOES NOT WORK!
for i in 1..3 do
config.vm.define "node-#{i}" do |node|
node.vm.provision "shell",
inline: "echo hello from node #{i}"
end
end
Ruby 中的 for i in ...
构造实际上修改了每一个迭代的 i 的值,而不是复制。所以,当你运行这个时,每一个节点都会提供相同的文本。ruby
这是一个容易犯的错误,而 Vagrant 没法真正避免,因此咱们能作的最好的就是在这里提到它。ssh
一般,主机 locale 环境变量传递给客户机。若是客户机软件不支持主机 locale,则可能会致使失败。一种可能的解决方案是覆盖 Vagrantfile 中的语言环境:ide
ENV["LC_ALL"] = "en_US.UTF-8"
Vagrant.configure("2") do |config|
# ...
end
更改仅在 Vagrantfile 中可见。svg