在多个清单主机组上运行可执行任务



我希望在多个库存组上运行相同的任务,例如:

[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']

但使用查找的方式更为"专业"。

相关内容

  • 没有找到相关文章

最新更新