我試圖得到一個shell供應方,以避免另配一個虛擬機實例,如果它已經這樣做了前面。避免另配一個流浪VM如果已提供
考慮以下Vagrantfile:
Vagrant::Config.run do |config|
config.vm.define :minimal do |config|
# Base image
config.vm.box = "lucid32"
config.vm.box_url = "http://files.vagrantup.com/lucid32.box"
config.vm.provision :shell, :inline => "mkdir /tmp/foobar"
end
end
如果運行vagrant up minimal
,它最初將箱子和提供它。如果你然後運行vagrant provision minimal
它會嘗試重新配置這個盒子,但會失敗(因爲/ tmp/foobar目錄已經存在)。
有沒有一種方法,使流浪記住它是否已經過去供應的機器,避免以後再供應呢?
更多背景:如果我運行vagrant up minimal
,重新啓動我的主機,然後再次運行vagrant up minimal
,它會嘗試另配箱和失敗。由於VirtualBox經常導致我的主機上發生內核恐慌,所以經常會發生這種情況。
使供應方冪似乎是合理的。雖然不一定容易。 –
我將供應腳本分成if語句包圍的部分。我觸摸每個部分末尾的文件,if語句檢查是否存在該文件。所以每段代碼只能運行一次。這增加了很少的複雜性,並且我有用於檢查和寫入文件以減少混亂的功能。到目前爲止,這工作得很好。我還建議「test -d/path/to/dir || mkdir/path/to/dir」可能是處理這個特定問題的更好方法。還有-f用於文件,-L用於符號鏈接。 「男人bash」有更多。 – bogeymin
創建冪等性的簡單和愚蠢的方法是在調配結束時觸摸〜/ .VM_PROVISIONED(提供的所有內容都是成功的),並通過'[-e〜/ .VM_PROVISIONED]'檢查它是否存在。 –