Commit cea1db27 authored by Paris Stentoumis's avatar Paris Stentoumis
Browse files

refactor: improved tf-sdk client initialization for better usage across different controllers

parent 50957afa
Loading
Loading
Loading
Loading
+15 −40
Changes for service-resource-manager-implementation/src/controllers/edge_cloud_management_controller.py: 15 added lines, 40 removed lines.
Original line number Diff line number Diff line
import connexion
import logging
import uuid
from os import environ
from sunrise6g_opensdk import Sdk as sdkclient

logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.DEBUG)

# ---------------------------------------------------------------------
# Adapter initialization
# ---------------------------------------------------------------------

edgecloud_adapter = None

if environ.get("EDGE_CLOUD_ADAPTER_NAME"):
    edgecloud_adapter_name = environ["EDGE_CLOUD_ADAPTER_NAME"]
    edgecloud_adapter_base_url = environ.get("ADAPTER_BASE_URL")

    edgecloud_adapter_specs = {
        "client_name": edgecloud_adapter_name,
        "base_url": edgecloud_adapter_base_url,
    }
    edgecloud_adapter_specs.update(environ)
import connexion

    logger.info("Creating edge cloud adapter with env: %s", edgecloud_adapter_specs)
from src.services.tf_sdk import get_client

    adapters = sdkclient.create_adapters_from(
        adapter_specs={"edgecloud": edgecloud_adapter_specs}
    )
    edgecloud_adapter = adapters.get("edgecloud")

if edgecloud_adapter is None:
    raise RuntimeError("Edge cloud adapter could not be initialized")
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.DEBUG)
    
# ---------------------------------------------------------------------
# Helpers: normalize adapter responses
@@ -99,7 +74,7 @@ def register_service_function(body=None):
        payload = connexion.request.get_json()
        if not payload.get("appId"):
            payload["appId"] = str(uuid.uuid4())
        response = edgecloud_adapter.onboard_app(payload)
        response = get_client().onboard_app(payload)
        return _safe_http_json_response(response)
    except Exception as e:
        logger.exception("Failed to register service function")
@@ -108,7 +83,7 @@ def register_service_function(body=None):

def get_service_function(service_function_id: str):
    try:
        response = edgecloud_adapter.get_onboarded_app(service_function_id)
        response = get_client().get_onboarded_app(service_function_id)
        return _safe_http_json_response(response)
    except Exception as e:
        logger.exception("Failed to get service function")
@@ -117,7 +92,7 @@ def get_service_function(service_function_id: str):

def get_service_functions():
    try:
        response = edgecloud_adapter.get_all_onboarded_apps()
        response = get_client().get_all_onboarded_apps()
        return _safe_http_json_response(response)
    except Exception as e:
        logger.exception("Failed to list service functions")
@@ -126,7 +101,7 @@ def get_service_functions():

def deregister_service_function(service_function_id: str):
    try:
        response = edgecloud_adapter.delete_onboarded_app(service_function_id)
        response = get_client().delete_onboarded_app(service_function_id)
        return _safe_http_json_response(response)
    except Exception as e:
        logger.exception("Failed to deregister service function")
@@ -143,9 +118,9 @@ def deploy_service_function():
    try:
        body = connexion.request.get_json()

        response = edgecloud_adapter.deploy_app(
        response = get_client().deploy_app(
            body.get("appId"),
            body.get("appZones")
            body.get("appZones"),
        )

        return _safe_http_json_response(response)
@@ -160,7 +135,7 @@ def deploy_service_function():

def delete_deployed_service_function(app_id: str):
    try:
        response = edgecloud_adapter.undeploy_app(app_id)
        response = get_client().undeploy_app(app_id)
        return _safe_http_json_response(response)
    except Exception as e:
        logger.exception("Failed to undeploy service function")
@@ -169,7 +144,7 @@ def delete_deployed_service_function(app_id: str):

def get_deployed_service_function(app_id: str):
    try:
        response = edgecloud_adapter.get_deployed_app(app_id=app_id)
        response = get_client().get_deployed_app(app_id=app_id)
        return _safe_http_json_response(response)
    except Exception as e:
        logger.exception("Failed to get deployed service function")
@@ -178,7 +153,7 @@ def get_deployed_service_function(app_id: str):

def get_deployed_service_functions():
    try:
        response = edgecloud_adapter.get_all_deployed_apps()
        response = get_client().get_all_deployed_apps()
        return _safe_http_json_response(response)
    except Exception as e:
        logger.exception("Failed to list deployed service functions")
@@ -194,7 +169,7 @@ def get_nodes():
    Normalizes the HTTP response and ensures edgeCloudRegion is always present.
    """
    try:
        response = edgecloud_adapter.get_edge_cloud_zones()
        response = get_client().get_edge_cloud_zones()
        data, status = _safe_http_json_response(response)
        return _ensure_edge_cloud_region(data), status
    except Exception as e:
@@ -208,7 +183,7 @@ def node_details(node_id: str):
    Normalizes the HTTP response and ensures edgeCloudRegion is always present.
    """
    try:
        response = edgecloud_adapter.get_edge_cloud_zones_details(zone_id=node_id)
        response = get_client().get_edge_cloud_zones_details(zone_id=node_id)
        data, status = _safe_http_json_response(response)
        return _ensure_edge_cloud_region(data), status
    except Exception as e:
+38 −0
Changes for service-resource-manager-implementation/src/services/tf_sdk.py: 38 added lines, 0 removed lines.
Original line number Diff line number Diff line
import logging
from os import environ

from sunrise6g_opensdk import Sdk as sdkclient

logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.DEBUG)

client = None

def create_client():
    if environ.get("EDGE_CLOUD_ADAPTER_NAME"):
        edgecloud_adapter_name = environ["EDGE_CLOUD_ADAPTER_NAME"]
        edgecloud_adapter_base_url = environ.get("ADAPTER_BASE_URL")

        edgecloud_adapter_specs = {
            "client_name": edgecloud_adapter_name,
            "base_url": edgecloud_adapter_base_url,
        }
        edgecloud_adapter_specs.update(environ)

        logger.info("Creating edge cloud adapter with env: %s", edgecloud_adapter_specs)

        adapters = sdkclient.create_adapters_from(
            adapter_specs={"edgecloud": edgecloud_adapter_specs}
        )
        edgecloud_adapter = adapters.get("edgecloud")

        if edgecloud_adapter is None:
            raise RuntimeError("Edge cloud adapter could not be initialized")
        return edgecloud_adapter
    

def get_client():
    global client
    if client is None:
        client = create_client()
    return client
 No newline at end of file