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
相关产品推荐
相关产品推荐

