You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Ansible任务在主机属于含指定后缀的组时执行?

Ansible任务条件:匹配包含指定子串的主机组

问题背景

某主机的group_names事实数据如下:

ok: [domain.examle.com] => {
    "ansible_facts": {
        "group_names": [
            "abc",
            "abc_b",
            "abc_b_p",
            "abc_b_p_mn",
            "abc_b_p_shd"
        ]
    },
    "changed": false
}

需要设置任务执行条件,当主机所属组名包含_shd或_mn时运行对应任务,原使用的when: "'_shd' in group_names"仅能匹配完整组名,无法满足需求。

可行解决方案

利用Ansible的any()过滤器遍历group_names列表,检查每个组名是否包含目标子串:

1. 匹配单个子串(以_shd为例)

when: group_names | any('_shd' in item for item in group_names)

2. 匹配多个子串(_shd或_mn)

写法一:拆分判断用or连接

when: group_names | any('_shd' in item for item in group_names) or group_names | any('_mn' in item for item in group_names)

写法二:单过滤器内组合判断

when: group_names | any(('_shd' in item) or ('_mn' in item) for item in group_names)

写法三:正则匹配(精准匹配结尾子串)

如果需要仅匹配以_shd或_mn结尾的组名,可使用正则search过滤器:

when: group_names | any(item | search('_(shd|mn)$') for item in group_names)

若只需包含子串而非结尾,去掉正则中的$即可:

when: group_names | any(item | search('_(shd|mn)') for item in group_names)

效果说明

以上所有写法都会遍历主机的全部组名,只要存在任意一个组名符合匹配规则,条件就会成立,任务将被执行。

内容的提问来源于stack exchange,提问作者Po_temkin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 04:35:10