在 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') }}"
我正在寻找一种方法来将多个默认组指定为 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') }}"