Loading edge_cloud_management_api/controllers/app_controllers.py +68 −32 Original line number Diff line number Diff line Loading @@ -943,36 +943,72 @@ def delete_app_instance(appInstanceId: str, x_correlator=None): else: status_code = response.get("status_code", 404) instances_response = get_app_instance() if isinstance(instances_response, tuple): instances_payload, _instances_status = instances_response else: instances_payload = instances_response instances_data = instances_payload.get_json() if hasattr(instances_payload, "get_json") else None instances_list = [] if isinstance(instances_data, dict): instances_list = instances_data.get("appInstanceInfo", []) def resolve_app_provider(app_id_value, app_payload=None): if isinstance(app_payload, dict): provider = app_payload.get("appProvider") or app_payload.get("appProviderId") if provider: return provider manifest = app_payload.get("appManifest") if isinstance(manifest, dict): provider = manifest.get("appProvider") or manifest.get("appProviderId") if provider: return provider app_response = pi_edge_client.get_app(app_id_value) if isinstance(app_response, dict): manifest = app_response.get("appManifest") if isinstance(manifest, dict): provider = manifest.get("appProvider") or manifest.get("appProviderId") if provider: return provider provider = app_response.get("appProvider") or app_response.get("appProviderId") if provider: return provider return None apps = pi_edge_client.get_service_functions_catalogue() app_provider_map = {} if isinstance(apps, list): for app in apps: if not isinstance(app, dict): continue app_id_value = app.get("appId") or app.get("id") if not app_id_value: continue provider = resolve_app_provider(app_id_value, app_payload=app) if provider: app_provider_map[app_id_value] = provider feds = get_all_feds() for fed in feds: fed_token = fed.get("token") federation_context_id = fed.get("_id") if not federation_context_id or not fed_token: continue for app_id_value, app_provider_id in app_provider_map.items(): fed_instances, fed_code = federation_client.get_all_app_instances( federation_context_id=federation_context_id, app_id=app_id_value, app_provider_id=app_provider_id, token=fed_token, ) if fed_code != 200 or not isinstance(fed_instances, list): continue for zone_info in fed_instances: if not isinstance(zone_info, dict): continue zone_id = zone_info.get("zoneId") instances_list = zone_info.get("appInstanceInfo", []) if not zone_id or not isinstance(instances_list, list): continue for instance in instances_list: if not isinstance(instance, dict): continue instance_id = instance.get("appInstIdentifier") or instance.get("appInstanceId") if instance_id != appInstanceId: continue fed_context_id = instance.get("federationContextId") or instance.get("fedContextId") zone_id = instance.get("zoneId") or instance.get("edgeCloudZoneId") app_id = instance.get("appId") if not (fed_context_id and zone_id and app_id): continue fed = get_fed(fed_context_id) if not fed: continue fed_token = fed.get("token") if not fed_token: continue remove_response, remove_status = federation_client.remove_app_instance( federation_context_id=fed_context_id, app_id=app_id, federation_context_id=federation_context_id, app_id=app_id_value, app_instance_id=appInstanceId, zone_id=zone_id, token=fed_token, Loading Loading
edge_cloud_management_api/controllers/app_controllers.py +68 −32 Original line number Diff line number Diff line Loading @@ -943,36 +943,72 @@ def delete_app_instance(appInstanceId: str, x_correlator=None): else: status_code = response.get("status_code", 404) instances_response = get_app_instance() if isinstance(instances_response, tuple): instances_payload, _instances_status = instances_response else: instances_payload = instances_response instances_data = instances_payload.get_json() if hasattr(instances_payload, "get_json") else None instances_list = [] if isinstance(instances_data, dict): instances_list = instances_data.get("appInstanceInfo", []) def resolve_app_provider(app_id_value, app_payload=None): if isinstance(app_payload, dict): provider = app_payload.get("appProvider") or app_payload.get("appProviderId") if provider: return provider manifest = app_payload.get("appManifest") if isinstance(manifest, dict): provider = manifest.get("appProvider") or manifest.get("appProviderId") if provider: return provider app_response = pi_edge_client.get_app(app_id_value) if isinstance(app_response, dict): manifest = app_response.get("appManifest") if isinstance(manifest, dict): provider = manifest.get("appProvider") or manifest.get("appProviderId") if provider: return provider provider = app_response.get("appProvider") or app_response.get("appProviderId") if provider: return provider return None apps = pi_edge_client.get_service_functions_catalogue() app_provider_map = {} if isinstance(apps, list): for app in apps: if not isinstance(app, dict): continue app_id_value = app.get("appId") or app.get("id") if not app_id_value: continue provider = resolve_app_provider(app_id_value, app_payload=app) if provider: app_provider_map[app_id_value] = provider feds = get_all_feds() for fed in feds: fed_token = fed.get("token") federation_context_id = fed.get("_id") if not federation_context_id or not fed_token: continue for app_id_value, app_provider_id in app_provider_map.items(): fed_instances, fed_code = federation_client.get_all_app_instances( federation_context_id=federation_context_id, app_id=app_id_value, app_provider_id=app_provider_id, token=fed_token, ) if fed_code != 200 or not isinstance(fed_instances, list): continue for zone_info in fed_instances: if not isinstance(zone_info, dict): continue zone_id = zone_info.get("zoneId") instances_list = zone_info.get("appInstanceInfo", []) if not zone_id or not isinstance(instances_list, list): continue for instance in instances_list: if not isinstance(instance, dict): continue instance_id = instance.get("appInstIdentifier") or instance.get("appInstanceId") if instance_id != appInstanceId: continue fed_context_id = instance.get("federationContextId") or instance.get("fedContextId") zone_id = instance.get("zoneId") or instance.get("edgeCloudZoneId") app_id = instance.get("appId") if not (fed_context_id and zone_id and app_id): continue fed = get_fed(fed_context_id) if not fed: continue fed_token = fed.get("token") if not fed_token: continue remove_response, remove_status = federation_client.remove_app_instance( federation_context_id=fed_context_id, app_id=app_id, federation_context_id=federation_context_id, app_id=app_id_value, app_instance_id=appInstanceId, zone_id=zone_id, token=fed_token, Loading