我有一个 Ansible 清单
inventory.ini
,结构如下(示例中缩写):
[prod:children]
prod_first_plateform
[prod_first_plateform:children]
database_prod_first_plateform
embedded_prod_first_plateform
ldap_prod_first_plateform
proxy_prod_first_plateform
[database_prod_first_plateform]
serverA team=developer
serverZ team=integrator
[embedded_prod_first_plateform]
serverB team=integrator
serverY team=integrator
[ldap_prod_first_plateform]
serverC team=developer
serverX team=integrator
[proxy_prod_first_plateform]
serverD team=developer
serverW team=developer
要求如下:
我想在不同的环境中使用这个库存:
hosts: all
)hosts: prod_first_plateform
)team
主机变量,同时遵守此清单语法,而不添加新的主机组。我的问题在于第三点。
我的想法是使用在我的剧本中适用的语法,例如
hosts: all[team=developer]
。目前这个库存可以实现吗?
group_by
模块,以便根据变量创建自己的组。
鉴于:
- hosts: all
gather_facts: false
tasks:
- group_by:
key: "hosts_of_team_{{ team }}"
when: team is defined
- hosts: hosts_of_team_developer
gather_facts: false
tasks:
- debug:
var: ansible_play_hosts
run_once: true
在你的库存上运行它,第二次玩会产生:
ok: [serverA] =>
ansible_play_hosts:
- serverA
- serverC
- serverD
- serverW
正如预期的那样,因为当变量
team
通过 developer
等于 hosts: hosts_of_team_developer
时,我们就以主机为目标。