2017-02-08 2 views
0

Ich habe ein Playbook, das mehrere Rollen und serielle Setup hat, so dass es zuerst auf einer Maschine und dann auf dem Rest von ihnen läuft. In einer der Rollen habe ich die folgenden Aufgaben:Ansaible loop bezogene Probleme

- name: getting dbnodes IP addresses 
    local_action: shell echo "{% for host in groups['dbnodes'] %}{{ hostvars[host]['ansible_eth0']['ipv4']['address'] }},{% endfor %}" 
    run_once: true 
    register: IPS 

Im Grunde, was soll ich tun, ist, die IP-Adressen aller Hosts zu sammeln und mit IPS für die weitere Verwendung registrieren. Aber die Aufgabe versagt wegen der seriellen (ich denke) mit dem folgenden Fehler.

TASK [dbcluster : getting dbnodes IP addresses] ******************************** fatal: [162.220.52.190]: FAILED! => {"failed": true, "msg": "the field 'action' has an invalid value, which appears to include a variable that is undefined. The error was: 'dict object' has no attribute 'ansible_eth0'\n\nThe error appears to have been in '/root/tenon-delivery/ansible/roles/dbcluster/tasks/main.yml': line 52, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: getting dbnodes IP addresses\n^here\n"}

Während ansible dbnode -s setup läuft, kann ich sehen, dass die ansible_eth0 einen richtigen Wert hat. Ich verstehe nicht, warum es sagt, dass es nicht definiert ist.

Irgendeine Idee, wie man die Fakten auf allen Maschinen in der gleichen Zeit sammelt, während noch die Möglichkeit hat, dass mehrere Aufgaben/Handler noch serialisiert werden.

Antwort

0

ansible_eth0 Tatsache kann zum Zeitpunkt der Ausführung Ihrer Aufgabe unbekannt sein.

Vielleicht möchten Tatsache sammeln Spiel an der Spitze Ihres Textbuch hinzuzufügen:

- hosts: dbnodes 
    gather_facts: yes 
    tasks: 
    - debug: msg="facts gathering" 

- hosts: othernodes 
    tasks: 
    - name: getting dbnodes IP addresses 
     ... 
+0

aktualisiert, um die Frage, wie ich mehr Informationen – zozo6015

+0

Ihre Worte über Serienläufe bekam nichts ändern. Machen Sie ein separates Spiel, um alle Fakten zu sammeln, dann machen Sie alles andere. –

+0

tatsächlich ändert sich die Ursache, wenn ich die Seriennummer deaktivieren, dann funktioniert die Faktenerfassung. Die Frage ist in diesem Fall, wie man den Variablensatz in einem Spielbuch in ein anderes setzt. – zozo6015