如何仅提取Ansible XML模块返回的JSON值而非键值对?
提取Ansible XML模块返回的具体值
不用正则也能轻松拿到你要的8779-8405,直接利用Ansible的结构化数据访问或者json_query过滤器就行,两种方法都很简便:
方法1:直接通过列表+字典索引取值
XML模块返回的matches是一个列表,第一个元素就是包含版本号的字典,直接通过索引定位即可:
假设你把XML模块的结果注册到了xml_output变量里,用下面的方式提取值:
{{ xml_output.matches.0['app-version'] }}
完整playbook示例:
- name: 获取设备版本号 hosts: localhost tasks: - name: 解析XML配置 community.general.xml: xpath: "/response/result/system/app-version" state: present # 替换为你的XML文件路径或对应数据源配置 path: "/path/to/device/config.xml" register: xml_output - name: 输出纯版本值 debug: msg: "{{ xml_output.matches.0['app-version'] }}"
方法2:使用json_query过滤器
如果需要更灵活的结构化查询,用json_query也可以,注意带连字符的键需要加引号:
{{ xml_output | json_query('matches[0]."app-version"') }}
对应的playbook任务:
- name: 用json_query提取版本值 debug: msg: "{{ xml_output | json_query('matches[0]."app-version"') }}"
这两种方法都是直接操作结构化数据,比正则替换更可靠,不会因为输出格式的小变动失效。
内容的提问来源于stack exchange,提问作者Moridn
相关产品推荐
相关产品推荐

