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

如何使用Ansible Jinja2过滤Molecule中指定分组的平台配置条目

实现方案

1. 核心过滤逻辑

通过Ansible Jinja2过滤器组合即可实现按分组过滤需求,逻辑分为两步:

  • 读取MOLECULE_GROUP环境变量,兼容未传变量的场景(默认不过滤所有配置)
  • 筛选groups字段包含指定分组的platform条目

2. 编排文件修改示例

以create.yml为例,在文件最开头添加变量覆写逻辑,destroy.yml、converge.yml等其余自定义编排文件添加相同逻辑即可:

---
- name: Create
  hosts: localhost
  connection: local
  gather_facts: false
  vars:
    # 读取环境变量,未设置时默认值为空
    MOLECULE_GROUP: "{{ lookup('env', 'MOLECULE_GROUP') | default('', true) }}"
  pre_tasks:
    - name: 按分组过滤platforms配置
      set_fact:
        # 覆写molecule_yml的platforms字段
        molecule_yml: "{{ molecule_yml | combine({'platforms': filtered_platforms}) }}"
      vars:
        filtered_platforms: >-
          {% if MOLECULE_GROUP | length > 0 %}
          {{ molecule_yml.platforms | selectattr('groups', 'contains', MOLECULE_GROUP, default=[]) | list }}
          {% else %}
          {{ molecule_yml.platforms }}
          {% endif %}
  # 后续保留molecule原有执行逻辑即可
  roles:
    - role: molecule.default.create

低版本Jinja2兼容写法

如果运行环境Jinja2版本低于2.11,不支持selectattr的default参数,可替换过滤逻辑为:

{{ molecule_yml.platforms | map('combine', {'groups': []}) | list | selectattr('groups', 'contains', MOLECULE_GROUP) | list }}

3. 验证使用

执行命令时添加环境变量前缀即可按分组执行:
MOLECULE_GROUP=testme molecule test

  • 未指定MOLECULE_GROUP时默认保留所有platform配置,不影响原有使用逻辑
  • 指定不存在的分组时会得到空platform列表,Molecule自动跳过执行符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:45:06