Skip to content

Files

Latest commit

 

History

History
224 lines (183 loc) · 7.69 KB

ansible.netcommon.parse_xml_filter.rst

File metadata and controls

224 lines (183 loc) · 7.69 KB

ansible.netcommon.parse_xml

The parse_xml filter plugin.

Version added: 1.0.0

  • 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.
  • This plugin is deprecated and will be removed in a future release after 2027-02-01, please Use ansible.utils.cli_parse instead.
Parameter Choices/Defaults Configuration Comments
output
raw / required
This source xml on which parse_xml invokes.
tmpl
string
The spec file should be valid formatted YAML. It defines how to parse the XML output and return JSON data.
For example xml_data | ansible.netcommon.parse_xml(template.yml), in this case xml_data represents xml data option.

Note

  • To convert the XML output of a network device command into structured JSON output.
# 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)

Hint

Configuration entries for each entry type have a low to high priority order. For example, a variable that is lower in the list will override a variable that is higher up.