Let me share some example and what I wanted to achieve:
raw json data
(one sample for each ipData notation)
{
“protVersion”: 1,
“policyObject”: {
“networkPolicyObject”: [
{
“gid”: “00000000-0000-0000-0000-180388630238”,
“name”: “Network Object dummy1”,
“lastUpdateTime”: “2013-09-10T09:55:32.743Z”,
“parentGID”: “00000000-0000-0000-0000-000000000000”,
“type”: “NetworkPolicyObject”,
“comment”: “dns”,
“nodeGID”: “00000000-0000-0000-0000-000000000001”,
“isProperty”: false,
“isGroup”: false,
“ipData”: “131.117.1.125”
},
{
“gid”: “00000000-0000-0000-0012-206297055671”,
“name”: “Network Object dummy2”,
“lastUpdateTime”: “2020-06-24T06:08:08.82Z”,
“parentGID”: “00000000-0000-0000-0000-000000000000”,
“type”: “NetworkPolicyObject”,
“comment”: “sample comment”,
“nodeGID”: “00000000-0000-0000-0000-000000000001”,
“isProperty”: false,
“isGroup”: false,
“ipData”: [
“10.7.190.8”,
“10.7.48.65”,
“10.7.49.41”,
“10.7.50.42”,
“10.7.190.73”,
“10.7.45.188”,
“10.7.45.189”,
“10.7.190.144”
]
},
{
“gid”: “00000000-0000-0000-0000-180388630208”,
“name”: “Network Object dummy3”,
“lastUpdateTime”: “2013-06-10T07:34:40.56Z”,
“parentGID”: “00000000-0000-0000-0000-000000000000”,
“type”: “NetworkPolicyObject”,
“comment”: “logging”,
“nodeGID”: “00000000-0000-0000-0000-000000000001”,
“isProperty”: false,
“isGroup”: false,
“ipData”: “10.1.57.52”
},
{
“gid”: “00000000-0000-0000-0001-765231559040”,
“name”: “Network Object dummy4”,
“lastUpdateTime”: “2010-10-29T11:58:06.496Z”,
“parentGID”: “00000000-0000-0000-0000-000000000000”,
“type”: “NetworkPolicyObject”,
“comment”: “nms”,
“nodeGID”: “00000000-0000-0000-0000-000000000001”,
“isProperty”: false,
“isGroup”: false,
“ipData”: “10.194.8.0/255.255.255.0”
},
{
“gid”: “00000000-0000-0000-0010-758893077356”,
“name”: “Network Object dummy5”,
“lastUpdateTime”: “2016-10-12T12:21:40.51Z”,
“parentGID”: “00000000-0000-0000-0000-000000000000”,
“type”: “NetworkPolicyObject”,
“comment”: “abc range”,
“nodeGID”: “00000000-0000-0000-0000-000000000001”,
“isProperty”: false,
“subType”: “NR”,
“isGroup”: false,
“ipData”: “131.117.80.0-131.117.127.255”
}
]
}
}
target structure
now, as a first step I build a map like this
{
“131.117.1.125”: {
“gid”: “00000000-0000-0000-0000-180388630238”,
“name”: “Network Object dummy1”,
“lastUpdateTime”: “2013-09-10T09:55:32.743Z”,
“parentGID”: “00000000-0000-0000-0000-000000000000”,
“type”: “NetworkPolicyObject”,
“comment”: “dns”,
“nodeGID”: “00000000-0000-0000-0000-000000000001”,
“isProperty”: false,
“isGroup”: false,
“ipData”: “131.117.1.125”
}
},
“131.117.1.126”: …
or better said in memory not using dictionary:
{
“131.117.1.125” : networkobject_class_ref1,
“131.117.1.126” : networkobject_class_ref2
}
…
{
“ranges”: [
{
“10.194.8.0/255.255.255.0”: {
“gid”: “00000000-0000-0000-0001-765231559040”,
“name”: “Network Object dummy4”,
“lastUpdateTime”: “2010-10-29T11:58:06.496Z”,
“parentGID”: “00000000-0000-0000-0000-000000000000”,
“type”: “NetworkPolicyObject”,
“comment”: “nms”,
“nodeGID”: “00000000-0000-0000-0000-000000000001”,
“isProperty”: false,
“isGroup”: false,
“ipData”: “10.194.8.0/255.255.255.0”
}
},
{
“131.117.80.0-131.117.127.255”: {
“gid”: “00000000-0000-0000-0010-758893077356”,
“name”: “Network Object dummy5”,
“lastUpdateTime”: “2016-10-12T12:21:40.51Z”,
“parentGID”: “00000000-0000-0000-0000-000000000000”,
“type”: “NetworkPolicyObject”,
“comment”: “abc range”,
“nodeGID”: “00000000-0000-0000-0000-000000000001”,
“isProperty”: false,
“subType”: “NR”,
“isGroup”: false,
“ipData”: “131.117.80.0-131.117.127.255”
}
}
]
}
and of course a lookup- Method to check wheather there is an entry that matches this given ip-address:
lookup.yml (using custom module/plugin ‘csm_network_objects’)
- name: load data in memory
csm_network_objects:
loadJSONfull: “{{ content_json_networkobjects }}”
- name: do ip lookup first time
csm_network_objects:
lookupIP: “131.117.1.125”
- name: do ip lookup second time
csm_network_objects:
lookupIP: “131.117.1.125”