Specifying multiple default groups as hosts in an Ansible playbook
Asked Answered
M

1

2

I'm looking for a way to specify multiple default groups as hosts in an Ansible playbook. I've been using this method:

- name:  Do things on hosts
  hosts: "{{ specific_hosts | default('development') }}"
  tasks:  # do things on hosts

However I'm trying to avoid specifying hosts manually (it is error-prone), and the default hosts are inadequate if I want to run the same tasks against multiple groups of servers (for instance, development and QA).

I don't know if this is possible in a playbook:

- name:  Do things on hosts
  hosts: "{{ specific_hosts | default('development') && default('qa') }}"

I don't know if this is possible in an inventory:

[development]
1.2.3.4

[qa]
2.3.4.5

[dev_plus_qa]
development
qa

Creating multiple redundant tasks is undesirable as well - I would like to avoid forcing users to specify specific_qa_hosts (for instance) and I would like to avoid code repitition:

- name: Do things on DEV
  hosts: "{{ specific_hosts | default('development') }}"
- name: Do things on QA
  hosts: "{{ specific_hosts | default('qa') }}"

Is there any elegant way of accomplishing this?

Maxilliped answered 14/12, 2020 at 19:3 Comment(0)
H
2

This is indeed possible and is described in the common patterns targeting hosts and groups documentation of Ansible.

So targeting two groups is as simple as hosts: group1:group2, and, so, your playbook becomes:

- name:  Do things on hosts
  hosts: "{{ specific_hosts | default('development:qa') }}"

And if you rather want to achieve this via the inventory, this is also possible, as described in the documentation examples:

So in your case, it would be:

[development]
1.2.3.4

[qa]
2.3.4.5

[dev_plus_qa:children]
development
qa

And then, as a playbook:

- name:  Do things on hosts
  hosts: "{{ specific_hosts | default('dev_plus_qa') }}"
Hazelhazelnut answered 14/12, 2020 at 19:13 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.