@@ -103,6 +103,22 @@ def normalize_nwobjects(full_config, config2import, import_id, nw_obj_types, jwt
103103 obj .update ({'control_id' : import_id })
104104 nw_objects .append (obj )
105105
106+ # dynamic objects have different return structure
107+ if 'response' in full_config ['nw_obj_global_firewall/internet-service-basic' ][0 ] and 'results' in full_config ['nw_obj_global_firewall/internet-service-basic' ][0 ]['response' ]:
108+ for obj_orig in full_config ['nw_obj_global_firewall/internet-service-basic' ][0 ]['response' ]['results' ]:
109+ if 'name' in obj_orig and 'q_origin_key' in obj_orig :
110+ obj = {
111+ 'obj_name' : obj_orig ['name' ],
112+ 'obj_typ' : 'network' ,
113+ 'obj_ip' : '0.0.0.0/0' ,
114+ 'obj_uid' : 'q_origin_key_' + str (obj_orig ['q_origin_key' ]),
115+ 'control_id' : import_id ,
116+ 'obj_zone' : 'global'
117+ }
118+ nw_objects .append (obj )
119+ else :
120+ logger .warning ("internet service objects return format broken" )
121+
106122 # finally add "Original" network object for natting
107123 original_obj_name = 'Original'
108124 original_obj_uid = 'Original'
@@ -189,7 +205,11 @@ def get_first_ip_of_destination(obj_ref, config2import):
189205
190206 for obj in config2import ['network_objects' ]:
191207 if 'obj_uid' in obj and obj ['obj_uid' ]== obj_ref :
192- return obj ['obj_ip' ]
208+ if 'obj_type' in obj and obj ['obj_type' ]== 'group' :
209+ if 'obj_member_refs' in obj and list_delimiter in obj ['obj_member_refs' ]:
210+ return get_first_ip_of_destination (obj ['obj_member_refs' ].split (list_delimiter )[0 ], config2import )
211+ elif 'obj_ip' in obj :
212+ return obj ['obj_ip' ]
193213 logger .warning ('src nat behind interface: found no IP info for destination object ' + obj_ref )
194214 return None
195215
@@ -210,13 +230,14 @@ def resolve_raw_objects (obj_name_string_list, delimiter, obj_dict, name_key, ui
210230 if rule_type is not None :
211231 if obj_type == 'network' :
212232 if 'v4' in rule_type and 'global' in rule_type :
213- object_tables = [obj_dict ['nw_obj_global_firewall/address' ], obj_dict ['nw_obj_global_firewall/addrgrp' ]]
233+ object_tables = [obj_dict ['nw_obj_global_firewall/address' ], obj_dict ['nw_obj_global_firewall/addrgrp' ], obj_dict [ 'nw_obj_global_firewall/internet-service-basic' ][ 0 ][ 'response' ][ 'results' ] ]
214234 elif 'v6' in rule_type and 'global' in rule_type :
215235 object_tables = [obj_dict ['nw_obj_global_firewall/address6' ], obj_dict ['nw_obj_global_firewall/addrgrp6' ]]
216236 elif 'v4' in rule_type and 'adom' in rule_type :
217237 object_tables = [obj_dict ['nw_obj_adom_firewall/address' ], obj_dict ['nw_obj_adom_firewall/addrgrp' ], \
218238 obj_dict ['nw_obj_global_firewall/address' ], obj_dict ['nw_obj_global_firewall/addrgrp' ], \
219- obj_dict ['nw_obj_adom_firewall/vip' ] ]
239+ obj_dict ['nw_obj_adom_firewall/vip' ], obj_dict ['nw_obj_adom_system/external-resource' ], \
240+ obj_dict ['nw_obj_global_firewall/internet-service-basic' ][0 ]['response' ]['results' ] ]
220241 elif 'v6' in rule_type and 'adom' in rule_type :
221242 object_tables = [obj_dict ['nw_obj_adom_firewall/address6' ], obj_dict ['nw_obj_adom_firewall/addrgrp6' ], \
222243 obj_dict ['nw_obj_global_firewall/address6' ], obj_dict ['nw_obj_global_firewall/addrgrp6' ]]
@@ -235,7 +256,13 @@ def resolve_raw_objects (obj_name_string_list, delimiter, obj_dict, name_key, ui
235256 else :
236257 for obj in tab :
237258 if obj [name_key ] == el :
238- ref_list .append (obj [uid_key ])
259+ if uid_key in obj :
260+ ref_list .append (obj [uid_key ])
261+ # in case of internet-service-object we find no uid field, but custom q_origin_key_
262+ elif 'q_origin_key' in obj :
263+ ref_list .append ('q_origin_key_' + str (obj ['q_origin_key' ]))
264+ else :
265+ logger .error ('found object without expected uid' )
239266 break_flag = True
240267 found = True
241268 break
0 commit comments