2015-01-02 8 views
25

Ist es möglich, eine Vars-Datei in Ansible dynamisch in eine andere Vars-Datei einzufügen?Wie VARS-Datei in eine VARS-Datei mit ansible?

I.e. Ich habe Vars-Datei:

--- 
definitions: 
- { product: web_v2, suite: mysuite, include: default_step.yml } 
- { product: prod2, suite: mysuite2, include: default_step.yml } 

Ich möchte den Inhalt des default_step.yml dem Wörterbuch hinzugefügt werden. Beachten Sie, dass dies in einer vars-Datei ist, so dass die Dokumentation zum Einbinden einer vars-Datei aus einer Aufgabe nicht zutrifft.

Alle ich denken kann, ist diese Datei mit Jinja Vorlage und verwenden seine {% include %} Funktion, und dann danach include_vars von der Hauptaufgabe verwenden, aber das scheint kompliziert ...

+0

Vars-Dateien haben keine integrierte include-Anweisung. Wenn Sie eine vars-Datei mit der 'include_vars'-Aufgabe einschließen, wird der Inhalt des Wörterbuchs außer Kraft gesetzt, wenn Sie in Ihrer Ansible-Konfiguration 'hash_behaviour = merge' definiert haben. Alternativ kannst du mein Action-Plugin ['include_vars_merged'] [1] verwenden. Beide Varianten würden jedoch nur das Wörterbuch auf der ersten Ebene zusammenführen. Vielleicht kannst du mein Plugin als Basis verwenden und tiefes Zusammenführen oder direkt ein "Include" implementieren. [1]: https://gist.github.com/udondan/b730206056a018cf9838 – udondan

Antwort

37

Leider Vars Dateien nicht enthalten Aussagen.

Sie können entweder alle Variablen in das definitions Wörterbuch einfügen oder die Variablen als weiteres Wörterbuch in derselben Datei hinzufügen.

Wenn Sie sich nicht in der gleichen Datei haben wollen, können Sie sie im Textbuch Ebene sind durch die Vars-Datei zu Beginn des Spiels hinzugefügt:

--- 
- hosts: myhosts 

    vars_files: 
    - default_step.yml 

oder in einer Aufgabe:

--- 
- hosts: myhosts 

    tasks: 
    - name: include default step variables 
     include_vars: default_step.yml 
0

ich weiß, es ist eine alte Post, aber ich hatte das gleiche Problem heute, was ich getan habe ist einfach: mein Skript zu ändern, dass mein Textbuch von meinem lokalen Rechner an den Server senden, bevor es mit maven Befehl senden, I tat dies:

cat common_vars.yml > vars.yml 
cat snapshot_vars.yml >> vars.yml 
# or 
#cat release_vars.yml >> vars.yml 
mvn ....