2017-09-08 1 views
-1

Je suis confronté à un problème lors de la création d'un fichier JSON (dans JINJA2) en utilisant des variables dans ansible.Problème de variable dans le modèle JINJA2 ansible

Variables

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

Dans jinja2 modèle, je suis en train de définir la valeur comme

value: {{1 | 2}}

alors le formatage ne vient pas correctement. Il devrait venir comme

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

Une suggestion pour la déclaration JINJA2?

Répondre

0

En Jinja2, le caractère bar (« | ») est used to apply a filter, dans ce cas, il tente d'appliquer le filtre 2, à 1, qui ne peut évidemment pas de sens!

Dans ce cas, je recommanderais d'utiliser le builtin tojson filter de Jinja2, qui transformera un objet python en son équivalent JSON le plus proche. Ceci est présent si vous utilisez une version de Jinja2 supérieure à 2.9.

Idéalement je prétraiter les données afin que 1 et 2 sont dans le même dictionnaire, vous pouvez simplement écrire:

{{ combined | tojson }} 

Si ce n'est pas une option, vous pouvez essayer le un peu plus laid recherche:

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

Il utilise pythons dict constructor pour fusionner les deux dictionnaires.

EDIT: Si vous souhaitez imprimer votre json, appelez le filtre tojson avec le retrait souhaité, par ex. pour obtenir 2 retraits d'espace utiliser:

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

Merci pour toute information. Cela fonctionne bien. –

+0

Super! Si vous êtes satisfait de cette réponse, veuillez la marquer comme correcte afin que d'autres personnes puissent la trouver aussi. Merci! –