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

如何在Ansible中根据用户选择提取对应站点的rooms数组

解决Ansible提取站点对应rooms数组的问题

你的核心需求是根据用户选择的站点,从sites数组中提取对应的rooms列表,当前的过滤器语法存在括号不闭合、缺少匹配项提取步骤的问题,以下是修正后的实现:

修正后的完整Playbook代码

---
- hosts: localhost
  become: no

  vars:
    - sites: [
        { "site":"A","rooms":["test1","test2"]},
        { "site":"B","rooms":["test3","test4"]},
        { "site":"C","rooms":["test5","test6"]},
        { "site":"D","rooms":["test7"] }
      ]
  vars_prompt:
    - name: site
      prompt: "whats site we working with A,B,C,D ?"
      private: no

  tasks:
    - name: 提取并打印对应站点的rooms数组
      ansible.builtin.debug:
        msg: "{{ sites | selectattr('site', 'equalto', site) | first | json_query('rooms') }}"
    
    # 可选:将结果保存为变量,供后续任务直接调用
    - name: 将rooms数组存入变量
      set_fact:
        target_rooms: "{{ sites | selectattr('site', 'equalto', site) | first | json_query('rooms') }}"
    
    - name: 验证变量内容
      ansible.builtin.debug:
        var: target_rooms

关键语法解释

  • selectattr('site', 'equalto', site):从sites列表中筛选出site字段与用户输入值匹配的字典项
  • first:由于每个站点唯一,直接取筛选结果的第一个(也是唯一一个)字典
  • json_query('rooms'):从匹配到的字典中提取rooms字段对应的数组(也可以用.rooms替代,效果完全一致)

测试效果

当用户输入A时,debug任务会输出["test1","test2"],target_rooms变量也会存储该数组,后续任务可直接通过{{ target_rooms }}调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:07:09