parse_xml¶
Collection Note
This module is part of the ansible.netcommon collection. To install the collection, use:
Added in version1.0.0.
Synopsis¶
- This filter will load the spec file and pass the command output through it, returning JSON output.
- The YAML spec file defines how to parse the CLI output.
Parameters¶
| Parameter | Defaults / Choices | Comments |
|---|---|---|
| output raw required |
This source xml on which parse_xml invokes. | |
| tmpl str |
The spec file should be valid formatted YAML. It defines how to parse the XML output and return JSON data. For example C(xml_data | ansible.netcommon.parse_xml(template.yml)), in this case C(xml_data) represents xml data option. |
Notes¶
Note
- To convert the XML output of a network device command into structured JSON output.
Examples¶
# Using parse_xml
# example_output.xml
# <?xml version="1.0" encoding="UTF-8"?>
# <rpc-reply message-id="urn:uuid:0cadb4e8-5bba-47f4-986e-72906227007f">
# <data>
# <ntp>
# <nodes>
# <node>
# <node>0/0/CPU0</node>
# <associations>
# <is-ntp-enabled>true</is-ntp-enabled>
# <sys-leap>ntp-leap-no-warning</sys-leap>
# <peer-summary-info>
# <peer-info-common>
# <host-mode>ntp-mode-client</host-mode>
# <is-configured>true</is-configured>
# <address>10.1.1.1</address>
# <reachability>0</reachability>
# </peer-info-common>
# <time-since>-1</time-since>
# </peer-summary-info>
# <peer-summary-info>
# <peer-info-common>
# <host-mode>ntp-mode-client</host-mode>
# <is-configured>true</is-configured>
# <address>172.16.252.29</address>
# <reachability>255</reachability>
# </peer-info-common>
# <time-since>991</time-since>
# </peer-summary-info>
# </associations>
# </node>
# </nodes>
# </ntp>
# </data>
# </rpc-reply>
# parse_xml.yml
# ---
# vars:
# ntp_peers:
# address: "{{ item.address }}"
# reachability: "{{ item.reachability}}"
# keys:
# result:
# value: "{{ ntp_peers }}"
# top: data/ntp/nodes/node/associations
# items:
# address: peer-summary-info/peer-info-common/address
# reachability: peer-summary-info/peer-info-common/reachability
- name: Facts setup
ansible.builtin.set_fact:
xml: "{{ lookup('file', 'example_output.xml') }}"
- name: Parse xml invocation
ansible.builtin.debug:
msg: "{{ xml | ansible.netcommon.parse_xml('parse_xml.yml') }}"
# Task Output
# -----------
#
# TASK [set xml Data]
# ok: [host] => changed=false
# ansible_facts:
# xml: |-
# <?xml version="1.0" encoding="UTF-8"?>
# <rpc-reply message-id="urn:uuid:0cadb4e8-5bba-47f4-986e-72906227007f">
# <data>
# <ntp>
# <nodes>
# <node>
# <node>0/0/CPU0</node>
# <associations>
# <is-ntp-enabled>true</is-ntp-enabled>
# <sys-leap>ntp-leap-no-warning</sys-leap>
# <peer-summary-info>
# <peer-info-common>
# <host-mode>ntp-mode-client</host-mode>
# <is-configured>true</is-configured>
# <address>10.1.1.1</address>
# <reachability>0</reachability>
# </peer-info-common>
# <time-since>-1</time-since>
# </peer-summary-info>
# <peer-summary-info>
# <peer-info-common>
# <host-mode>ntp-mode-client</host-mode>
# <is-configured>true</is-configured>
# <address>172.16.252.29</address>
# <reachability>255</reachability>
# </peer-info-common>
# <time-since>991</time-since>
# </peer-summary-info>
# </associations>
# </node>
# </nodes>
# </ntp>
# </data>
# </rpc-reply>
# TASK [Parse Data]
# ok: [host] => changed=false
# ansible_facts:
# output:
# result:
# - address:
# - 10.1.1.1
# - 172.16.252.29
# reachability:
# - '0'
# - '255'
Authors¶
- Ganesh Nalawade (@ganeshrn)