2015-03-05 8 views
8

jinja2 hat Filter '| default()', um mit undefinierten Variablen zu arbeiten. Aber es funktioniert nicht mit Wörterbuchwerten.Standardwert für Wörterbuch in jinja2 (ansible)

wenn D haben Schlüssel foo (D [foo]) haben oder nicht, als:

{{ D[foo]|default ('no foo') }} 

wird druckt 'keine foo', wenn D nicht definiert ist, wird aber dazu führen, Fehler ('dict Objekt' hat kein Attribut 'foo') wenn D definiert ist, aber D [foo] nicht definiert ist.

Gibt es eine Möglichkeit, Standard für Wörterbuchelement zu machen?

Antwort

9

Dies scheint für mich mit Ansible 1.7.2 richtig zu funktionieren. Hier ist ein Test-Textbuch ich gerade geschrieben:

--- 
- hosts: localhost 
    vars: 
    D: 
    1 : "one" 
    2 : "two" 
    tasks: 
     - debug: var=D 

     - debug: msg="D[1] is {{ D[1]|default ('undefined') }}" 

     - debug: msg="D[3] is {{ D[3]|default ('undefined') }}" 

Und hier ist die Ausgabe von ihm ausgeführt wird:

TASK: [debug var=D] *********************************************************** 
ok: [localhost] => { 
    "D": { 
     "1": "one", 
     "2": "two" 
    } 
} 

TASK: [debug msg="D[1] is one"] *********************************************** 
ok: [localhost] => { 
    "msg": "D[1] is one" 
} 

TASK: [debug msg="D[3] is undefined"] ***************************************** 
ok: [localhost] => { 
    "msg": "D[3] is undefined" 
} 
+0

Danke. Es klappt. Und ich habe einen Fehler an einem anderen Ort gefunden, was einen verwirrend ähnlichen Fehler verursacht hat. –

Verwandte Themen