현재 구성원이 아닌 그룹의 다른 구성원에 대해 Ansible 작업을 실행합니다.

현재 구성원이 아닌 그룹의 다른 구성원에 대해 Ansible 작업을 실행합니다.

그래서 nginx 서버 그룹이 있습니다.

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

그리고 실행할 사전 배포 작업이 있습니다. 저는 serial:1모드로 실행 중이고 이 사전 배포 작업이 저를 제외한 모든 사람에게만 실행되기를 원합니다.

현재 내 작업은 다음과 같습니다. 모든 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

목록에서 현재 노드를 제외하는 방법에 대한 아이디어가 있습니까 groups['nginx_internal_servers']?

답변1

알았어요! 언제를 사용하세요 :)

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

답변2

일반 작업 버전

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

관련 정보