2016-07-25 22 views
1

Gibt es in Ansible (dh über mehrere Hosts hinweg) eine "globale" Variable? Ich möchte ein Fehler-Flag setzen und dann ein bestimmtes separates Playbook aufrufen, wenn wir diesen Fehlerzustand treffen. Meine Struktur ist so etwas wie unten:Ansible - Globale Variablen

- hosts: localhost 
    connection: local 
    gather_facts: no 
    roles: 
    - role1 <-- some error flag is set here 
    - role2 
- include: teardown.yml 
    when: error_flag is defined and error_flag == true 

Ich habe versucht, eine Variable in group_vars Einstellung, aber es scheint mir, gibt es auch keine wirkliche Möglichkeit, Variablenwert während der Laufzeit zu ändern.

Set_fact funktioniert nicht, weil die when für die Teardown nicht im lokalen Host ist. Und selbst wenn ich versuche, auf hostvars['localhost']['error_flag] zuzugreifen, funktioniert das nicht, weil es scheint, dass Sie Jinja-Vorlagen in der when-Klausel nicht verwenden können.

+0

Die Hostvariable 'hostvars.localhost.error_flag' sollte in einer' when' Klausel ohne eine Jinja2-Vorlage verfügbar sein. Das heißt, schreibe diesen Ausdruck ohne die '{{}}}' Jinja2-Trennzeichen. –

Antwort

0

Als Chin Huang oben sagte, habe ich die Syntax in Bezug auf die Verwendung der when Klausel vermasselt. Also, indem Sie das beheben, funktioniert die when Klausel offensichtlich. Es scheint keine gute Möglichkeit zu sein, dynamische 'globale' Variablen in Ansible zu deklarieren, daher scheint die Verwendung der Variablen pro Host im Objekt hostvars der praktischste Weg zu sein.

Andere Quellen haben auch erwähnt, Dateien zu verwenden und die Daten aus Dateien zu lesen, aber das scheint unglaublich ineffizient. Also habe ich gebüßt, indem ich Sachen in localhost speichere.