2016-06-15 64 views
0

我正在使用Ansible(本地)供應商進行我的Vagrant設置。是否有推薦的方式將環境變量傳遞給供應商?將環境變量傳遞給Vagrant供應商

例如,我想運行ENV=development vagrant up並讓流浪漢將環境變量ENV傳遞給Ansible。

我試着用extra_vars,從Vagrant documentation採取:

Vagrant.configure(2) do |vagrant| 
    # other configuration 
    vagrant.vm.provision :ansible_local do |ansible| 
     ansible.playbook = "ansible/server.yml" 
     ansible.extra_vars = { 
      env: ENV.fetch("ENV", "development") 
      } 
    end 
end 

然而,當我運行vagrant provision(甚至沒有使用Ansible的env變量),我得到如下:

$ vagrant provision 
==> default: Running provisioner: ansible_local... 
    default: Running ansible-playbook... 
ERROR: Expecting property name: line 1 column 2 (char 1) 
Ansible failed to complete successfully. Any error output should be 
visible above. Please fix these errors and try again. 

刪除ansible.extra_vars修復此錯誤,但後來我無法完成我想要的。

+0

看起來它應該可以工作,但我想知道是否有一個名爲'ENV'的環境變量與Ruby或其他地方的某些東西可怕地發生了衝突。如果你嘗試使用'ENV.fetch(「foobar」,「development」)',然後用'export foobar =「notdevelopment」''嘗試它,會發生什麼? – ydaetskcoR

+0

@ydaetskcoR事情是,如果我只是做'env:「開發」 - 這不會導致同樣的錯誤 - 不知道爲什麼。 –

+0

啊,我們走了,這將是Ansible中的'env'變量名稱衝突。嘗試調用它別的 – ydaetskcoR

回答

0

這是什麼要求設置環境變量?

如果可能,我會嘗試使用不同的方法。如果您希望以合理的方式對環境變量採取行動,則可以在庫存group_vars文件中設置該值,該值只對本地供應流浪者有效。其他環境可以通過更新相應的庫存group_vars文件爲同一變量使用不同的值。

+0

使用環境變量可以讓我更改使用哪種環境的簡單方式 - 當然,仍然可以使用基於文件的配置,但大多數其他生產系統(例如使用CI)將使用相同的環境變量用例。 –

+0

同意。正如你所說,許多技術可以通過環境變量進行定製。基於技術的基於文件的配置不是互相排斥的。如果你願意的話,我可以舉一個更具體的例子。 – tphummel

相關問題