2014-01-23 20 views
2

我希望能夠根據它們運行的​​位置更改我的puppet清單的行爲。目前,我使用這個技巧導出的無業遊民提供商(通過facter):是否可以從流浪文件中引用命令行選擇的提供程序

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 

[... stuff ...] 

config.vm.provision "puppet" do |pp| 
    pp.manifests_path = ".puppet" 
    pp.facter = {"vagrant_provider" => ""} 
end 

config.vm.provider :rackspace do |rs, override| 
    [... stuff ...]  
    override.vm.provision "puppet" do |pp| 
     pp.manifests_path = ".puppet" 
     pp.facter = {"vagrant_provider" => "rackspace"} 
    end 

[... more stuff ...] 

但很明顯,感覺有點髒(和增加更多的供應商時,它得到醜陋)。 是否有寫眼前這個單塊

config.vm.provision "puppet" do |pp| 
    pp.facter = {"vagrant_provider" => Vagrant.selected_provider} ## pseudocode! 
end 

,這樣,打電話時像這樣

$ vagrant up --provider=rackspace 

流浪漢我們手工合適的供應商信息,以facter的方法嗎? 我無法弄清楚這一點,或者是因爲我沒有得到紅寶石,或者我沒有流浪,或者可能是兩個,非常感謝!

回答

1

我的紅寶石是不是最大的,從而有可能做到這一點更有效的方式,但下面應該工作:

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 

    # Get the provider! 
    provider = '' 
    ARGV.each do|a| 
    if a.include?('--provider=') 
     provider = a[11, a.length] 
    end 
    end 

    config.vm.provision "puppet" do |pp| 
    pp.facter = {"vagrant_provider" => provider} 
    end 

end 
+0

道歉採取萬年回到這裏。這就像一個魅力,它是一個非常可讀的獎金!謝謝。 – yungchin

相關問題