特定のタスクを1号機だけ実行する
はじめに
下記のようなインベントリがあったとします。
[servers] node01 node02
node01
、node02
が、ほぼ同じ構成のとき、基本的にはservers
グループを対象としてPlaybookを作成すると思います。
しかし、何らかの事情で、あるタスクは1号機だけ実行したいというケースがあった場合、ホスト名のサフィックスを利用して、これを実現する例を書いてみます。
Playbook
- hosts: servers gather_facts: false tasks: - name: all node ansible.builtin.debug: msg: "I am {{ inventory_hostname }}" - name: only primary ansible.builtin.debug: msg: "I am {{ inventory_hostname }}" when: inventory_hostname | regex_search('.+01$')
実行結果
PLAY [servers] ****************************************************************************************************** TASK [all node] ***************************************************************************************************** ok: [node01] => { "msg": "I am node01" } ok: [node02] => { "msg": "I am node02" } TASK [only primary] ************************************************************************************************* ok: [node01] => { "msg": "I am node01" } skipping: [node02] PLAY RECAP ********************************************************************************************************** node01 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 node02 : ok=1 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0