2014-09-02 21 views
30

Come posso passare l'array yaml a --extra-vars in un libro di testo di Ansible. La documentazione di Ansible non dichiara la sua sintassi né posso trovarla su nessuna risorsa internet.Passa array in --extra-vars - Ansible

voglio dire se ho un playbook:

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

allora dovrei chiamare il mio playbook come

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

Ma voglio eseguire questo playbook su due server dire tomcat-webApp e tomcat-all, e voglio controllarlo dal lato esterno, ovvero utilizzando --extra-vars. Quello che ho cercato di fare è:

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}]" 

Ma in tutti i casi il playbook fallisce dichiarando un errore di sintassi nella mia chiamata. Qualsiasi aiuto apprezzato.

risposta

19

Per rispondere alla prima domanda "Come posso passare l'array yaml a --extra-vars nel playbook Ansible". puoi passare in un json formatted string to extra-vars.

Ecco un gioco Esempio:

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

E come passare in test_list a ansible-playbook:

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

Anche se è possibile utilizzare una variabile per gli host mi consiglia di controllare il meccanismo di Ansible per gestione host che è inventory in combinazione con l'opzione --limit.

+2

Ogni volta che sto lavorando con JSON, sia in extra-Vars o altrove Trovo l'uso di http://jsonlint.com essere un salvagente. Incollando {test_list: [1,2,3]} in quel sito puoi verificare rapidamente che il tuo JSON sia sintatticamente corretto. È particolarmente utile quando si passano più variabili ad Ansible o quando si ha un altro JSON complesso con cui si sta lavorando. –

+0

Questa risposta è in realtà obsoleta - l'uso di '--extra-vars = '{test_list: [1,2,3]}'' porterà all'errore 'ERRORE: nome della proprietà in attesa racchiuso tra virgolette: riga 1 colonna 2 (char 1) '(almeno con 1.9.4, che sto usando), perché non è valido JSON. La versione corretta sarebbe '--extra-vars = '{" test_list ": [1,2,3]}'' – iquito

+0

ha aggiornato la formattazione extra-vars, grazie! – jarv