現在のメンバーではなく、グループの他のメンバーに対して 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

分かりました! when を使用してください :)

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]

関連情報