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

Ansible列表对比模板字符串报错:期望':',实际得到'}'

Ansible列表对比问题解决

首先明确:Ansible完全支持将vars定义的列表和stdout_lines返回的列表做对比,你的报错是两个细节问题导致的:

1. Jinja2模板语法错误

你在debug模块的msg里写了嵌套的{{ }},这是Jinja2不允许的。正确写法是在过滤器里直接引用变量,不需要再套一层模板标记。

2. stdout_lines的嵌套列表结构

从你的输出可以看到,logging_config.stdout_lines是嵌套列表(外层是一个列表,里面包含了存储配置的子列表),直接用整个外层列表对比会不符合预期,需要提取内层的实际配置列表,也就是logging_config.stdout_lines[0]。

修正后的Playbook

---
- name: Logging Audit
  connection: network_cli
  gather_facts: no
  vars: 
    golden: ["logging userinfo","logging buffered 65536"]

  tasks:
    - name: Grab Logging Config
      cisco.ios.ios_command:
        commands:
          - show run | i logging
      register: logging_config

    - name: Show raw config output
      ansible.builtin.debug:
        var: logging_config.stdout_lines

    - name: 检查设备上存在但黄金配置没有的条目
      ansible.builtin.debug:
        msg: "Items on switch but not in Standard: {{ logging_config.stdout_lines[0] | difference(golden) }}"

    - name: 检查黄金配置存在但设备上没有的条目
      ansible.builtin.debug:
        msg: "Items in Standard but not on switch: {{ golden | difference(logging_config.stdout_lines[0]) }}"

说明

  • 修正了模板语法:去掉了过滤器里嵌套的{{ }},直接使用变量名
  • 处理了嵌套列表:用logging_config.stdout_lines[0]获取实际的配置行列表
  • 补充了双向差异检查:既可以找出设备上多余的配置,也能找出缺失的黄金配置项,更符合审计需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:14:58