Q: “How to execute Ansible one host group at a time ?”
A: Put the code into a role(s) and import them conditionally. For example, given the trivial role test
shell > cat roles/test/tasks/main.yml
- debug:
msg: "Running at {{ inventory_hostname }}"
, the inventory
[HG1]
host_10
host_11
[HG2]
host_20
host_21
[HG3]
host_30
host_31
, and the playbook
- name: Import roles conditionally.
hosts: all
tasks:
- import_role:
name: test
when: inventory_hostname in groups.HG1
- import_role:
name: test
when: inventory_hostname in groups.HG2
- import_role:
name: test
when: inventory_hostname in groups.HG3
The play runs as expected
PLAY [Import roles conditionally.] **********************************************************************************
TASK [test : debug] *************************************************************************************************
ok: [host_10] =>
msg: Running at host_10
ok: [host_11] =>
msg: Running at host_11
TASK [test : debug] *************************************************************************************************
ok: [host_20] =>
msg: Running at host_20
ok: [host_21] =>
msg: Running at host_21
TASK [test : debug] *************************************************************************************************
ok: [host_30] =>
msg: Running at host_30
ok: [host_31] =>
msg: Running at host_31
PLAY RECAP **********************************************************************************************************
host_10 : ok=1 changed=0 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
host_11 : ok=1 changed=0 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
host_20 : ok=1 changed=0 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
host_21 : ok=1 changed=0 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
host_30 : ok=1 changed=0 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
host_31 : ok=1 changed=0 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
Q: “Would loop work?”
A: Yes, it would. But, in the loop, you have to use include_role instead of the import_role. See the difference between the static and dynamic use of the roles. Create the file include_role.yml
- include_role:
name: test
when: inventory_hostname in groups[item]
and iterate the groups’ list
- name: Include roles conditionally.
hosts: all
tasks:
- include_tasks: include_role.yml
loop: [HG1, HG2, HG3]
The play runs as expected
PLAY [Include roles conditionally.] *********************************************************************************
TASK [include_tasks] ************************************************************************************************
included: /export/scratch/vbotka/vbotka.ansible_qa/tasks/so-79874782/include_role.yml for host_10, host_11, host_20, host_21, host_30, host_31 => (item=HG1)
included: /export/scratch/vbotka/vbotka.ansible_qa/tasks/so-79874782/include_role.yml for host_10, host_11, host_20, host_21, host_30, host_31 => (item=HG2)
included: /export/scratch/vbotka/vbotka.ansible_qa/tasks/so-79874782/include_role.yml for host_10, host_11, host_20, host_21, host_30, host_31 => (item=HG3)
TASK [include_role : test] ******************************************************************************************
included: test for host_10, host_11
TASK [test : debug] *************************************************************************************************
ok: [host_10] =>
msg: Running at host_10
ok: [host_11] =>
msg: Running at host_11
TASK [include_role : test] ******************************************************************************************
included: test for host_20, host_21
TASK [test : debug] *************************************************************************************************
ok: [host_20] =>
msg: Running at host_20
ok: [host_21] =>
msg: Running at host_21
TASK [include_role : test] ******************************************************************************************
included: test for host_30, host_31
TASK [test : debug] *************************************************************************************************
ok: [host_31] =>
msg: Running at host_31
ok: [host_30] =>
msg: Running at host_30
PLAY RECAP **********************************************************************************************************
host_10 : ok=5 changed=0 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
host_11 : ok=5 changed=0 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
host_20 : ok=5 changed=0 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
host_21 : ok=5 changed=0 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
host_30 : ok=5 changed=0 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
host_31 : ok=5 changed=0 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
source code