2017-07-14 1 views
1

Wie der Titel sagt, wenn ich in der Lage sein, eine Variable, die unter einer Gruppe von Gastgeber zu einem anderen registriert ist, aber ich bin mir nicht sicher, wie das zu tun, und ich konnte nicht Finden Sie unter der variablen Dokumentation alle relevanten Informationen http://docs.ansible.com/ansible/playbooks_variables.htmlAnsible übergeben Variablen zwischen Host-Kontexten

Dies ist ein vereinfachtes Beispiel für das, was ich versuche zu sehen. Ich habe ein Playbook, das viele verschiedene Gruppen aufruft und prüft, wo ein Symlink hinweist. Ich möchte in der Lage sein, alle Symlink-Ziele am Ende des Spiels zu melden.

Das Problem ist, dass der registrierte Wert nur unter der Hostgruppe gültig ist, in der er definiert wurde. Gibt es eine geeignete Methode, diese Variablen zu exportieren?

--- 
- hosts: max_logger 
    tasks: 
    - shell: ls -la /home/ubuntu/apps/max-logger/active | awk -F':' '{print $NF}' 
     register: max_logger_old_active 

- hosts: max_data 
    tasks: 
    - shell: ls -la /home/ubuntu/apps/max-data/active | awk -F':' '{print $NF}' 
     register: max_data_old_active 

- hosts: "localhost" 
    tasks: 
    - debug: > 
     msg="The old max_logger build is {{ max_logger_old_active.stdout }} 
      The old max_data build is {{ max_data_old_active.stdout }}" 

Antwort

1

Sie müssen hier nichts weiterleiten (Sie müssen nur zugreifen). Registrierte Variablen werden als Host-Fakten gespeichert und für die Zeit, in der das gesamte Playbook ausgeführt wird, im Speicher gespeichert, sodass Sie von allen nachfolgenden Spielen darauf zugreifen können.

Dies kann unter Verwendung von magic variable hostvars erreicht werden.

Sie müssen jedoch auf einen Hostnamen beziehen, die nicht notwendigerweise den Hostgruppennamen übereinstimmen (z max_logger), die Sie in der Frage gestellt:

- hosts: "localhost" 
    tasks: 
    - debug: > 
     msg="The old max_logger build is {{ hostvars['max_logger_host'].max_logger_old_active.stdout }} 
      The old max_data build is {{ hostvars['max_data_host'].max_data_old_active.stdout }}" 

Sie auch hostvars['max_data_host']['max_data_old_active']['stdout'] schreiben kann.

+0

Folgefrage: Gibt es eine einfache Möglichkeit, nur den ersten Host in einer Hostgruppe in diesem Format anzugeben? Ich weiß von diesem Befehl, aber ich weiß nicht, wie das zu einem Befehl passen würde, den Sie vorgeschlagen haben. ansible_play_hosts.index (inventory_hostname) == 0 –

+1

Bitte schauen Sie sich den angehängten Link für andere magische Variablen an. Und mit dem Index '[0]' können Sie auf das erste Element einer Liste zugreifen. – techraf

+1

msg = "Der alte Max_Logger-Build ist {{hostvars [groups ['role_max_logger'] [0]] ['max_logger_old_active'] ['stdout']}} auf dem Host {{groups ['role_max_logger'] [0]}} Was ich letztendlich brauchte, danke für die Hilfe –

Verwandte Themen