Vagrant 手冊之 Vagrantfile - 提示及技巧

原文地址html

Vagrantfile 是一種很是靈活的配置格式。語法基於 Ruby,能夠用它作不少事情。在本頁使用一些提示和技巧時,請注意正確使用它們。node

1. 使用循環定義虛擬機

若是你想對多機器應用稍微不一樣的配置,能夠使用一個循環來作到這一點。例如,若是你想建立三臺機器: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

2. 在 ssh 會話中覆蓋主機 locale

一般,主機 locale 環境變量傳遞給客戶機。若是客戶機軟件不支持主機 locale,則可能會致使失敗。一種可能的解決方案是覆蓋 Vagrantfile 中的語言環境:ide

ENV["LC_ALL"] = "en_US.UTF-8"

Vagrant.configure("2") do |config|
  # ...
end

更改僅在 Vagrantfile 中可見。svg

相關文章
相關標籤/搜索