2015-03-05 14 views
8

jinja2 ma filtr '| default()' do pracy z niezdefiniowanymi zmiennymi. Ale nie działa z wartościami słownika.wartość domyślna dla słownika w jinja2 (ansible)

jeśli D może mieć lub nie mieć kluczową foo (D [bla]), niż:

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

will drukuje 'bez foo' jeśli D jest niezdefiniowana, ale spowoduje błędu ('Przedmiot dict' ma brak atrybutu "foo"), jeśli D jest zdefiniowany, ale D [foo] jest niezdefiniowany.

Czy możliwe jest ustawienie domyślne elementu słownika?

Odpowiedz

9

Wygląda na to, że działa poprawnie dla mnie przy użyciu Ansible 1.7.2. Oto PlayBook Test Właśnie napisał:

--- 
- 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') }}" 

I tu jest wyjście z prowadzenia go:

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

Dziękuję. To działa. I znalazłem błąd w innym miejscu, powodując myląco podobny błąd. –