2016-01-29 13 views
12

Chciałbym ustawić zmienną ansibli na pewną wartość domyślną, ale tylko wtedy, gdy zmienna jest niezdefiniowana. W przeciwnym razie chciałbym, aby pozostała niezmieniona.Komunikat: ustaw zmienną tylko jeśli niezdefiniowana

Próbowałem te dwa podejścia i obydwa z nich produkują rekurencyjne pętli:

namespace: "{{namespace|default(default_namespace)}}" 
namespace: "{% if namespace is defined %}{{namespace}}{% else %}{{default_namespace}}{% endif %}" 

Odpowiedz

18

Wydaje się, że pacjent przyjmuje błędne podejście.

Zobacz dokumentację Ansable dotyczącą variable precedence. Jest to wbudowana funkcja Ansible do używania domyślnej zmiennej, jeśli zmienna nie jest zdefiniowana.

W ansibl 2.x zmienna pierwszeństwo zaczyna tak:

rola domyślnie

inwentaryzacji Vars

więc jeśli chcemy określić wartość domyślną dla zmiennej Państwo powinno ustaw go w role/defaults/main.yml. Ansible użyje tej wartości tylko wtedy, gdy zmienna nie zostanie zdefiniowana gdzie indziej. Można również użyć Jinja2 filter. Z filtrem Jinja można ustawić domyślną wartość dla zmiennej takich jak to:

{{ some_variable | default(5) }} 
+1

Używanie filtrów Jina2 to możliwe, aby zrobić coś jak '{{zmiennej | default (other_variable)}} '? – johnsona

+1

To powinno zadziałać. Próbowałeś tego? Czy to działa? –

+2

Tak, tak, zakładałem, że będę musiał zagnieżdżać nawiasy klamrowe, które nie działają. – johnsona

10
- set_fact: namespace="default_namespace" 
    when: namespace is undefined