Loading edge_cloud_management_api/controllers/app_controllers.py +54 −7 Original line number Diff line number Diff line Loading @@ -929,14 +929,61 @@ def delete_app_instance(appInstanceId: str, x_correlator=None): pi_edge_client_factory = PiEdgeAPIClientFactory() pi_edge_client = pi_edge_client_factory.create_pi_edge_api_client() response = pi_edge_client.delete_app_instance(appInstanceId) if isinstance(response, dict): if isinstance(response, dict) and response.get("status_code") != 404: status_code = response.get("status_code", 500) return jsonify(response), status_code if not isinstance(response, dict) and response.status_code != 404: return jsonify({ "result": response.text, "status": response.status_code }), response.status_code if not isinstance(response, dict): status_code = response.status_code 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", []) 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, app_instance_id=appInstanceId, zone_id=zone_id, token=fed_token, ) return jsonify(remove_response), remove_status return jsonify({ "error": response.get("error") if isinstance(response, dict) else response.text, "status_code": status_code }), status_code except Exception as e: return ( jsonify({ Loading edge_cloud_management_api/services/federation_services.py +51 −0 Original line number Diff line number Diff line Loading @@ -270,6 +270,57 @@ class FederationManagerClient: ) return {"error": str(e)}, 500 def remove_app_instance( self, federation_context_id: str, app_id: str, app_instance_id: str, zone_id: str, token: str, ): url = ( f"{self.base_url}/{federation_context_id}/application/lcm/app/{app_id}" f"/instance/{app_instance_id}/zone/{zone_id}" ) try: response = requests.delete(url, headers=self._get_headers(token), timeout=10) try: body = response.json() except ValueError: body = response.text response.raise_for_status() return body, response.status_code except Timeout: logger.error("DELETE /application/lcm/app/{appId}/instance/{appInstanceId}/zone/{zoneId} timed out") return {"error": "Request timed out"}, 408 except ConnectionError: logger.error( "DELETE /application/lcm/app/{appId}/instance/{appInstanceId}/zone/{zoneId} connection error" ) return {"error": "Connection error"}, 503 except requests.exceptions.HTTPError as http_err: logger.error( "DELETE /application/lcm/app/%s/instance/%s/zone/%s HTTP error: %s", app_id, app_instance_id, zone_id, http_err, ) try: body = http_err.response.json() except ValueError: body = http_err.response.text return {"error": body}, http_err.response.status_code except Exception as e: logger.error( "DELETE /application/lcm/app/%s/instance/%s/zone/%s unexpected error: %s", app_id, app_instance_id, zone_id, e, ) return {"error": str(e)}, 500 '''---AVAILABILITY ZONE INFO SYNCHRONIZATION---''' def request_zone_sync(self, federation_context_id: str, body: dict, token: str): Loading Loading
edge_cloud_management_api/controllers/app_controllers.py +54 −7 Original line number Diff line number Diff line Loading @@ -929,14 +929,61 @@ def delete_app_instance(appInstanceId: str, x_correlator=None): pi_edge_client_factory = PiEdgeAPIClientFactory() pi_edge_client = pi_edge_client_factory.create_pi_edge_api_client() response = pi_edge_client.delete_app_instance(appInstanceId) if isinstance(response, dict): if isinstance(response, dict) and response.get("status_code") != 404: status_code = response.get("status_code", 500) return jsonify(response), status_code if not isinstance(response, dict) and response.status_code != 404: return jsonify({ "result": response.text, "status": response.status_code }), response.status_code if not isinstance(response, dict): status_code = response.status_code 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", []) 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, app_instance_id=appInstanceId, zone_id=zone_id, token=fed_token, ) return jsonify(remove_response), remove_status return jsonify({ "error": response.get("error") if isinstance(response, dict) else response.text, "status_code": status_code }), status_code except Exception as e: return ( jsonify({ Loading
edge_cloud_management_api/services/federation_services.py +51 −0 Original line number Diff line number Diff line Loading @@ -270,6 +270,57 @@ class FederationManagerClient: ) return {"error": str(e)}, 500 def remove_app_instance( self, federation_context_id: str, app_id: str, app_instance_id: str, zone_id: str, token: str, ): url = ( f"{self.base_url}/{federation_context_id}/application/lcm/app/{app_id}" f"/instance/{app_instance_id}/zone/{zone_id}" ) try: response = requests.delete(url, headers=self._get_headers(token), timeout=10) try: body = response.json() except ValueError: body = response.text response.raise_for_status() return body, response.status_code except Timeout: logger.error("DELETE /application/lcm/app/{appId}/instance/{appInstanceId}/zone/{zoneId} timed out") return {"error": "Request timed out"}, 408 except ConnectionError: logger.error( "DELETE /application/lcm/app/{appId}/instance/{appInstanceId}/zone/{zoneId} connection error" ) return {"error": "Connection error"}, 503 except requests.exceptions.HTTPError as http_err: logger.error( "DELETE /application/lcm/app/%s/instance/%s/zone/%s HTTP error: %s", app_id, app_instance_id, zone_id, http_err, ) try: body = http_err.response.json() except ValueError: body = http_err.response.text return {"error": body}, http_err.response.status_code except Exception as e: logger.error( "DELETE /application/lcm/app/%s/instance/%s/zone/%s unexpected error: %s", app_id, app_instance_id, zone_id, e, ) return {"error": str(e)}, 500 '''---AVAILABILITY ZONE INFO SYNCHRONIZATION---''' def request_zone_sync(self, federation_context_id: str, body: dict, token: str): Loading