You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ansible Playbook中使用parse_xml解析XML数据无返回结果的问题求助

问题原因分析及解决方法

你遇到的核心问题是**XML命名空间(XML Namespaces)**没有被正确处理,导致parse_xml模块无法匹配到目标节点,所以返回空的result数组。

具体原因拆解

你的XML数据包含两个关键的命名空间:

  1. 根节点<data>的默认命名空间:urn:ietf:params:xml:ns:netconf:base:1.0
  2. <ntp>节点及其子节点的专属命名空间:http://cisco.com/ns/yang/Cisco-IOS-XR-ip-ntp-oper

parse_xml模块的路径匹配不会自动识别命名空间,你之前的spec文件直接用data/ntp/nodes/node/associations这种无前缀路径,相当于在无命名空间的XML里查找节点,自然找不到任何匹配结果。

解决方法:在spec文件中添加命名空间映射

修改你的iosxr_ntp.yaml spec文件,添加命名空间定义,并在所有路径前加上对应的前缀:

---
# 新增命名空间映射,给不同的命名空间定义简短前缀
namespaces:
  nc: urn:ietf:params:xml:ns:netconf:base:1.0
  ntp: http://cisco.com/ns/yang/Cisco-IOS-XR-ip-ntp-oper
vars:
  ntp_peers:
    address: "{{ item.address }}"
    reachability: "{{ item.reachability}}"
keys:
  result:
    value: "{{ ntp_peers }}"
# 所有节点路径都加上对应命名空间前缀
top: nc:data/ntp:ntp/ntp:nodes/ntp:node/ntp:associations
items:
  address: ntp:peer-summary-info/ntp:peer-info-common/ntp:address
  reachability: ntp:peer-summary-info/ntp:peer-info-common/ntp:reachability

关键修改点说明

  1. namespaces:给两个命名空间分别定义了nc(对应netconf基础命名空间)和ntp(对应Cisco XR的ntp操作命名空间)两个前缀,方便在路径中引用。
  2. top路径nc:data指定根节点属于netconf命名空间,后续的ntp:ntpntp:nodes等节点都属于Cisco的ntp命名空间,必须加上前缀才能匹配。
  3. items路径:所有子节点(比如peer-summary-infoaddress)都属于ntp命名空间,所以也要加上ntp:前缀。

验证效果

修改完成后重新运行playbook,parsed_ntp_data.result应该会返回包含两个NTP peer的数组,每个元素包含addressreachability字段,类似下面的结构:

"parsed_ntp_data": {
  "result": [
    {
      "address": "10.1.1.1",
      "reachability": "0"
    },
    {
      "address": "172.16.252.29",
      "reachability": "255"
    }
  ]
}

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

火山引擎 最新活动