我希望在多个库存组上运行相同的任务,例如:
[big_group]
greenhat
localhost
redhat
linux
[small_group]
localhost
[redhat_group]
redhat
根据我的剧本,我需要在[small_group]和[redhat_group]上运行任务
我的任务如下
- name: Disable HTTPS service from firewalld
firewalld:
service: https
permanent: false
state: disabled
zone: public
immediate: true
when: inventory_hostname in groups['small_group']
when: inventory_hostname in groups['redhat_group']
收到警告
[WARNING]: While constructing a mapping from firewall.yml, line 6, column 5, found a duplicate dict key (when). Using last defined value only.
行动手册结果:
TASK [Disable HTTPS service from firewalld] **************************************************************************************************************************************************
skipping: [localhost]
skipping: [redhat]
如何在when: inventory_hostname in groups[]
中指定多个组
感谢
一个任务中不能有多个when
子句。在您的情况下,您只需要加入两个组(+
(,并删除多个条目(如果有((使用unique
过滤器,以备将来的库存更改(。
when: inventory_hostname in ((groups['small_group'] + groups['redhat_group']) | unique )
同时,有一种更方便的方法IMO使用inventory_hostnames
查找并像在正常播放中那样利用模式
when: inventory_hostname in lookup('inventory_hostnames', 'small_group:redhat_group')
基本上,使用以下列表是可行的:
when:
- ansible_hostname in groups['small_group']
- ansible_hostname in groups['redhat_group']
但使用查找的方式更为"专业"。