Commit cb477d57 authored by George Papathanail's avatar George Papathanail
Browse files

remove federation

parent 91fa9112
Loading
Loading
Loading
Loading
+0 −53
Original line number Diff line number Diff line
from flask import request, jsonify
from edge_cloud_management_api.services.federation_services import FederationManagerClientFactory

factory = FederationManagerClientFactory()
federation_client = factory.create_federation_client()

def create_federation():
    """
    POST /partner
    Forwards the federation creation request to Federation Manager.
    """
    try:
        body = request.get_json()
        result = federation_client.post_partner(body)
        return jsonify(result), 200 if "error" not in result else 502
    except Exception as e:
        return jsonify({"error": str(e)}), 400


def get_federation(federationContextId):
    """
    GET /{federationContextId}/partner
    Forwards the GET federation info request.
    """
    try:
        result = federation_client.get_partner(federationContextId)
        return jsonify(result), 200 if "error" not in result else 502
    except Exception as e:
        return jsonify({"error": str(e)}), 400


def delete_federation(federationContextId):
    """
    DELETE /{federationContextId}/partner
    Forwards the DELETE federation request.
    """
    try:
        result = federation_client.delete_partner(federationContextId)
        return jsonify(result), 200 if "error" not in result else 502
    except Exception as e:
        return jsonify({"error": str(e)}), 400


def get_federation_context_ids():
    """
    GET /fed-context-id
    Forwards the request to fetch federation context IDs.
    """
    try:
        result = federation_client.get_federation_context_ids()
        return jsonify(result), 200 if "error" not in result else 502
    except Exception as e:
        return jsonify({"error": str(e)}), 400
+0 −52
Original line number Diff line number Diff line
from pydantic import BaseModel, Field
from typing import List, Optional


class MobileNetworkIds(BaseModel):
    mncs: List[str]
    mcc: str


class FixedNetworkIds(BaseModel):
    __root__: List[str]


class CallbackCredentials(BaseModel):
    tokenUrl: str
    clientId: str
    clientSecret: str


class ServiceEndpoint(BaseModel):
    ipv4Addresses: Optional[List[str]] = None
    ipv6Addresses: Optional[List[str]] = None
    port: Optional[int] = None
    fqdn: Optional[str] = None


class ZoneDetails(BaseModel):
    geographyDetails: str
    zoneId: str
    geolocation: str


class FederationRequestData(BaseModel):
    origOPFederationId: str
    origOPCountryCode: Optional[str]
    origOPMobileNetworkCodes: Optional[MobileNetworkIds]
    origOPFixedNetworkCodes: Optional[List[str]]
    initialDate: str
    partnerStatusLink: str
    partnerCallbackCredentials: Optional[CallbackCredentials]


class FederationResponseData(BaseModel):
    federationContextId: str
    partnerOPFederationId: str
    partnerOPCountryCode: Optional[str]
    partnerOPMobileNetworkCodes: Optional[MobileNetworkIds]
    partnerOPFixedNetworkCodes: Optional[List[str]]
    offeredAvailabilityZones: Optional[List[ZoneDetails]]
    platformCaps: List[str]
    edgeDiscoveryServiceEndPoint: Optional[ServiceEndpoint]
    lcmServiceEndPoint: Optional[ServiceEndpoint]
+0 −108
Original line number Diff line number Diff line
import requests
from requests.exceptions import Timeout, ConnectionError
from edge_cloud_management_api.configs.env_config import config
from edge_cloud_management_api.managers.log_manager import logger

class FederationManagerClient:
    def __init__(self, base_url=None):
        self.base_url = base_url or config.FEDERATION_MANAGER_HOST

    def _get_headers(self):
        return {
            "Content-Type": "application/json",
            "Accept": "application/json"
        }

    def post_partner(self, data: dict):
        url = f"{self.base_url}/partner"
        try:
            response = requests.post(url, json=data, headers=self._get_headers(), timeout=10)
            response.raise_for_status()
            return response.json()
        except Timeout:
            logger.error("POST /partner timed out")
            return {"error": "Request timed out"}
        except ConnectionError:
            logger.error("POST /partner connection error")
            return {"error": "Connection error"}
        except requests.exceptions.HTTPError as http_err:
            logger.error(f"POST /partner HTTP error: {http_err}")
            return {"error": str(http_err), "status_code": response.status_code}
        except Exception as e:
            logger.error(f"POST /partner unexpected error: {e}")
            return {"error": str(e)}

    def get_partner(self, federation_context_id: str):
        url = f"{self.base_url}/{federation_context_id}/partner"
        try:
            response = requests.get(url, headers=self._get_headers(), timeout=10)
            response.raise_for_status()
            return response.json()
        except Timeout:
            logger.error("GET /{id}/partner timed out")
            return {"error": "Request timed out"}
        except ConnectionError:
            logger.error("GET /{id}/partner connection error")
            return {"error": "Connection error"}
        except requests.exceptions.HTTPError as http_err:
            logger.error(f"GET /{id}/partner HTTP error: {http_err}")
            return {"error": str(http_err), "status_code": response.status_code}
        except Exception as e:
            logger.error(f"GET /{id}/partner unexpected error: {e}")
            return {"error": str(e)}

    def delete_partner(self, federation_context_id: str):
        url = f"{self.base_url}/{federation_context_id}/partner"
        try:
            response = requests.delete(url, headers=self._get_headers(), timeout=10)
            if response.content:
                return response.json()
            return {"status": response.status_code}
        except Timeout:
            logger.error("DELETE /{id}/partner timed out")
            return {"error": "Request timed out"}
        except ConnectionError:
            logger.error("DELETE /{id}/partner connection error")
            return {"error": "Connection error"}
        except requests.exceptions.HTTPError as http_err:
            logger.error(f"DELETE /{id}/partner HTTP error: {http_err}")
            return {"error": str(http_err), "status_code": response.status_code}
        except Exception as e:
            logger.error(f"DELETE /{id}/partner unexpected error: {e}")
            return {"error": str(e)}

    def get_federation_context_ids(self):
        url = f"{self.base_url}/fed-context-id"
        try:
            response = requests.get(url, headers=self._get_headers(), timeout=10)
            response.raise_for_status()
            return response.json()
        except Timeout:
            logger.error("GET /fed-context-id timed out")
            return {"error": "Request timed out"}
        except ConnectionError:
            logger.error("GET /fed-context-id connection error")
            return {"error": "Connection error"}
        except requests.exceptions.HTTPError as http_err:
            logger.error(f"GET /fed-context-id HTTP error: {http_err}")
            return {"error": str(http_err), "status_code": response.status_code}
        except Exception as e:
            logger.error(f"GET /fed-context-id unexpected error: {e}")
            return {"error": str(e)}


class FederationManagerClientFactory:
    def __init__(self):
        self.default_base_url = config.FEDERATION_MANAGER_HOST

    def create_federation_client(self, base_url=None):
        base_url = base_url or self.default_base_url
        return FederationManagerClient(base_url=base_url)


if __name__ == "__main__":
    factory = FederationManagerClientFactory()
    client = factory.create_federation_client()

    result = client.get_federation_context_ids()
    logger.info("Federation Context IDs: %s", result)