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

Ansible如何通过变量名模式匹配动态生成字典列表

Ansible按名称模式匹配变量生成字典列表的实现方式

Ansible完全支持按变量名模式匹配查询变量,不需要修改原有变量定义,常用的两种实现方式如下:

方式1:使用varnames查询插件直接筛选

这种方式代码最简洁,不需要额外依赖第三方集合:

- name: 生成匹配规则的动态列表
  hosts: localhost
  vars:
    # 原有定义的变量无需修改
    item_1a:
      name: first test item
      value: 100
    item_2a: 
      name: second test item
      value: 200
      options: extra
    item_zz:
      name: last test item
      option: nameless
    # 动态生成目标列表
    dynamic_list: >-
      {{
        hostvars[inventory_hostname].keys()
          | select('match', '^item_.*')
          | map('extract', hostvars[inventory_hostname])
          | list
      }}

  tasks:
    - name: 验证生成结果
      ansible.builtin.debug:
        var: dynamic_list

注意点

你需求里写的正则^item_*存在语法问题,它实际匹配的是ite开头、后接任意数量m的变量名,要匹配所有item_开头的变量,正则需要写成^item_.*。

方式2:使用vars lookup + 过滤器组合

如果需要同时处理多主机的变量,可以用这种方式:

dynamic_list: >-
  {{
    lookup('vars', *query('varnames', '^item_.*'))
      | list
  }}

两种方式输出的结果完全符合你需要的dynamic_list结构。

内容的提问来源于stack exchange,提问作者J. M. Becker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:45:09