2016-01-29 16 views
12

Ich möchte eine ansible Variable auf einen Standardwert setzen, aber nur wenn die Variable nicht definiert ist. Ansonsten möchte ich es unverändert lassen.Ansible: Setze Variable nur wenn undefiniert

Ich habe versucht, diese beiden Ansätze und beide produzieren Rekursionsschleife:

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

Antwort

18

Es scheint, wie Sie einen falschen Ansatz einnehmen.

Werfen Sie einen Blick auf die Ansible-Dokumentation bezüglich variable precedence. Es ist eine integrierte Funktion von Ansible, die Standardvariable zu verwenden, wenn die Variable nicht definiert ist.

In ansible 2.x die Variable Vorrang wie folgt beginnt:

Rolle defaults

Inventar Vars

Also, wenn Sie einen Standardwert für eine Variable definieren möchten, sollten Sie Setzen Sie es in role/defaults/main.yml. Ansible wird diesen Wert nur verwenden, wenn die Variable nicht anderswo definiert ist. Eine andere Option ist die Verwendung eines Jinja2 filter. Mit einem Jinja Filter können Sie einen Standardwert für eine Variable wie folgt aus:

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

Mit den Jina2 Filter ist es möglich, so etwas wie '{{Variable tun | Standard (andere_Variable)}} '? – johnsona

+1

Das sollte funktionieren. Hast du es versucht? Funktioniert es? –

+2

Ja, ich dachte, ich müsste die geschweiften Klammern verschachteln, was nicht funktioniert. – johnsona

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