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

如何在Ansible中基于条件在两个不同inventory组执行相同任务

Ansible按条件选择inventory组执行方案

你原有写法的核心问题是hosts字段不支持直接附加when条件,when仅用于控制任务/角色/块的执行逻辑,不能用来筛选目标主机组,你可以通过以下两种方式实现需求:

方案1:Jinja2条件表达式(简单场景首选,推荐)

直接在hosts字段使用Jinja2三元表达式判断要执行的组,语法如下:

- name: Stop component
  hosts: "{{ 'group_A' if flag | bool else 'group_B' }}"
  roles:
    - stop

执行playbook时通过参数传入flag即可:

  • 要在group_A执行:ansible-playbook 你的playbook文件名.yml -e "flag=true"
  • 要在group_B执行:ansible-playbook 你的playbook文件名.yml -e "flag=false"

方案2:动态分组(适合复杂筛选场景)

如果后续需要更复杂的分组逻辑(比如多组组合、结合主机属性筛选),可以用group_by模块先生成动态组再执行任务:

# 第一个play:生成动态目标组
- name: 动态筛选目标主机
  hosts: all
  gather_facts: false
  tasks:
    - name: 将符合条件的主机加入动态组
      ansible.builtin.group_by:
        key: "target_{{ 'A' if flag | bool else 'B' }}"
      when: (flag | bool and 'group_A' in group_names) or (not flag | bool and 'group_B' in group_names)

# 第二个play:在目标组执行任务
- name: Stop component
  hosts: target_{{ 'A' if flag | bool else 'B' }}
  roles:
    - stop

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:24:01