2017-09-08 4 views
-1

Ich habe Probleme beim Erstellen von JSON-Datei (in JINJA2) durch Verwendung von Variablen in ansible.Variables Problem in Ansible JINJA2 Vorlage

Variablen

1:  
    abc: 
     add1: "1614" 
     add2: "1615" 
     add3: "1616" 
2:  
    deb: 
     add5: "1617" 
     add6: "1618" 
     add7: "1619" 

In Jinja2 Vorlage, bin ich definieren Wert wie

value: {{1 | 2}}

dann formatiert nicht richtig kommen. Es sollte als

{ 
    "abc": { 
    "add1": "1614", 
    "add2": "1615", 
    "add3": "1616" 
    }, 
    "deb": { 
    "add5": "1617", 
    "add6": "1618", 
    "add7": "1619" 
    } 
} 

Jeder Vorschlag für JINJA2 Erklärung kommen?

Antwort

0

In Jinja2, das Bar-Zeichen ("|") ist used to apply a filter, so dass in diesem Fall, es versucht, die Filter 2, zu 1, anzuwenden, die offensichtlich keinen Sinn macht!

In diesem Fall würde ich empfehlen, die builtin tojson filter von Jinja2 zu verwenden, die ein Python-Objekt in seine nächste JSON-Entsprechung umwandelt. Dies ist vorhanden, wenn Sie eine Version von Jinja2 größer als 2,9 verwenden.

Idealerweise würde ich vorverarbeiten die Daten so, dass 1 und 2 im gleichen Wörterbuch sind, so können Sie einfach schreiben:

{{ combined | tojson }} 

Wenn dies nicht möglich ist, können Sie das etwas hässlich versuchen Suche:

{{ dict(1, **2) | tojson }} 

Dies verwendet dict constructor Pythons die beiden Wörterbücher zu fusionieren.

BEARBEITEN: Wenn Sie Ihren JSON hübsch drucken möchten, rufen Sie den tojson Filter mit, wie viel von einem Einzug Sie möchten, z. Um 2 Leerzeichen zu erhalten, verwenden Sie:

{{ data | tojson(2) }} 
+0

Danke für alle Informationen. Das funktioniert gut. –

+0

Großartig! Wenn Sie mit dieser Antwort zufrieden sind, markieren Sie sie bitte so, dass sie auch von anderen gefunden werden kann. Vielen Dank! –

Verwandte Themen