{ "name": "Palo Alto Assets 2.1", "comment": "v 0.2", "version": "3.0", "type": "REST_EVENT", "event_type": [ "NETWORK_IPV4", "LEASE", "FIXED_ADDRESS_IPV4", "HOST_ADDRESS_IPV4" ], "action_type": "Palo Alto actions", "content_type": "application/json", "vendor_identifier": "Palo Alto", "quoting": "XMLA", "steps": [ { "name": "Debug Beginning", "operation": "NOP", "body": "${XC:DEBUG:{H:}}${XC:DEBUG:{E:}}${XC:DEBUG:{I:}}${XC:DEBUG:{L:}}${XC:DEBUG:{S:}}${XC:DEBUG:{P:}}${XC:DEBUG:{R:}}${XC:DEBUG:{RH:}}${XC:DEBUG:{UT:}}" }, { "name": "Start_modify_check", "comment": "Check for modify operation.", "operation": "CONDITION", "condition": { "condition_type": "AND", "statements": [{"left": "${E::operation_type}", "op": "==", "right": "MODIFY"}], "stop": true, "else_eval": "${XC:COPY:{L:timestamp}:{E:timestamp}}" } }, { "name": "Lease_check", "comment": "Check for lease", "operation": "CONDITION", "condition": { "condition_type": "AND", "statements": [{"left": "${E::event_type}", "op": "==", "right": "LEASE"}], "next": "Sync_check_required Lease" } }, { "name": "Host_add_check Ipv4", "comment": "Check event type", "operation": "CONDITION", "condition": { "condition_type": "AND", "statements": [{"left": "${E::event_type}", "op": "==", "right": "HOST_ADDRESS_IPV4"}], "next": "Sync_check_required_Host_Ipv4" } }, { "name": "FixedHost_add_check Ipv4", "comment": "Check event type", "operation": "CONDITION", "condition": { "condition_type": "AND", "statements": [ {"left": "${E::event_type}", "op": "==", "right": "FIXED_ADDRESS_IPV4"}, {"left": "${E:A:values{extattrs}{PaloAlto_Asset_Sync}{value}}", "op": "==", "right": "true"} ], "eval": "${XC:COPY:{L:Obj_ref}:{E:values{_ref}}${XC:COPY:{L:HostIp}:{E:values{ipv4addr}}}${XC:COPY:{L:ObjName}:{E:values{ipv4addr}}}", "next": "Fixed_check_action_Ipv4" } }, { "name": "Network_add_check", "comment": "Check event type", "operation": "CONDITION", "condition": { "condition_type": "AND", "statements": [ {"left": "${E::event_type}", "op": "==", "right": "NETWORK_IPV4"}, {"left": "${E:A:values{extattrs}{PaloAlto_Asset_Sync}{value}}", "op": "==", "right": "true"} ], "eval": "${XC:COPY:{L:Obj_ref}:{E:values{_ref}}${XC:COPY:{L:HostIp}:{E:values{network}}${XC:NETWORKTORANGE:{E:values{network}}:{L:NetRange}}", "else_stop": true } }, { "name": "Name for Net", "operation": "SERIALIZE", "serializations": [ {"destination": "L:HostIp","content": "${E:A:values{network}}"}, {"destination": "L:ObjName","content": "Network_${L:A:NetRange{{from}}}"} ] }, { "name": "Jump to Host_check action Ipv4", "comment": "Check event type", "operation": "CONDITION", "condition": { "condition_type": "AND", "statements": [ {"left": "${E::event_type}", "op": "==", "right": "NETWORK_IPV4"}, {"left": "${E::operation_type}", "op": "==", "right": "INSERT"} ], "next": "Host_check action Ipv4", "else_next": "Host_del_group" } }, { "name": "Sync_check_required Lease", "comment": "Check if event sync required", "operation": "CONDITION", "condition": { "condition_type": "AND", "statements": [ { "left": "${E:A:ip.extattrs{PaloAlto_Asset_Sync}}", "op": "!=", "right": "true" } ], "stop": true } }, { "name": "assignLeaseIpValue", "operation": "NOP", "body_list": [ "${XC:COPY:{L:HostIp}:{E:values{address}}}${XC:COPY:{L:ObjName}:{E:values{address}}}" ] }, { "name": "Lease_state_check", "comment": "Check binding state", "operation": "CONDITION", "condition": { "condition_type": "AND", "statements": [ {"left": "${E::binding_state}", "op": "!=", "right": "ACTIVE"} ], "next": "Check_If_Another_HostIPv4_exists", "else_next": "Host_add" } }, { "name": "Debug_8", "operation": "NOP", "body": "${XC:DEBUG:{H:}}${XC:DEBUG:{E:}}${XC:DEBUG:{I:}}${XC:DEBUG:{L:}}${XC:DEBUG:{S:}}${XC:DEBUG:{P:}}${XC:DEBUG:{R:}}${XC:DEBUG:{RH:}}${XC:DEBUG:{UT:}}" }, { "name": "Fixed_check_action_Ipv4", "comment": "Check operation type", "operation": "CONDITION", "condition": { "condition_type": "AND", "statements": [ {"left": "${E::operation_type}", "op": "==", "right": "DELETE"} ], "next": "Check_If_Another_HostIPv4_exists", "else_next": "Host_add" } }, { "name": "Debug_10", "operation": "NOP", "body": "${XC:DEBUG:{H:}}${XC:DEBUG:{E:}}${XC:DEBUG:{I:}}${XC:DEBUG:{L:}}${XC:DEBUG:{S:}}${XC:DEBUG:{P:}}${XC:DEBUG:{R:}}${XC:DEBUG:{RH:}}${XC:DEBUG:{UT:}}" }, { "name": "Sync_check_required_Host_Ipv4", "comment": "Check if event sync required", "operation": "CONDITION", "condition": { "condition_type": "AND", "statements": [ { "left": "${E:A:values{extattrs}{PaloAlto_Asset_Sync}{value}}", "op": "!=", "right": "true" } ], "stop": true, "else_eval":"${XC:COPY:{L:HostIp}:{E:values{ipv4addr}}}${XC:COPY:{L:ObjName}:{E:values{ipv4addr}}}" } }, { "name": "Debug_13", "operation": "NOP", "body": "${XC:DEBUG:{H:}}${XC:DEBUG:{E:}}${XC:DEBUG:{I:}}${XC:DEBUG:{L:}}${XC:DEBUG:{S:}}${XC:DEBUG:{P:}}${XC:DEBUG:{R:}}${XC:DEBUG:{RH:}}${XC:DEBUG:{UT:}}" }, { "name": "Host_check action Ipv4", "comment": "Check operation type", "operation": "CONDITION", "condition": { "condition_type": "AND", "statements": [ { "left": "${E::operation_type}", "op": "==", "right": "DELETE" } ], "next": "Check_If_Another_HostIPv4_exists", "else_next": "Host_add" } }, { "name": "Debug_14", "operation": "NOP", "body": "${XC:DEBUG:{H:}}${XC:DEBUG:{E:}}${XC:DEBUG:{I:}}${XC:DEBUG:{L:}}${XC:DEBUG:{S:}}${XC:DEBUG:{P:}}${XC:DEBUG:{R:}}${XC:DEBUG:{RH:}}${XC:DEBUG:{UT:}}" }, { "name": "Host_add", "comment": "Add an object", "parse": "XMLA", "operation": "GET", "no_connection_debug": false, "transport": { "path": "?type=config&action=set&xpath=/config/shared/address/entry[@name='${L:A:ObjName}']&element=${L:A:HostIp}&key=${S::SESKEY}" } }, { "name": "Debug_15", "operation": "NOP", "body": "${XC:DEBUG:{H:}}${XC:DEBUG:{E:}}${XC:DEBUG:{I:}}${XC:DEBUG:{L:}}${XC:DEBUG:{S:}}${XC:DEBUG:{P:}}${XC:DEBUG:{R:}}${XC:DEBUG:{RH:}}${XC:DEBUG:{UT:}}" }, { "name": "Host_add_group", "comment": "Add an object to group", "parse": "XMLA", "operation": "GET", "no_connection_debug": false, "transport": { "path": "?type=config&action=set&xpath=/config/shared/address-group/entry[@name='${S::Host_Allow}']&element=${L:A:ObjName}&key=${S::SESKEY}" } }, { "name": "Debug_16", "operation": "NOP", "body": "${XC:DEBUG:{H:}}${XC:DEBUG:{E:}}${XC:DEBUG:{I:}}${XC:DEBUG:{L:}}${XC:DEBUG:{S:}}${XC:DEBUG:{P:}}${XC:DEBUG:{R:}}${XC:DEBUG:{RH:}}${XC:DEBUG:{UT:}}" }, { "name": "Host_add errorcheck", "comment": "Check for errors", "operation": "CONDITION", "condition": { "statements": [ { "left": "success", "op": "!=", "right": "${P:A:PARSE{response}{{status}}}" } ], "condition_type": "AND", "error": true, "else_next": "commit" } }, { "name": "Debug_17", "operation": "NOP", "body": "${XC:DEBUG:{H:}}${XC:DEBUG:{E:}}${XC:DEBUG:{I:}}${XC:DEBUG:{L:}}${XC:DEBUG:{S:}}${XC:DEBUG:{P:}}${XC:DEBUG:{R:}}${XC:DEBUG:{RH:}}${XC:DEBUG:{UT:}}" }, { "name": "Check_If_Another_HostIPv4_exists", "operation": "GET", "transport": { "path": "record:host?ipv4addr=${L:A:HostIp}&network_view=${E:A:values{network_view}}&*PaloAlto_Asset_Sync=true&*PaloAlto_Asset_SyncedAt!=" }, "wapi": "v2.7" }, { "name": "Set_value_if_no_host_is_present", "comment": "Check for errors", "operation": "CONDITION", "condition": { "statements": [ { "left": "${P:A:PARSE[0]{_ref}}", "op": "==", "right": "" } ], "condition_type": "AND", "eval": "${XC:ASSIGN:{L:NoHost}:{S:true}}", "else_eval": "${XC:ASSIGN:{L:NoHost}:{S:false}}" } }, { "name": "Check_If_Another_FixedIPv4_exists", "operation": "GET", "transport": { "path": "fixedaddress?ipv4addr=${L:A:HostIp}&network_view=${E:A:values{network_view}}&*PaloAlto_Asset_Sync=true&*PaloAlto_Asset_SyncedAt!=" }, "wapi": "v2.7" }, { "name": "Stop_If_Another_Asset_Is_Present", "comment": "Check for errors", "operation": "CONDITION", "condition": { "statements": [ {"left": "${P:A:PARSE[0]{_ref}}", "op": "!=", "right": ""}, {"left": "${L:A:NoHost}", "op": "==", "right": "false"} ], "condition_type": "OR", "stop": true } }, { "name": "Host_del_group", "comment": "Delete an object to group", "parse": "XMLA", "operation": "GET", "no_connection_debug": false, "transport": { "path": "?type=config&action=delete&xpath=/config/shared/address-group/entry[@name='${S::Host_Allow}']/static/member[text()='${L:A:ObjName}']&key=${S::SESKEY}" } }, { "name": "Debug_18", "operation": "NOP", "body": "${XC:DEBUG:{H:}}${XC:DEBUG:{E:}}${XC:DEBUG:{I:}}${XC:DEBUG:{L:}}${XC:DEBUG:{S:}}${XC:DEBUG:{P:}}${XC:DEBUG:{R:}}${XC:DEBUG:{RH:}}${XC:DEBUG:{UT:}}" }, { "name": "Host_del_address", "comment": "Delete address object", "parse": "XMLA", "operation": "GET", "no_connection_debug": false, "transport": { "path": "?type=config&action=delete&xpath=/config/shared/address/entry[@name='${L:A:ObjName}']&key=${S::SESKEY}" } }, { "name": "Debug_19", "operation": "NOP", "body": "${XC:DEBUG:{H:}}${XC:DEBUG:{E:}}${XC:DEBUG:{I:}}${XC:DEBUG:{L:}}${XC:DEBUG:{S:}}${XC:DEBUG:{P:}}${XC:DEBUG:{R:}}${XC:DEBUG:{RH:}}${XC:DEBUG:{UT:}}" }, { "name": "Host_del errorcheck", "comment": "Check for errors", "operation": "CONDITION", "condition": { "statements": [ { "left": "success", "op": "!=", "right": "${P:A:PARSE{response}{{status}}}" } ], "condition_type": "AND", "error": true, "else_next": "commit" } }, { "name": "Debug_20", "operation": "NOP", "body": "${XC:DEBUG:{H:}}${XC:DEBUG:{E:}}${XC:DEBUG:{I:}}${XC:DEBUG:{L:}}${XC:DEBUG:{S:}}${XC:DEBUG:{P:}}${XC:DEBUG:{R:}}${XC:DEBUG:{RH:}}${XC:DEBUG:{UT:}}" }, { "name": "commit", "comment": "Start a commit", "parse": "XMLA", "operation": "GET", "no_connection_debug": false, "transport": { "path": "?type=commit&cmd=&key=${S::SESKEY}" } }, { "name": "Debug_21", "operation": "NOP", "body": "${XC:DEBUG:{H:}}${XC:DEBUG:{E:}}${XC:DEBUG:{I:}}${XC:DEBUG:{L:}}${XC:DEBUG:{S:}}${XC:DEBUG:{P:}}${XC:DEBUG:{R:}}${XC:DEBUG:{RH:}}${XC:DEBUG:{UT:}}" }, { "name": "commit errorcheck", "comment": "Check for errors", "operation": "CONDITION", "condition": { "statements": [ { "left": "${P:A:PARSE{response}{{status}}}", "op": "!=", "right": "success" } ], "condition_type": "AND", "error": true } }, { "name": "Debug_22", "operation": "NOP", "body": "${XC:DEBUG:{H:}}${XC:DEBUG:{E:}}${XC:DEBUG:{I:}}${XC:DEBUG:{L:}}${XC:DEBUG:{S:}}${XC:DEBUG:{P:}}${XC:DEBUG:{R:}}${XC:DEBUG:{RH:}}${XC:DEBUG:{UT:}}" }, { "name": "If_Delete_Then_Stop", "comment": "Check operation type", "operation": "CONDITION", "condition": { "condition_type": "AND", "statements": [ { "left": "${E::operation_type}", "op": "==", "right": "DELETE" } ], "stop": true } }, { "operation": "CONDITION", "name": "wapi_response_checkIf_Obj_Ref_Exists", "condition": { "condition_type": "AND", "statements": [ { "left": "${L:A:Obj_ref}", "op": "!=", "right": "" } ], "next": "Update extattrs timestamp" } }, { "name": "Debug_24", "operation": "NOP", "body": "${XC:DEBUG:{H:}}${XC:DEBUG:{E:}}${XC:DEBUG:{I:}}${XC:DEBUG:{L:}}${XC:DEBUG:{S:}}${XC:DEBUG:{P:}}${XC:DEBUG:{R:}}${XC:DEBUG:{RH:}}${XC:DEBUG:{UT:}}" }, { "name": "Get_HostIPv4_ref", "operation": "GET", "transport": { "path": "record:host?ipv4addr=${L:A:HostIp}&network_view=${E:A:values{network_view}}&name=${E:A:values{host}}" }, "wapi": "v2.7" }, { "name": "Debug_25", "operation": "NOP", "body": "${XC:DEBUG:{H:}}${XC:DEBUG:{E:}}${XC:DEBUG:{I:}}${XC:DEBUG:{L:}}${XC:DEBUG:{S:}}${XC:DEBUG:{P:}}${XC:DEBUG:{R:}}${XC:DEBUG:{RH:}}${XC:DEBUG:{UT:}}" }, { "name": "Get_Objref", "operation": "CONDITION", "condition": { "condition_type": "AND", "statements": [ { "left": "${P:A:PARSE[0]{_ref}}", "op": "==", "right": "" } ], "error": true, "else_eval": "${XC:COPY:{L:Obj_ref}:{P:PARSE[0]{_ref}}}" } }, { "name": "Debug_27", "operation": "NOP", "body": "${XC:DEBUG:{H:}}${XC:DEBUG:{E:}}${XC:DEBUG:{I:}}${XC:DEBUG:{L:}}${XC:DEBUG:{S:}}${XC:DEBUG:{P:}}${XC:DEBUG:{R:}}${XC:DEBUG:{RH:}}${XC:DEBUG:{UT:}}" }, { "name": "Update extattrs timestamp", "operation": "PUT", "transport": { "path": "${L:A:Obj_ref}" }, "wapi": "v2.7", "wapi_quoting": "JSON", "body_list": [ "{\"extattrs+\":{\"PaloAlto_Asset_SyncedAt\": { \"value\": \"${L:A:timestamp}\"}}}" ] }, { "name": "Debug_28", "operation": "NOP", "body": "${XC:DEBUG:{H:}}${XC:DEBUG:{E:}}${XC:DEBUG:{I:}}${XC:DEBUG:{L:}}${XC:DEBUG:{S:}}${XC:DEBUG:{P:}}${XC:DEBUG:{R:}}${XC:DEBUG:{RH:}}${XC:DEBUG:{UT:}}" }, { "name": "FinExit", "comment": "Stop execution of the template.", "operation": "CONDITION", "condition": { "condition_type": "AND", "statements": [ { "left": "1", "op": "==", "right": "1" } ], "stop": true } }, { "name": "Debug_29", "operation": "NOP", "body": "${XC:DEBUG:{H:}}${XC:DEBUG:{E:}}${XC:DEBUG:{I:}}${XC:DEBUG:{L:}}${XC:DEBUG:{S:}}${XC:DEBUG:{P:}}${XC:DEBUG:{R:}}${XC:DEBUG:{RH:}}${XC:DEBUG:{UT:}}" } ] }