virtualbox+vagrant學習-4-Vagrantfile-4-Tips & Tricks
阿新 • • 發佈:2018-12-25
Tips & Tricks
Vagrantfile是一種非常靈活的配置格式。因為它只是Ruby,所以你可以用它做很多事情。然而,同樣的道理,因為它是Ruby,所以有很多方法可以朝自己的腳開槍(即傷到自己)。在使用本頁上的一些提示和技巧時,請注意正確使用它們。
1.Loop Over VM Definitions 迴圈實現虛擬機器定義
如果你想對許多多機機器應用稍微不同的配置,可以使用迴圈來實現這一點。例如,如果你想建立三個機器:
(1..3).each do |i| config.vm.define "node-#{i}" do |node| node.vm.provision"shell", inline: "echo hello from node #{i}" end end
⚠️多機器定義和提供程式重寫的內部部分是延遲載入的。如果更改配置中使用的變數的值,可能會導致問題。
例如,下面的迴圈不工作:
# 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的值,而不僅僅只是複製。因此,當你執行這個時,每個節點實際上都將提供相同的文字。
這是一個很容易犯的錯誤,vagrant並不能真正保護它,所以我們能做的最好的就是在這裡提到它。
2.Overwrite host locale in ssh session在ssh會話中覆蓋主機區域設定
通常,宿主語言環境變數被傳遞給客戶。如果客戶軟體不支援主機區域設定,可能會導致失敗。一個可能的解決方案是覆蓋Vagrantfile中的locale:
ENV["LC_ALL"] = "en_US.UTF-8" Vagrant.configure("2") do |config| # ... end
這個改變只在Vagrantfile檔案中可見