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

如何在Ansible中按通配符筛选JSON并提取image-id列表

Ansible筛选云实例并提取image-id可行方案

以下是实现需求的具体步骤和Playbook示例:

核心逻辑说明

通过链式调用Ansible过滤器,先筛选display-name符合指定命名规则且lifecycle-state为RUNNING的实例,再提取这些实例的image-id组成列表:

  • 用selectattr结合match(严格匹配正则)筛选命名格式;若需模糊匹配包含该模式的字符串,可替换为search
  • 用selectattr结合equalto筛选运行状态的实例
  • 用map提取目标字段,list转换为列表格式

完整Playbook示例

- name: 筛选目标云实例并提取image-id
  hosts: localhost
  vars:
    # 模拟云实例JSON数据
    cloud_instances:
      - display-name: "Application-Sandbox-dev-01"
        lifecycle-state: "RUNNING"
        image-id: "ami-123456"
      - display-name: "Application-Sandbox-test-02"
        lifecycle-state: "STOPPED"
        image-id: "ami-7890ab"
      - display-name: "Application-Sandbox-prod-03"
        lifecycle-state: "RUNNING"
        image-id: "ami-cdefgh"
      - display-name: "Web-Server-Prod-01"
        lifecycle-state: "RUNNING"
        image-id: "ami-ijklmn"
  tasks:
    - name: 生成符合条件的image-id列表
      set_fact:
        target_image_ids: >-
          {{ 
            cloud_instances 
            | selectattr('display-name', 'match', '^Application-Sandbox-.+-.+$') 
            | selectattr('lifecycle-state', 'equalto', 'RUNNING') 
            | map(attribute='image-id') 
            | list 
          }}

    - name: 输出结果
      debug:
        var: target_image_ids

关键细节解释

  1. 正则表达式说明:^Application-Sandbox-.+-.+$对应需求中的Application-Sandbox-*-*:
    • ^和$确保字符串严格匹配命名格式,避免匹配到包含该模式的其他字符串
    • .+匹配至少一个任意字符,替代通配符*的作用
  2. 过滤器顺序:先筛选命名再筛选状态,可减少后续处理的数据量
  3. 格式兼容:如果你的云实例数据是通过模块(如ec2_instance_info)获取的,直接替换cloud_instances为对应模块的返回变量即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 14:09:21