#!/usr/bin/env python ########################################################################## # paloxmllib.py - Library of helpers for Palo Alto API interactions # ########################################################################## # Copyright 2017 Todd Shadburn # # Licensed under the GNU GPL version 2 # ########################################################################## import logging # Palo Alto XML formats for their API palo_xpath_separator = '/' palo_format_xpath_device_base = '/config/devices/entry[@name=\'localhost.localdomain\']' palo_format_xml_member_tag = '{tag}' palo_format_xml_userid_ip_action = """ update <{action}> {member_tag_lines} """ palo_format_xml_address_object = """ {ip} """ def palo_xml_userid_address(action='register', ip=None, persistent=0, tag_list=[]): if not ip: return '' if not action in ['register','unregister']: return '' member_tag_lines = '' for tag in tag_list: member_tag_lines += palo_format_xml_member_tag.format(**locals()) return palo_format_xml_userid_ip_action.format(**locals()) def palo_xml_address_object(action='', name=None, ip=None, location=''): if not ip: return '' if not name: return '' return palo_format_xml_address_object.format(**locals()) def palo_xpath_devicegroup_address(devicegroup=None, addrname=None): if not devicegroup: return None if not addrname: return None xpath = palo_xpath_separator.join([ palo_format_xpath_device_base, 'device-group', 'entry[@name=\'{name}\']'.format(name=devicegroup), 'address', 'entry[@name=\'{addrname}\']'.format(addrname=addrname), ]) return xpath