Führen Sie Ansible-Aufgaben für andere Mitglieder einer Gruppe aus, jedoch nicht für das aktuelle Mitglied.

Führen Sie Ansible-Aufgaben für andere Mitglieder einer Gruppe aus, jedoch nicht für das aktuelle Mitglied.

Ich habe also eine Gruppe von Nginx-Servern:

[nginx_internal_servers]
n01.local
n02.local
n03.local

Und ich muss eine Pre-Deployment-Aufgabe ausführen. Ich verwende den serial:1Modus und möchte, dass diese Pre-Deployment-Aufgabe nur bei allen anderen außer mir ausgeführt wird.

Derzeit sieht meine Aufgabe so aus, die auf allen Nginx-Servern perfekt läuft:

pre_tasks:
    - name: Take service out of nginx upstream pools
          local_action: command {{ playbook_dir }}/scripts/nginx-upstream-management.sh -s {{ item[0] }} -r {{ item[2] }} -g {{ item[1] }}
          with_nested:
            - groups['nginx_internal_servers']
            - services_endpoints.keys()
            - ansible_all_ipv4_addresses|last

Irgendwelche Ideen, wie man den aktuellen Knoten aus der Liste ausschließen kann groups['nginx_internal_servers']?

Antwort1

Verstanden! Benutze ein „wenn“ :)

pre_tasks:
    - name: Take service out of nginx upstream pools
          local_action: command {{ playbook_dir }}/scripts/nginx-upstream-management.sh -s {{ item[0] }} -r {{ item[2] }} -g {{ item[1] }}
          with_nested:
            - groups['nginx_internal_servers']
            - services_endpoints.keys()
            - ansible_all_ipv4_addresses|last
          when: item[0] != inventory_hostname

Antwort2

Generische Aufgabenversion

- name: run on all but the first host in a play
  some_module: some_param=some_value
  when: inventory_hostname != play_hosts[0]

verwandte Informationen