2016-07-14 12 views
0

Ich versuche, Dinge so einfach wie möglich zu machen, wenn neue Sachen zu unseren Konfigurationsdateien in der Automatisierung hinzufügen und ich möchte es dynamisch aus der VARS-Datei generieren, ohne die Vorlage anpassen zu müssen jedes Mal, wenn eine neue Zeile benötigt wird.jinja2 Vorlage für ansible von vars gesteuert

Wir verwenden Rubin, also YAML formale Konfiguration. Ich dachte an so etwas wie dies mit:

{% for variable,value in example.iteritems() %} 
    {{ variable|lower() }}: "{{ value }}" 
{% endfor %} 

und in der Vars-Datei haben so etwas wie:

example: 
    host: whatever 
    pass: 123 
    port: 577 
    and so on 

Dies funktioniert ohne Probleme, außer wenn ich eine weitere Vertiefung Schicht hinzufügen müssen.

example: 
    host: whatever 
    pass: 123 
    port: 577 
    domain: 
    somevalue: bla.com 
    othervalue: foo.com 

Statt die gleiche Struktur in der Config zu erzeugen, es so etwas wie generieren:

domain: "{u'somevalue': u'bla.com', u'othervalue': u'foo.com'}" 

Jede Art und Weise die gleiche Struktur und Inhalte wie zu halten in Vars-Datei?

Danke.

+0

auch versucht, indem einfach hinzugefügt: {{Beispiel | to_nice_yaml}}, aber das führt dazu, dass der "domain" -Teil zuerst gedruckt wird, und zwar richtig eingerückt, aber der Rest ohne Einrückung. Wenn ich (Einrückung = 2, wahr) hinzufüge, wird alles korrekt eingerückt außer den Kindern aus der Domäne, die 4 Leerzeichen anstelle von 2 haben wird. – SeerKan

Antwort

0

Eingabedaten:

vars: 
    example: 
    host: whatever 
    pass: 123 
    port: 577 
    domain: 
     somevalue: bla.com 
     othervalue: foo.com 

4 Räume yaml template.j2:

example:{{ example | to_nice_yaml | comment(decoration=' ') }} 

Ergebnis:

example: 
    domain: 
     othervalue: foo.com 
     somevalue: bla.com 
    host: whatever 
    pass: 123 
    port: 577 

2 Räume yaml template.j2:

example:{{ example | to_yaml(indent=2, default_flow_style=False) | comment(decoration=' ') }} 

Ergebnis:

example: 
    domain: 
    othervalue: foo.com 
    somevalue: bla.com 
    host: whatever 
    pass: 123 
    port: 577 

Beachten Sie, dass die Reihenfolge des dict Schlüssels ouput aus Ihrer Eingabe unterscheiden kann, aber Sie sollten auf jeden Fall nicht auf sie verlassen.

+0

Leider nein, das gleiche Problem mit allen Methoden: Fügt 2 Leerzeichen mit Ausnahme der Domäne korrekt hinzu Kinder, es wird 4 dort hinzufügen und wird zu einer ungültigen Yaml-Datei führen. – SeerKan

+0

@SeerKan Ich habe die Antwort mit Beispielen aktualisiert. Bitte informieren Sie, was damit nicht stimmt. –

+0

Entschuldigung, ich war weg. Ich werde versuchen, Ihre Änderung diese Woche zu testen, und wenn es funktioniert, wird Ihre Antwort als die richtige ausgewählt. Vielen Dank. – SeerKan