2014-09-02 12 views
30

Wie kann ich Yaml-Array zu --extra-vars in Ansible Playbook übergeben. Ansible-Dokumentation erklärt nicht ihre Syntax, noch kann ich das auf irgendeiner Internetressource finden.Pass Array in --Extra-Vars - Ansible

Ich meine, wenn ich ein Textbuch haben:

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

Dann sage ich sollte mein Textbuch wie

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

Aber ich will nennen das Textbuch auf zwei Servern laufen tomcat-webApp und tomcat-all, und ich möchte es von außen z. B. mit --extra-vars steuern. Was ich versucht habe zu tun ist:

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

Aber in allen Fällen schlägt playbook fehl, einen Syntaxfehler in meinem Anruf zu erklären. Jede Hilfe wird geschätzt.

Antwort

19

Um Ihre erste Frage zu beantworten "Wie kann ich YamL Array an --Extra-Vars in Ansible Playbook übergeben." können Sie in eine json formatted string to extra-vars übergeben. Hier

ist ein Beispiel spielen:

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

Und wie in test_list passieren ansible-Textbuch:

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

Obwohl Sie eine Variable für Hosts verwenden kann ich empfehlen, Check-out ansible-Mechanismus für Host-Management, das inventory in Verbindung mit der Option --limit ist.

+2

Jedes Mal, wenn ich mit JSON arbeiten bin, ob in außer Vars oder anderswo finde ich die Verwendung von http://jsonlint.com ein Lebensretter sein. Indem Sie {test_list: [1,2,3]} in diese Site einfügen, können Sie schnell überprüfen, ob Ihr JSON syntaktisch korrekt ist. Dies ist besonders nützlich, wenn mehrere Variablen an Ansible übergeben werden oder wenn Sie einen anderen komplexen JSON verwenden, mit dem Sie arbeiten. –

+0

Diese Antwort ist tatsächlich veraltet - die Verwendung von '--extra-vars = '{test_list: [1,2,3]}'' führt zum Fehler 'ERROR: Expecting property name in Anführungszeichen eingeschlossen: Zeile 1 Spalte 2 (char 1) '(zumindest mit 1.9.4, die ich verwende), weil es JSON nicht gültig ist. Die korrekte Version wäre '--extra-vars = '{" test_list ": [1,2,3]}' ' – iquito

+0

hat die extra-vars-Formatierung aktualisiert, danke! – jarv