targets セクションの hosts: と ansible-playbook コマンドの -l / --limit オプション

2019/03/09

Ansible

 targets セクションの hosts:

  •  play を実行する対象ホストを絞り込む
  • 対象ホストは inventory ファイルに定義されていること

 ansible-playbook コマンドの -l / --limit オプション

  •  targets セクションの hosts: で絞り込まれた対象ホストをさらに絞り込む
  • 引数は host-pattern で指定する

 -l / --limit オプションの host-pattern

host-pattern対象ホスト
all  target セクションの hosts: で絞りこまれたすべての対象ホスト(-l / --limit オプションを省略したときは all が指定されたと解釈される)
グループ名  target セクションの hosts: で絞りこまれた中の指定されたグループに含まれるすべての対象ホスト
ホスト名  target セクションの hosts: で絞り込まれた中の指定された対象ホスト

 組み合わせと実行対象になるホスト

hosts:-l / --limit オプション実行対象になるホスト
 all  all  inventory ファイル内のすべてのホスト
 all グループ名 オプションで指定したグループ内のすべてのホスト
 all ホスト名 オプションで指定したホスト
グループ名  all  hosts: で指定したグループ内のすべてのホスト
グループ名  hosts: と同じグループ名  hosts: / オプションで指定したグループ内のすべてのホスト
グループ名  hosts: と異なるグループ名 実行対象ホストなし
グループ名  hosts: で指定したグループ内のホスト名 オプションで指定したホスト
グループ名  hosts: で指定したグループと異なるグループのホスト名 実行対象ホストなし
ホスト名  all  hosts: で指定したホスト
ホスト名  hosts: で指定したホストを含むグループ名  hosts: で指定したホスト
ホスト名  hosts: で指定したホストを含まないグループ名 実行対象ホストなし
ホスト名  hosts: と同じホスト名  hosts: / オプションで指定したホスト
ホスト名  hosts: と異なるホスト名 実行対象なし

 例

■ inventory ファイル : hosts.yml
centos:
  hosts:
    node-c0610:
    node-c0706:
others:
  hosts:
    node-d0908:
    node-u1810: 

■ hosts: all
---
- hosts: all

  tasks:
    - name: 対象ホスト名の表示
      debug:
        msg: "{{ inventory_hostname }}"
・  -l all
[ansibleman@ansiblesv ansible]$ ansible-playbook -i hosts.yml -l all site.yml
 
PLAY [all] ****************************************************************************************
 
TASK [Gathering Facts] ****************************************************************************
ok: [node-d0908]
ok: [node-u1810]
ok: [node-c0706]
ok: [node-c0610]
 
TASK [対象ホスト名の表示] **********************************************************************************
ok: [node-c0610] => {
    "msg": "node-c0610"
}
ok: [node-c0706] => {
    "msg": "node-c0706"
}
ok: [node-u1810] => {
    "msg": "node-u1810"
}
ok: [node-d0908] => {
    "msg": "node-d0908"
}
 
PLAY RECAP ****************************************************************************************
node-c0610                 : ok=2    changed=0    unreachable=0    failed=0   
node-c0706                 : ok=2    changed=0    unreachable=0    failed=0   
node-d0908                 : ok=2    changed=0    unreachable=0    failed=0   
node-u1810                 : ok=2    changed=0    unreachable=0    failed=0   
 
[ansibleman@ansiblesv ansible]$
・ -l グループ名
[ansibleman@ansiblesv ansible]$ ansible-playbook -i hosts.yml -l others site.yml
 
PLAY [all] ****************************************************************************************
 
TASK [Gathering Facts] ****************************************************************************
ok: [node-d0908]
ok: [node-u1810]
 
TASK [対象ホスト名の表示] **********************************************************************************
ok: [node-u1810] => {
    "msg": "node-u1810"
}
ok: [node-d0908] => {
    "msg": "node-d0908"
}
 
PLAY RECAP ****************************************************************************************
node-d0908                 : ok=2    changed=0    unreachable=0    failed=0   
node-u1810                 : ok=2    changed=0    unreachable=0    failed=0   
 
[ansibleman@ansiblesv ansible]$ 
・ -l ホスト名
[ansibleman@ansiblesv ansible]$ ansible-playbook -i hosts.yml -l node-u1810 site.yml
 
PLAY [all] ****************************************************************************************
 
TASK [Gathering Facts] ****************************************************************************
ok: [node-u1810]
 
TASK [対象ホスト名の表示] **********************************************************************************
ok: [node-u1810] => {
    "msg": "node-u1810"
}
 
PLAY RECAP ****************************************************************************************
node-u1810                 : ok=2    changed=0    unreachable=0    failed=0   
 
[ansibleman@ansiblesv ansible]$ 

■ hosts: グループ名
---
- hosts: others

  tasks:
    - name: 対象ホスト名の表示
      debug:
        msg: "{{ inventory_hostname }}"
・  -l all
[ansibleman@ansiblesv ansible]$ ansible-playbook -i hosts.yml -l all site.yml
 
PLAY [others] *************************************************************************************
 
TASK [Gathering Facts] ****************************************************************************
ok: [node-d0908]
ok: [node-u1810]
 
TASK [対象ホスト名の表示] **********************************************************************************
vok: [node-u1810] => {
    "msg": "node-u1810"
}
ok: [node-d0908] => {
    "msg": "node-d0908"
}
 
PLAY RECAP ****************************************************************************************
node-d0908                 : ok=2    changed=0    unreachable=0    failed=0   
node-u1810                 : ok=2    changed=0    unreachable=0    failed=0   
 
[ansibleman@ansiblesv ansible]$
・ -l hosts: と同じグループ名
[ansibleman@ansiblesv ansible]$ ansible-playbook -i hosts.yml -l others site.yml
 
PLAY [others] *************************************************************************************
 
TASK [Gathering Facts] ****************************************************************************
ok: [node-d0908]
ok: [node-u1810]
 
TASK [対象ホスト名の表示] **********************************************************************************
ok: [node-u1810] => {
    "msg": "node-u1810"
}
ok: [node-d0908] => {
    "msg": "node-d0908"
}
 
PLAY RECAP ****************************************************************************************
node-d0908                 : ok=2    changed=0    unreachable=0    failed=0   
node-u1810                 : ok=2    changed=0    unreachable=0    failed=0   
 
[ansibleman@ansiblesv ansible]$
・ -l hosts: と異なるグループ名
[ansibleman@ansiblesv ansible]$ ansible-playbook -i hosts.yml -l centos site.yml
 
PLAY [others] *************************************************************************************
skipping: no hosts matched
 
PLAY RECAP ****************************************************************************************
 
[ansibleman@ansiblesv ansible]$
・ -l hosts: で指定したグループ内のホスト名
[ansibleman@ansiblesv ansible]$ ansible-playbook -i hosts.yml -l node-u1810 site.yml
 
PLAY [others] *************************************************************************************
 
TASK [Gathering Facts] ****************************************************************************
ok: [node-u1810]
 
TASK [対象ホスト名の表示] **********************************************************************************
ok: [node-u1810] => {
    "msg": "node-u1810"
}
 
PLAY RECAP ****************************************************************************************
node-u1810                 : ok=2    changed=0    unreachable=0    failed=0   
 
[ansibleman@ansiblesv ansible]$
・ -l hosts: で指定したグループと異なるグループのホスト名
[ansibleman@ansiblesv ansible]$ ansible-playbook -i hosts.yml -l node-c0706 site.yml
 
PLAY [others] *************************************************************************************
skipping: no hosts matched
 
PLAY RECAP ****************************************************************************************
 
[ansibleman@ansiblesv ansible]$

■ hosts: ホスト名
---
- hosts: node-u1810

  tasks:
    - name: 対象ホスト名の表示
      debug:
        msg: "{{ inventory_hostname }}"
・  -l all
[ansibleman@ansiblesv ansible]$ ansible-playbook -i hosts.yml -l all site.yml
 
PLAY [node-u1810] *********************************************************************************
 
TASK [Gathering Facts] ****************************************************************************
ok: [node-u1810]
 
TASK [対象ホスト名の表示] **********************************************************************************
ok: [node-u1810] => {
    "msg": "node-u1810"
}
 
PLAY RECAP ****************************************************************************************
node-u1810                 : ok=2    changed=0    unreachable=0    failed=0   
 
[ansibleman@ansiblesv ansible]$
・ hosts: 指定したホストを含むグループ名
[ansibleman@ansiblesv ansible]$ ansible-playbook -i hosts.yml -l others site.yml
 
PLAY [node-u1810] *********************************************************************************
 
TASK [Gathering Facts] ****************************************************************************
ok: [node-u1810]
 
TASK [対象ホスト名の表示] **********************************************************************************
ok: [node-u1810] => {
    "msg": "node-u1810"
}
 
PLAY RECAP ****************************************************************************************
node-u1810                 : ok=2    changed=0    unreachable=0    failed=0   
 
[ansibleman@ansiblesv ansible]$
・ hosts: 指定したホストを含まないグループ名
[ansibleman@ansiblesv ansible]$ ansible-playbook -i hosts.yml -l centos site.yml
 
PLAY [node-u1810] *********************************************************************************
skipping: no hosts matched
 
PLAY RECAP ****************************************************************************************
 
[ansibleman@ansiblesv ansible]$
・ -l hosts: と同じホスト名
[ansibleman@ansiblesv ansible]$ ansible-playbook -i hosts.yml -l node-u1810 site.yml
 
PLAY [node-u1810] *********************************************************************************
 
TASK [Gathering Facts] ****************************************************************************
ok: [node-u1810]
 
TASK [対象ホスト名の表示] **********************************************************************************
ok: [node-u1810] => {
    "msg": "node-u1810"
}
 
PLAY RECAP ****************************************************************************************
node-u1810                 : ok=2    changed=0    unreachable=0    failed=0   
 
[ansibleman@ansiblesv ansible]$
・ -l hosts: と異なるホスト名
[ansibleman@ansiblesv ansible]$ ansible-playbook -i hosts.yml -l node-c0706 site.yml
 
PLAY [node-u1810] *********************************************************************************
skipping: no hosts matched
 
PLAY RECAP ****************************************************************************************
 
[ansibleman@ansiblesv ansible]$

 まとめ

  •  -l / --limit オプションを targets セクションの hosts: と同じように使用する場合、hosts: all にする( hosts: による対象ホストの絞り込みをしない)
  • 対象ホストの絞り込みは targets セクションの hosts: か -l / --limit オプションのどちらかの一方に統一する(両方使用すると煩雑、対象ホストがゼロ件になる組み合わせがある)
  •  targets セクションの hosts: と -l / --limit オプションを併用する場合、playbook の実行前に --list-hosts オプションで実行対象になるホストを確認する

カテゴリー

目次

QooQ