2014-09-02 96 views
30

如何將yaml數組傳遞給Ansible playbook中的--extra-vars。 Ansible文檔沒有聲明它的語法,也不能在任何互聯網資源上找到它。將數組傳遞給--extra-vars - Ansible

我的意思是,如果我有一個劇本:

--- 
    - hosts: {{hostName}} 
    - remote_user: admin 
    ... 

然後我打電話給我的劇本就像

ansible-playbook DeployWar.yml --extra-vars="hostName=tomcat-webApp"

但我想運行在兩臺服務器上這個劇本說tomcat-webApptomcat-all,我想從外面控制它,例如使用--extra-vars。我試圖做的是:

ansible-playbook DeployWar.yml --extra-vars="hostName=[tomcat-webApp, tomcat-all]" 

ansible-playbook DeployWar.yml --extra-vars="hostName={tomcat-webApp, tomcat-all}" 

ansible-playbook DeployWar.yml --extra-vars="[{hostName: tomcat-webApp}, {hostName: tomcat-all}]" 

但是在所有情況下,劇本都無法在我的調用中聲明語法錯誤。 任何幫助表示讚賞。

回答

19

回答你的第一個問題「我如何將yaml數組傳遞給Ansible playbook中的--extra-vars」。 你可以通過json formatted string to extra-vars

下面是一個例子玩法:

- hosts: all 
    gather_facts: no 
    tasks: 
    - debug: var=test_list 

以及如何test_list傳遞給ansible-劇本:

ansible-playbook -c local -i localhost, test.yml --extra-vars='{"test_list": [1,2,3]}' 

雖然你可以使用一個變量的主機,我建議檢查出Ansible的機制主機管理是inventory連同--limit選項。

+2

每當我使用JSON的工作,無論是在額外增值經銷商或其他地方我發現使用http://jsonlint.com的成爲救星。通過將{test_list:[1,2,3]}粘貼到該網站中,您可以快速驗證您的JSON在語法上是否正確。將多個變量傳遞給Ansible或者當您使用任何其他複雜的JSON時尤其有用。 – 2014-09-05 15:29:41

+0

這個答案實際上是過時的 - 使用'--extra-vars ='{test_list:[1,2,3]}''會導致錯誤'錯誤:期望屬性名稱用雙引號括起來:第1行第2列字符1)'(至少1.9.4,我正在使用),因爲它不是有效的JSON。正確的版本將是'--extra-vars ='{「test_list」:[1,2,3]}' – iquito 2016-03-08 19:48:40

+0

已更新extra-vars格式,謝謝! – jarv 2016-03-09 12:58:27