Commit d9390a91 authored by Sergio Gimenez's avatar Sergio Gimenez
Browse files

refactor: replace PiEdge naming with SRM clients

parent ad02d4dd
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -8,8 +8,8 @@ load_dotenv()
class Configuration(BaseSettings):
    MONGO_URI: str = os.getenv("MONGO_URI")
    SRM_HOST: str = os.getenv("SRM_HOST")
    PI_EDGE_USERNAME: str = os.getenv("PI_EDGE_USERNAME")
    PI_EDGE_PASSWORD: str = os.getenv("PI_EDGE_PASSWORD")
    SRM_USERNAME: str = os.getenv("SRM_USERNAME")
    SRM_PASSWORD: str = os.getenv("SRM_PASSWORD")
    HTTP_PROXY: str = os.getenv("HTTP_PROXY")
    FEDERATION_MANAGER_HOST=os.getenv("FEDERATION_MANAGER_HOST")
    TOKEN_ENDPOINT = os.getenv('TOKEN_ENDPOINT')
+28 −28
Original line number Diff line number Diff line
from flask import jsonify, request
from pydantic import ValidationError
from edge_cloud_management_api.managers.log_manager import logger
from edge_cloud_management_api.services.edge_cloud_services import PiEdgeAPIClientFactory
from edge_cloud_management_api.services.edge_cloud_services import SRMAPIClientFactory
from edge_cloud_management_api.services.federation_services import FederationManagerClientFactory
from edge_cloud_management_api.services.storage_service import get_zone
from edge_cloud_management_api.services.storage_service import insert_zones
@@ -217,7 +217,7 @@ def _dedupe_app_instances(instances):
    return deduped


def _resolve_app_provider(pi_edge_client, app_id_value, app_payload=None):
def _resolve_app_provider(srm_client, app_id_value, app_payload=None):
    if isinstance(app_payload, dict):
        provider = app_payload.get("appProvider") or app_payload.get("appProviderId")
        if provider:
@@ -228,7 +228,7 @@ def _resolve_app_provider(pi_edge_client, app_id_value, app_payload=None):
            if provider:
                return provider

    app_response = pi_edge_client.get_app(app_id_value)
    app_response = srm_client.get_app(app_id_value)
    if isinstance(app_response, dict):
        manifest = app_response.get("appManifest")
        if isinstance(manifest, dict):
@@ -241,9 +241,9 @@ def _resolve_app_provider(pi_edge_client, app_id_value, app_payload=None):
    return None


def _get_catalog_app_provider_map(pi_edge_client):
def _get_catalog_app_provider_map(srm_client):
    app_provider_map = {}
    apps = pi_edge_client.get_service_functions_catalogue()
    apps = srm_client.get_service_functions_catalogue()
    if not isinstance(apps, list):
        return app_provider_map

@@ -253,7 +253,7 @@ def _get_catalog_app_provider_map(pi_edge_client):
        app_id_value = app.get("appId") or app.get("id")
        if not app_id_value:
            continue
        provider = _resolve_app_provider(pi_edge_client, app_id_value, app_payload=app)
        provider = _resolve_app_provider(srm_client, app_id_value, app_payload=app)
        if provider:
            app_provider_map[app_id_value] = provider
    return app_provider_map
@@ -295,8 +295,8 @@ def submit_app(body: dict):
    Controller for submitting application metadata.
    """
    try:
        pi_edge_factory = PiEdgeAPIClientFactory()
        api_client = pi_edge_factory.create_pi_edge_api_client()
        srm_factory = SRMAPIClientFactory()
        api_client = srm_factory.create_srm_api_client()
        response = api_client.submit_app(body)
        return response

@@ -313,8 +313,8 @@ def submit_app(body: dict):
def get_apps(x_correlator=None):
    """Retrieve metadata information of all applications"""
    try:
        pi_edge_factory = PiEdgeAPIClientFactory()
        api_client = pi_edge_factory.create_pi_edge_api_client()
        srm_factory = SRMAPIClientFactory()
        api_client = srm_factory.create_srm_api_client()
        registered_apps = api_client.get_service_functions_catalogue()
        return registered_apps
    except Exception as e:
@@ -327,8 +327,8 @@ def get_apps(x_correlator=None):
def get_app(appId, x_correlator=None):
    """Retrieve the information of an Application"""
    try:
        pi_edge_factory = PiEdgeAPIClientFactory()
        api_client = pi_edge_factory.create_pi_edge_api_client()
        srm_factory = SRMAPIClientFactory()
        api_client = srm_factory.create_srm_api_client()
        response = api_client.get_app(appId)
        return response

@@ -348,8 +348,8 @@ def get_app(appId, x_correlator=None):
def delete_app(appId, x_correlator=None):
    """Delete Application metadata from an Edge Cloud Provider"""
    try:
        pi_edge_factory = PiEdgeAPIClientFactory()
        api_client = pi_edge_factory.create_pi_edge_api_client()
        srm_factory = SRMAPIClientFactory()
        api_client = srm_factory.create_srm_api_client()
        response = api_client.delete_app(appId=appId)
        if isinstance(response, dict) and int(response.get("status_code", 500)) >= 400:
            logger.info("SRM app delete failed, attempting federation cleanup")
@@ -437,8 +437,8 @@ def create_app_instance():
                "error": "Missing required fields: appId, appZones"
            }), 400

        pi_edge_client_factory = PiEdgeAPIClientFactory()
        pi_edge_client = pi_edge_client_factory.create_pi_edge_api_client()
        srm_client_factory = SRMAPIClientFactory()
        srm_client = srm_client_factory.create_srm_api_client()

        first_zone = app_zones[0] if isinstance(app_zones, list) and app_zones else {}
        if not isinstance(first_zone, dict):
@@ -457,7 +457,7 @@ def create_app_instance():
        zone = get_zone(edge_cloud_zone_id, edge_cloud_provider) if edge_cloud_zone_id else None
        if not zone and edge_cloud_zone_id:
            try:
                zones = pi_edge_client.edge_cloud_zones()
                zones = srm_client.edge_cloud_zones()
                if isinstance(zones, list):
                    for z in zones:
                        if not isinstance(z, dict):
@@ -494,7 +494,7 @@ def create_app_instance():
            # ============================================================
            # Step 1: Retrieve application metadata from SRM
            # ============================================================
            app_response = pi_edge_client.get_app(appId=app_id)
            app_response = srm_client.get_app(appId=app_id)
            appData = app_response.get("appManifest") if isinstance(app_response, dict) else None
            if not isinstance(appData, dict):
                appData = None
@@ -806,7 +806,7 @@ def create_app_instance():

        try:
            logger.debug("Sending deployment request to SRM")
            response = pi_edge_client.deploy_service_function(data=body)
            response = srm_client.deploy_service_function(data=body)

            if isinstance(response, dict) and "error" in response:
                logger.warning(
@@ -847,10 +847,10 @@ def get_app_instance(app_id=None, appId=None, x_correlator=None, xCorrelator=Non
        app_id = app_id or appId
        app_instance_id = app_instance_id or appInstanceId
        instances = []
        pi_edge_client_factory = PiEdgeAPIClientFactory()
        pi_edge_client = pi_edge_client_factory.create_pi_edge_api_client()
        srm_client_factory = SRMAPIClientFactory()
        srm_client = srm_client_factory.create_srm_api_client()

        local_response = pi_edge_client.get_app_instances()
        local_response = srm_client.get_app_instances()
        local_instances = []
        if isinstance(local_response, dict):
            local_instances = local_response.get("appInstances", [])
@@ -864,7 +864,7 @@ def get_app_instance(app_id=None, appId=None, x_correlator=None, xCorrelator=Non

        feds = get_all_feds()
        if app_id:
            app_provider_id = _resolve_app_provider(pi_edge_client, app_id)
            app_provider_id = _resolve_app_provider(srm_client, app_id)
            if app_provider_id:
                for app_id_value, _federation_context_id, _fed_token, zone_provider, fed_instances in _iter_federated_instances(
                    feds,
@@ -880,7 +880,7 @@ def get_app_instance(app_id=None, appId=None, x_correlator=None, xCorrelator=Non
            else:
                logger.info("Skipping federated lookup; no appProviderId for appId=%s", app_id)
        else:
            app_provider_map = _get_catalog_app_provider_map(pi_edge_client)
            app_provider_map = _get_catalog_app_provider_map(srm_client)
            for app_id_value, _federation_context_id, _fed_token, zone_provider, fed_instances in _iter_federated_instances(
                feds,
                app_provider_map.items(),
@@ -926,9 +926,9 @@ def delete_app_instance(appInstanceId: str, x_correlator=None):
    - Returns 204 if deleted, 404 if not found.
    """
    try:
        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)
        srm_client_factory = SRMAPIClientFactory()
        srm_client = srm_client_factory.create_srm_api_client()
        response = srm_client.delete_app_instance(appInstanceId)
        if isinstance(response, dict) and response.get("status_code") != 404:
            status_code = response.get("status_code", 500)
            return jsonify(response), status_code
@@ -943,7 +943,7 @@ def delete_app_instance(appInstanceId: str, x_correlator=None):
        else:
            status_code = response.get("status_code", 404)

        app_provider_map = _get_catalog_app_provider_map(pi_edge_client)
        app_provider_map = _get_catalog_app_provider_map(srm_client)

        feds = get_all_feds()
        for app_id_value, federation_context_id, fed_token, _zone_provider, fed_instances in _iter_federated_instances(
+8 −8
Original line number Diff line number Diff line
@@ -3,14 +3,14 @@ from pydantic import BaseModel, Field, ValidationError
from typing import List
from edge_cloud_management_api.configs.env_config import config
from edge_cloud_management_api.managers.log_manager import logger
from edge_cloud_management_api.services.edge_cloud_services import PiEdgeAPIClientFactory
from edge_cloud_management_api.services.edge_cloud_services import SRMAPIClientFactory
from edge_cloud_management_api.services.storage_service import insert_zones, get_zones
from edge_cloud_management_api.services.federation_services import FederationManagerClientFactory


try:
    pi_edge_factory = PiEdgeAPIClientFactory()
    api_client = pi_edge_factory.create_pi_edge_api_client()
    srm_factory = SRMAPIClientFactory()
    api_client = srm_factory.create_srm_api_client()
    zones = api_client.edge_cloud_zones()
    for zone in zones:
        zone['isLocal'] = 'true'
@@ -45,11 +45,11 @@ class EdgeCloudQueryParams(BaseModel):

def get_local_zones() -> list[dict]:
    """
    Get local Operator Platform available zones from PiEdge Service Resource Manager.
    Get local Operator Platform available zones from the Service Resource Manager.
    """
    try:
        pi_edge_factory = PiEdgeAPIClientFactory()
        api_client = pi_edge_factory.create_pi_edge_api_client()
        srm_factory = SRMAPIClientFactory()
        api_client = srm_factory.create_srm_api_client()
        result = api_client.edge_cloud_zones()

        if isinstance(result, dict) and "error" in result:
@@ -155,7 +155,7 @@ def get_edge_cloud_zones(x_correlator: str | None = None, region=None, status=No
    

def edge_cloud_zone_details(zoneId: str) -> dict:
    pi_edge_factory = PiEdgeAPIClientFactory()
    api_client = pi_edge_factory.create_pi_edge_api_client()
    srm_factory = SRMAPIClientFactory()
    api_client = srm_factory.create_srm_api_client()
    result = api_client.edge_cloud_zone_details(zone_id=zoneId)
    return result
+17 −17
Original line number Diff line number Diff line
from flask import jsonify
from pydantic import ValidationError #Field
from edge_cloud_management_api.managers.log_manager import logger
from edge_cloud_management_api.services.edge_cloud_services import PiEdgeAPIClientFactory
from edge_cloud_management_api.services.edge_cloud_services import SRMAPIClientFactory

def create_qod_session(body: dict):
    """
@@ -12,8 +12,8 @@ def create_qod_session(body: dict):
        # validated_data = AppManifest(**body)
        # validated_data_dict = validated_data.model_dump(mode="json")
        # validated_data_dict["_id"] = str(uuid.uuid4())
        pi_edge_factory = PiEdgeAPIClientFactory()
        api_client = pi_edge_factory.create_pi_edge_api_client()
        srm_factory = SRMAPIClientFactory()
        api_client = srm_factory.create_srm_api_client()
        response = api_client.create_qod_session(body)
        return response

@@ -35,8 +35,8 @@ def delete_qod_session(sessionId: str):
        # validated_data = AppManifest(**body)
        # validated_data_dict = validated_data.model_dump(mode="json")
        # validated_data_dict["_id"] = str(uuid.uuid4())
        pi_edge_factory = PiEdgeAPIClientFactory()
        api_client = pi_edge_factory.create_pi_edge_api_client()
        srm_factory = SRMAPIClientFactory()
        api_client = srm_factory.create_srm_api_client()
        response = api_client.delete_qod_session(sessionId=sessionId)

        return response
@@ -58,8 +58,8 @@ def get_qod_session(sessionId: str):
        # validated_data = AppManifest(**body)
        # validated_data_dict = validated_data.model_dump(mode="json")
        # validated_data_dict["_id"] = str(uuid.uuid4())
        pi_edge_factory = PiEdgeAPIClientFactory()
        api_client = pi_edge_factory.create_pi_edge_api_client()
        srm_factory = SRMAPIClientFactory()
        api_client = srm_factory.create_srm_api_client()
        response = api_client.get_qod_session(sessionId=sessionId)
        # Insert into MongoDB
        # with MongoManager() as db:
@@ -81,8 +81,8 @@ def get_qod_session(sessionId: str):
    
def create_traffic_influence_resource(body: dict):
        try:
            pi_edge_factory = PiEdgeAPIClientFactory()
            api_client = pi_edge_factory.create_pi_edge_api_client()
            srm_factory = SRMAPIClientFactory()
            api_client = srm_factory.create_srm_api_client()
            response = api_client.create_traffic_influence_resource(body)
            return response
        except ValidationError as e:
@@ -96,8 +96,8 @@ def create_traffic_influence_resource(body: dict):

def get_traffic_influence_resource(id: str):
    try:
            pi_edge_factory = PiEdgeAPIClientFactory()
            api_client = pi_edge_factory.create_pi_edge_api_client()
            srm_factory = SRMAPIClientFactory()
            api_client = srm_factory.create_srm_api_client()
            response = api_client.get_traffic_influence_resource(id)
            return response
    except ValidationError as e:
@@ -112,8 +112,8 @@ def get_traffic_influence_resource(id: str):

def delete_traffic_influence_resource(id: str):
    try:
            pi_edge_factory = PiEdgeAPIClientFactory()
            api_client = pi_edge_factory.create_pi_edge_api_client()
            srm_factory = SRMAPIClientFactory()
            api_client = srm_factory.create_srm_api_client()
            response = api_client.delete_traffic_influence_resource(id)
            return response
    except ValidationError as e:
@@ -127,8 +127,8 @@ def delete_traffic_influence_resource(id: str):

def get_all_traffic_influence_resources():
    try:
            pi_edge_factory = PiEdgeAPIClientFactory()
            api_client = pi_edge_factory.create_pi_edge_api_client()
            srm_factory = SRMAPIClientFactory()
            api_client = srm_factory.create_srm_api_client()
            response = api_client.get_all_traffic_influence_resources()
            return response
    except ValidationError as e:
@@ -146,8 +146,8 @@ def retrieve_location(body: dict):
    Forwards the request to the SRM which delegates to the configured network adapter.
    """
    try:
        pi_edge_factory = PiEdgeAPIClientFactory()
        api_client = pi_edge_factory.create_pi_edge_api_client()
        srm_factory = SRMAPIClientFactory()
        api_client = srm_factory.create_srm_api_client()
        response = api_client.retrieve_location(body)
        return response

+10 −10
Original line number Diff line number Diff line
@@ -9,7 +9,7 @@ proxies = {
    "https": config.HTTP_PROXY,
}

class PiEdgeAPIClient:
class SRMAPIClient:
    def __init__(self, base_url, username, password):
        self.base_url = base_url
        self.username = username
@@ -350,17 +350,17 @@ class PiEdgeAPIClient:
                error_body = {"error": response.text}
            return error_body, response.status_code

class PiEdgeAPIClientFactory:
class SRMAPIClientFactory:
    """
    Factory class to create instances of PiEdgeAPIClient.
    Factory class to create instances of SRMAPIClient.
    """

    def __init__(self):
        self.default_base_url = config.SRM_HOST
        self.default_username = config.PI_EDGE_USERNAME
        self.default_password = config.PI_EDGE_PASSWORD
        self.default_username = config.SRM_USERNAME
        self.default_password = config.SRM_PASSWORD

    def create_pi_edge_api_client(self, base_url=None, username=None, password=None):
    def create_srm_api_client(self, base_url=None, username=None, password=None):
        """
        Factory method to create a new SRMAPIClient instance.

@@ -370,7 +370,7 @@ class PiEdgeAPIClientFactory:
            password (str): The password for authentication. If None, the default is used.

        Returns:
            PiEdgeAPIClient: A new instance of the PiEdgeAPIClient.
            SRMAPIClient: A new instance of the SRMAPIClient.
        """
        if base_url is None:
            base_url = self.default_base_url
@@ -379,12 +379,12 @@ class PiEdgeAPIClientFactory:
        if password is None:
            password = self.default_password

        return PiEdgeAPIClient(base_url=base_url, username=username, password=password)
        return SRMAPIClient(base_url=base_url, username=username, password=password)


if __name__ == "__main__":
    pi_edge_factory = PiEdgeAPIClientFactory()
    api_client = pi_edge_factory.create_pi_edge_api_client()
    srm_factory = SRMAPIClientFactory()
    api_client = srm_factory.create_srm_api_client()

    edge_zones = api_client.edge_cloud_zones()
    logger.error("Edge zones:", edge_zones)
Loading