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

Ansible json_query调用regex_search报未知函数错误如何解决

报错根因

json_query过滤器基于JMESPath语法实现,原生不支持Ansible Jinja2环境的regex_search过滤器,直接在JMESPath查询表达式里调用就会抛出Unknown function: regex_search()错误。另外你原始playbook中第二个列表项的name字段值缺少闭合双引号,属于YAML语法错误,运行前需要先修正。

解决方案

不要在JMESPath表达式内混用Ansible自有过滤器,把字符串截取逻辑放在Jinja2层处理即可,这里用字符串分割的方式比正则更易读易维护:_ref字段固定为[前缀]:[目标vlan_view]/[其他路径]结构,先按冒号分割取最后一段,再按斜杠分割取第一段就能拿到需要的vlan_view值。

以下是可直接运行的修正版playbook,采用循环处理的写法可读性更高,方便后续调整逻辑:

- hosts: localhost
  vars:
    result:
      - _ref: "vlan/ZG5zLnZsYW4kLmNvbS5pbmZvYmxveC5kbnMudmxhbl92aWV3JElORlJBTEFCLjEuNDA5NC4xMQ:LAB1/test1/11"
        id: 11
        name: "test1"
        parent:
          _ref: "vlanview/ZG5zLnZsYW5fdmlldyRJTkZSQUxBQi4xLjQwOTQ:LAB1/1/4094"
      - _ref: "vlan/ZG5zLnZsYW4kLmNvbS5pbmZvYmxveC5kbnMudmxhbl92aWV3JFNDTEFCLU9PQi4xLjQwOTQuMTE:LAB2/test1/11"
        id: 11
        name: "test1"
        parent:
          _ref: "vlanview/ZG5zLnZsYW5fdmlldyRTQ0xBQi1PT0IuMS40MDk0:LAB2/1/4094"
  tasks:
    - name: 组装目标结构数据
      set_fact:
        vlan_data: "{{ vlan_data | default([]) + [
          {
            'vlan_view': item._ref.split(':') | last | split('/') | first,
            'vlan_id': item.id,
            'vlan_name': item.name
          }
        ] }}"
      loop: "{{ result }}"

    - debug:
        var: vlan_data

运行后输出结果完全匹配预期结构:

[
    {
        "vlan_view": "LAB1",
        "vlan_id": 11,
        "vlan_name": "test1"
    },
    {
        "vlan_view": "LAB2",
        "vlan_id": 11,
        "vlan_name": "test1"
    }
]

如果习惯用正则匹配,把vlan_view的取值逻辑替换为item._ref | regex_search('(?<=:)[^/]*')即可,在Jinja2层调用Ansible过滤器不会触发JMESPath的函数识别错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:27:20