在 Ansible 剧本中指定多个默认组作为主机

Specifying multiple default groups as hosts in an Ansible playbook

我正在寻找一种方法来将多个默认组指定为 Ansible 剧本中的主机。我一直在用这个方法:

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

但是我试图避免手动指定主机(这很容易出错),如果我想 运行 针对多组服务器执行相同的任务(例如,开发 质量检查)。

我不知道这在剧本中是否可行:

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

我不知道这在库存中是否可行:

[development]
1.2.3.4

[qa]
2.3.4.5

[dev_plus_qa]
development
qa

创建多个冗余任务也是不可取的 - 我想避免强迫用户指定 specific_qa_hosts(例如)并且我想避免代码重复:

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

有什么优雅的方法可以做到这一点吗?

这确实是可能的,在 Ansible 的 common patterns targeting hosts and groups 文档中有描述。

因此,针对两个群体就像 hosts: group1:group2 一样简单,因此,您的剧本变为:

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

如果您想通过库存实现这一点,这也是可能的,as described in the documentation examples:

所以在你的情况下,它将是:

[development]
1.2.3.4

[qa]
2.3.4.5

[dev_plus_qa:children]
development
qa

然后,作为剧本:

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