原文地址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