びぼうろぐ

ネ申エクセルからの卒業

【Ansible】タスクの実行条件にホストグループを利用する

Magic変数の使い方をちょろちょろ覚えたいので、動かしながら検証していきます。

docs.ansible.com

今回はタイトルの通りホストグループを使ってタスクの制御を行ってみます。利用するMagic変数はgroup_namesです。

実行環境

$ cat /etc/redhat-release 
CentOS Linux release 8.1.1911 (Core) 
$ ansible --version
ansible 2.8.5

インベントリの内容

[dev]
node1

[test]
node2

[prod]
node3

[web:children]
dev
test
prod

group_namesの確認用Playbook

- hosts: all
  gather_facts: yes
  tasks:
    - debug:
        var: group_names

実行結果

$ ansible-playbook get_group_names.yml 

PLAY [all] ***********************************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************************
ok: [node2]
ok: [node3]
ok: [node1]

TASK [debug] *********************************************************************************************************************************************
ok: [node3] => {
    "group_names": [
        "prod",
        "web"
    ]
}
ok: [node2] => {
    "group_names": [
        "test",
        "web"
    ]
}
ok: [node1] => {
    "group_names": [
        "dev",
        "web"
    ]
}

PLAY RECAP ***********************************************************************************************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node2                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node3                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

ホストグループごとにタスクを実行するPlaybook例

- name: 実行条件にホストグループを利用する
  hosts: all                             
  tasks:                                 
    - ping:                              
      when: "'dev' in group_names"
    - ping:                              
      when: "'test' in group_names"    
    - ping:                              
      when: "'prod' in group_names"  
    - ping:                              
      when: "'web' in group_names" 

実行結果

$ ansible-playbook ping.yml

PLAY [実行条件にホストグループを利用する] *********************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************************
ok: [node1]
ok: [node3]
ok: [node2]

TASK [ping] **********************************************************************************************************************************************
skipping: [node3]
skipping: [node2]
ok: [node1]

TASK [ping] **********************************************************************************************************************************************
skipping: [node3]
skipping: [node1]
ok: [node2]

TASK [ping] **********************************************************************************************************************************************
skipping: [node2]
skipping: [node1]
ok: [node3]

TASK [ping] **********************************************************************************************************************************************
ok: [node2]
ok: [node1]
ok: [node3]

PLAY RECAP ***********************************************************************************************************************************************
node1                      : ok=3    changed=0    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0
node2                      : ok=3    changed=0    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0
node3                      : ok=3    changed=0    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0

参考にしたページ

qiita.com