Ejecute una tarea ansible en otros miembros de un grupo, pero no en el miembro actual

Ejecute una tarea ansible en otros miembros de un grupo, pero no en el miembro actual

Entonces tengo un grupo de servidores nginx:

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

Y tengo una tarea previa a la implementación que ejecutar. Estoy ejecutando en serial:1modo y solo quiero que esta tarea previa a la implementación se ejecute en todos los demás excepto en mí.

Actualmente mi tarea se ve así, que se ejecuta perfectamente en todos los servidores nginx:

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

¿Alguna idea de cómo excluir el nodo actual de la lista groups['nginx_internal_servers']?

Respuesta1

¡Entiendo! Usa un cuando :)

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

Respuesta2

Versión de tarea genérica

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

información relacionada