Loading deploy/oeg.yaml 0 → 100644 +179 −0 Viewed Changes for deploy/oeg.yaml: 179 added lines, 0 removed lines. Original line number Diff line number Diff line --- kind: PersistentVolume apiVersion: v1 metadata: name: mongodb-oeg-pv-volume # Sets PV's name labels: type: local # Sets PV's type to local app: oegmongo spec: storageClassName: manual capacity: storage: 50Mi # Sets PV Volume accessModes: - ReadWriteOnce hostPath: path: "/mnt/data/mongodb_oeg" --- apiVersion: v1 kind: PersistentVolumeClaim metadata: creationTimestamp: null labels: io.kompose.service: mongo-oeg name: mongo-oeg spec: storageClassName: manual accessModes: - ReadWriteOnce resources: requests: storage: 50Mi status: {} --- apiVersion: apps/v1 kind: Deployment metadata: annotations: kompose.cmd: kompose convert kompose.version: 1.26.0 (40646f47) creationTimestamp: null labels: io.kompose.service: oegmongo name: oegmongo spec: replicas: 1 selector: matchLabels: io.kompose.service: oegmongo strategy: type: Recreate template: metadata: annotations: kompose.cmd: kompose convert kompose.version: 1.26.0 (40646f47) creationTimestamp: null labels: #io.kompose.network/netEMPkub: "true" io.kompose.service: oegmongo spec: containers: - image: mongo name: oegmongo ports: - containerPort: 27017 resources: {} volumeMounts: - mountPath: /data/db name: mongo-db restartPolicy: Always volumes: - name: mongo-db persistentVolumeClaim: claimName: mongo-oeg status: {} --- apiVersion: v1 kind: Service metadata: annotations: kompose.cmd: kompose convert kompose.version: 1.26.0 (40646f47) creationTimestamp: null labels: io.kompose.service: oegmongo name: oegmongo spec: type: ClusterIP ports: - name: "27017" port: 27017 targetPort: 27017 selector: io.kompose.service: oegmongo status: loadBalancer: {} --- apiVersion: apps/v1 kind: Deployment metadata: annotations: kompose.cmd: kompose convert kompose.version: 1.26.0 (40646f47) creationTimestamp: null labels: io.kompose.service: oegcontroller name: oegcontroller spec: replicas: 1 selector: matchLabels: io.kompose.service: oegcontroller strategy: {} template: metadata: annotations: kompose.cmd: kompose convert kompose.version: 1.26.0 (40646f47) creationTimestamp: null labels: io.kompose.service: oegcontroller spec: containers: - env: - name: MONGO_URI value: mongodb://oegmongo:27017 - name: SRM_HOST value: http://srm:8080/srm/1.0.0 - name: FEDERATION_MANAGER_HOST value: http://federation-manager.federation-manager.svc.cluster.local:8989/operatorplatform/federation/v1 - name: PARTNER_API_ROOT value: http://10.8.0.1:31002 - name: TOKEN_ENDPOINT value: http://federation-manager.federation-manager.svc.cluster.local:8080/realms/federation/protocol/openid-connect/token image: ghcr.io/sunriseopenoperatorplatform/oeg/oeg:1.0.1 name: oegcontroller ports: - containerPort: 8080 resources: {} imagePullPolicy: Always restartPolicy: Always status: {} --- apiVersion: v1 kind: Service metadata: name: oeg namespace: sunrise6g spec: type: ClusterIP selector: io.kompose.service: oegcontroller ports: - name: http port: 80 targetPort: 8080 --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: oegcontroller-ingress namespace: sunrise6g annotations: traefik.ingress.kubernetes.io/router.entrypoints: web # traefik.ingress.kubernetes.io/rewrite-target: /$2 spec: ingressClassName: traefik rules: - host: isiath.duckdns.org http: paths: - path: /oeg pathType: Prefix backend: service: name: oeg port: number: 80 No newline at end of file edge_cloud_management_api/configs/env_config.py +2 −0 Viewed Changes for edge_cloud_management_api/configs/env_config.py: 2 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -12,6 +12,8 @@ class Configuration(BaseSettings): PI_EDGE_PASSWORD: str = os.getenv("PI_EDGE_PASSWORD") HTTP_PROXY: str = os.getenv("HTTP_PROXY") FEDERATION_MANAGER_HOST=os.getenv("FEDERATION_MANAGER_HOST") TOKEN_ENDPOINT = os.getenv('TOKEN_ENDPOINT') PARTNER_API_ROOT = os.getenv('PARTNER_API_ROOT') config = Configuration() edge_cloud_management_api/controllers/app_controllers.py +70 −13 Viewed Changes for edge_cloud_management_api/controllers/app_controllers.py: 70 added lines, 13 removed lines. Original line number Diff line number Diff line Loading @@ -2,9 +2,12 @@ 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.federation_services import FederationManagerClientFactory from edge_cloud_management_api.services.storage_service import get_zone from edge_cloud_management_api.services.storage_service import get_fed factory = FederationManagerClientFactory() federation_client = factory.create_federation_client() class NotFound404Exception(Exception): pass Loading Loading @@ -87,28 +90,82 @@ def delete_app(appId, x_correlator=None): def create_app_instance(): logger.info("Received request to create app instance") try: body = request.get_json() logger.debug(f"Request body: {body}") app_id = body.get("appId") edge_zone_id = body.get("edgeCloudZoneId") # k8s_ref = body.get("kubernetesClusterRef") app_zones = body.get("appZones") pi_edge_client_factory = PiEdgeAPIClientFactory() pi_edge_client = pi_edge_client_factory.create_pi_edge_api_client() if not app_id or not edge_zone_id : if not app_id or not app_zones : return jsonify({"error": "Missing required fields: appId, edgeCloudZoneId, or kubernetesCLusterRef"}), 400 local_zone = get_zone(edge_zone_id) if not local_zone: # TODO: apply federation logic return 'Zone belongs to federated partner OP. Switching to Federation Manager.' zone = get_zone(app_zones[0].get('EdgeCloudZone').get('edgeCloudZoneId')) if zone.get('isLocal')=='false': # Step 1: retrieve app metadata appData = pi_edge_client.get_app(appId=app_id).get('appManifest') #Step 2: compose GSMA artefact payload artefact = {} artefact['artefactId'] = app_id artefact['appProviderId'] = appData.get('appProvider') artefact['artefactName'] = appData.get('name') artefact['artefactVersionInfo'] = appData.get('version') artefact['artefactDescription'] = '' repoInfo = appData.get('appRepo') artefact['repoType'] = repoInfo.get('type') artefact['artefactRepoLocation'] = {'repoURL': repoInfo.get('imagePath'), 'userName': repoInfo.get('userName'), 'password': repoInfo.get('credentials'), 'token': ''} exposedInterfaces = [] networkInterfaces = appData.get('componentSpec')[0].get('networkInterfaces') for ni in networkInterfaces: interface = {'interfaceId': '', 'commProtocol': ni.get('protocol'), 'commPort': ni.get('port'), 'visibilityType': ni.get('visibilityType'), 'network': '', 'InterfaceName': ''} exposedInterfaces.append(interface) artefact['componentSpec'] = [ { 'componentName': appData.get('name'), 'numOfInstances': 0, 'restartPolicy': 'RESTART_POLICY_ALWAYS', 'exposedInterfaces': exposedInterfaces, 'compEnvParams': [], 'persistentVolumes': [] } ] # Step 3: Send artefact to local fed manager fed_token = get_fed(zone.get('fedContextId')).get('token') create_artefact_response = federation_client.create_artefact(artefact=artefact, federation_context_id=zone.get('fedContextId'), token=fed_token) # Step 4: Onboard app if create_artefact_response.status_code == 200 or create_artefact_response.status_code ==409: # Step 5: Create GSM onboard app payload onboard_app = {} onboard_app['appId'] = app_id onboard_app['appProviderId'] = appData.get('appProvider') onboard_app['appDeploymentZones'] = [] appMetaData = {} appMetaData['appName'] = appData.get('name') appMetaData['version'] = appData.get('version') onboard_app['appMetaData'] = appMetaData onboard_app['appComponentSpecs'] = [{'serviceNameNB': appData.get('name'), 'serviceNameEW': appData.get('name'), 'componentName': appData.get('name'), 'artefactId': app_id } ] # Step 6: Onboard app at partner onboard_app_response = federation_client.onboard_application(federation_context_id=zone.get('fedContextId'), body=onboard_app, token=fed_token) if onboard_app_response.status_code==200: # Step 7: Construct GSMA deployment payload deploy_app = {} deploy_app['appId'] = app_id deploy_app['appVersion'] = appData.get('version') deploy_app['appProviderId'] = appData.get('appProvider') deploy_app['zoneInfo'] = {'zoneId': zone.get('edgeCloudZoneId')} # Step 8: Deploy app at partner deploy_app_response = federation_client.deploy_app_partner(federation_context_id=zone.get('fedContextId'), body=deploy_app, token = fed_token) return deploy_app_response logger.info(f"Preparing to send deployment request to SRM for appId={app_id}") pi_edge_client_factory = PiEdgeAPIClientFactory() pi_edge_client = pi_edge_client_factory.create_pi_edge_api_client() logger.info(f"Preparing to send deployment request to SRM for appId={app_id}") print("\n === Preparing Deployment Request ===") print(f" Endpoint: {pi_edge_client.base_url}/deployedServiceFunction") Loading edge_cloud_management_api/controllers/edge_cloud_controller.py +5 −0 Viewed Changes for edge_cloud_management_api/controllers/edge_cloud_controller.py: 5 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ 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.storage_service import insert_zones from edge_cloud_management_api.services.federation_services import FederationManagerClientFactory try: Loading @@ -13,10 +14,14 @@ try: zones = api_client.edge_cloud_zones() for zone in zones: zone['_id'] = zone.get('edgeCloudZoneId') zone['isLocal'] = 'true' insert_zones(zones) except Exception as e: logger.error(e.args) factory = FederationManagerClientFactory() federation_client = factory.create_federation_client() class EdgeCloudZone(BaseModel): edgeCloudZoneId: str = Field(..., description="Unique identifier of the Edge Cloud Zone") edgeCloudZoneName: str = Field(..., description="Name of the Edge Cloud Zone") Loading edge_cloud_management_api/controllers/federation_manager_controller.py +45 −6 Viewed Changes for edge_cloud_management_api/controllers/federation_manager_controller.py: 45 added lines, 6 removed lines. Original line number Diff line number Diff line Loading @@ -4,9 +4,20 @@ import connexion from requests.exceptions import Timeout, ConnectionError from edge_cloud_management_api.managers.log_manager import logger import requests from edge_cloud_management_api.configs.env_config import config from edge_cloud_management_api.services.storage_service import insert_zones from edge_cloud_management_api.services.storage_service import insert_federation, get_fed, get_all_feds from edge_cloud_management_api.services.federation_services import FederationManagerClientFactory token_headers = {'Authorization': 'Basic b3JpZ2luYXRpbmctb3AtMTpkZDd2TndGcWpOcFl3YWdobEV3TWJ3MTBnMGtsV0RIYg==', 'Content-Type': 'application/x-www-form-urlencoded' } data = {'grant_type': 'client_credentials', 'scope': 'fed-mgmt'} TOKEN_ENDPOINT = config.TOKEN_ENDPOINT # Factory pattern factory = FederationManagerClientFactory() federation_client = factory.create_federation_client() Loading @@ -16,27 +27,54 @@ def create_federation(): """POST /partner - Create federation with partner OP.""" body = request.get_json() token = __get_token() token = requests.post(TOKEN_ENDPOINT, headers=token_headers, data=data).json().get('access_token') response, code = federation_client.post_partner(body, token) fed = {'_id': response.get('federationContextId'), 'token': token} if code==200: provider = response.get('partnerOPFederationId') av_zones = response.get('offeredAvailabilityZones') zones_to_insert = [] for zone in av_zones: inserted_item = {'_id': zone.get('zoneId'), 'edgeCloudProvider': provider, 'edgeCloudZoneId': zone.get('zoneId'), 'edgeCloudZoneName': zone.get('geographyDetails'), 'edgeCloudZoneStatus': 'unknown', 'isLocal': 'false', 'fedContextId': response.get('federationContextId') } zones_to_insert.append(inserted_item) insert_zones(zones_to_insert) insert_federation(fed) return response, code def get_federation(federationContextId): """GET /{federationContextId}/partner - Get federation info.""" token = __get_token() fed = get_fed(federationContextId) if not fed: return 'Federation not found', 404 else: token = fed.get('token') response, code = federation_client.get_partner(federationContextId, token) return response, code def delete_federation(federationContextId): """DELETE /{federationContextId}/partner - Delete federation.""" token = __get_token() fed = get_fed(federationContextId) if not fed: return 'Federation not found', 404 else: token = fed.get('token') response, code = federation_client.delete_partner(federationContextId, token) return response, code def get_federation_context_ids(): """GET /fed-context-id - Fetch federationContextId(s).""" token = __get_token() feds = get_all_feds() if not feds: return 'Federation not found', 404 else: token = feds[len(feds)-1].get('token') response, code = federation_client.get_federation_context_ids(token) return response, code Loading Loading @@ -85,5 +123,6 @@ def remove_zone_sync(federationContextId, zoneId): def __get_token(): bearer = connexion.request.headers['Authorization'] token = bearer.split()[1] # __token = requests.post(TOKEN_ENDPOINT, headers=token_headers, data=data).json().get('access_token') return token Loading
deploy/oeg.yaml 0 → 100644 +179 −0 Viewed Changes for deploy/oeg.yaml: 179 added lines, 0 removed lines. Original line number Diff line number Diff line --- kind: PersistentVolume apiVersion: v1 metadata: name: mongodb-oeg-pv-volume # Sets PV's name labels: type: local # Sets PV's type to local app: oegmongo spec: storageClassName: manual capacity: storage: 50Mi # Sets PV Volume accessModes: - ReadWriteOnce hostPath: path: "/mnt/data/mongodb_oeg" --- apiVersion: v1 kind: PersistentVolumeClaim metadata: creationTimestamp: null labels: io.kompose.service: mongo-oeg name: mongo-oeg spec: storageClassName: manual accessModes: - ReadWriteOnce resources: requests: storage: 50Mi status: {} --- apiVersion: apps/v1 kind: Deployment metadata: annotations: kompose.cmd: kompose convert kompose.version: 1.26.0 (40646f47) creationTimestamp: null labels: io.kompose.service: oegmongo name: oegmongo spec: replicas: 1 selector: matchLabels: io.kompose.service: oegmongo strategy: type: Recreate template: metadata: annotations: kompose.cmd: kompose convert kompose.version: 1.26.0 (40646f47) creationTimestamp: null labels: #io.kompose.network/netEMPkub: "true" io.kompose.service: oegmongo spec: containers: - image: mongo name: oegmongo ports: - containerPort: 27017 resources: {} volumeMounts: - mountPath: /data/db name: mongo-db restartPolicy: Always volumes: - name: mongo-db persistentVolumeClaim: claimName: mongo-oeg status: {} --- apiVersion: v1 kind: Service metadata: annotations: kompose.cmd: kompose convert kompose.version: 1.26.0 (40646f47) creationTimestamp: null labels: io.kompose.service: oegmongo name: oegmongo spec: type: ClusterIP ports: - name: "27017" port: 27017 targetPort: 27017 selector: io.kompose.service: oegmongo status: loadBalancer: {} --- apiVersion: apps/v1 kind: Deployment metadata: annotations: kompose.cmd: kompose convert kompose.version: 1.26.0 (40646f47) creationTimestamp: null labels: io.kompose.service: oegcontroller name: oegcontroller spec: replicas: 1 selector: matchLabels: io.kompose.service: oegcontroller strategy: {} template: metadata: annotations: kompose.cmd: kompose convert kompose.version: 1.26.0 (40646f47) creationTimestamp: null labels: io.kompose.service: oegcontroller spec: containers: - env: - name: MONGO_URI value: mongodb://oegmongo:27017 - name: SRM_HOST value: http://srm:8080/srm/1.0.0 - name: FEDERATION_MANAGER_HOST value: http://federation-manager.federation-manager.svc.cluster.local:8989/operatorplatform/federation/v1 - name: PARTNER_API_ROOT value: http://10.8.0.1:31002 - name: TOKEN_ENDPOINT value: http://federation-manager.federation-manager.svc.cluster.local:8080/realms/federation/protocol/openid-connect/token image: ghcr.io/sunriseopenoperatorplatform/oeg/oeg:1.0.1 name: oegcontroller ports: - containerPort: 8080 resources: {} imagePullPolicy: Always restartPolicy: Always status: {} --- apiVersion: v1 kind: Service metadata: name: oeg namespace: sunrise6g spec: type: ClusterIP selector: io.kompose.service: oegcontroller ports: - name: http port: 80 targetPort: 8080 --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: oegcontroller-ingress namespace: sunrise6g annotations: traefik.ingress.kubernetes.io/router.entrypoints: web # traefik.ingress.kubernetes.io/rewrite-target: /$2 spec: ingressClassName: traefik rules: - host: isiath.duckdns.org http: paths: - path: /oeg pathType: Prefix backend: service: name: oeg port: number: 80 No newline at end of file
edge_cloud_management_api/configs/env_config.py +2 −0 Viewed Changes for edge_cloud_management_api/configs/env_config.py: 2 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -12,6 +12,8 @@ class Configuration(BaseSettings): PI_EDGE_PASSWORD: str = os.getenv("PI_EDGE_PASSWORD") HTTP_PROXY: str = os.getenv("HTTP_PROXY") FEDERATION_MANAGER_HOST=os.getenv("FEDERATION_MANAGER_HOST") TOKEN_ENDPOINT = os.getenv('TOKEN_ENDPOINT') PARTNER_API_ROOT = os.getenv('PARTNER_API_ROOT') config = Configuration()
edge_cloud_management_api/controllers/app_controllers.py +70 −13 Viewed Changes for edge_cloud_management_api/controllers/app_controllers.py: 70 added lines, 13 removed lines. Original line number Diff line number Diff line Loading @@ -2,9 +2,12 @@ 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.federation_services import FederationManagerClientFactory from edge_cloud_management_api.services.storage_service import get_zone from edge_cloud_management_api.services.storage_service import get_fed factory = FederationManagerClientFactory() federation_client = factory.create_federation_client() class NotFound404Exception(Exception): pass Loading Loading @@ -87,28 +90,82 @@ def delete_app(appId, x_correlator=None): def create_app_instance(): logger.info("Received request to create app instance") try: body = request.get_json() logger.debug(f"Request body: {body}") app_id = body.get("appId") edge_zone_id = body.get("edgeCloudZoneId") # k8s_ref = body.get("kubernetesClusterRef") app_zones = body.get("appZones") pi_edge_client_factory = PiEdgeAPIClientFactory() pi_edge_client = pi_edge_client_factory.create_pi_edge_api_client() if not app_id or not edge_zone_id : if not app_id or not app_zones : return jsonify({"error": "Missing required fields: appId, edgeCloudZoneId, or kubernetesCLusterRef"}), 400 local_zone = get_zone(edge_zone_id) if not local_zone: # TODO: apply federation logic return 'Zone belongs to federated partner OP. Switching to Federation Manager.' zone = get_zone(app_zones[0].get('EdgeCloudZone').get('edgeCloudZoneId')) if zone.get('isLocal')=='false': # Step 1: retrieve app metadata appData = pi_edge_client.get_app(appId=app_id).get('appManifest') #Step 2: compose GSMA artefact payload artefact = {} artefact['artefactId'] = app_id artefact['appProviderId'] = appData.get('appProvider') artefact['artefactName'] = appData.get('name') artefact['artefactVersionInfo'] = appData.get('version') artefact['artefactDescription'] = '' repoInfo = appData.get('appRepo') artefact['repoType'] = repoInfo.get('type') artefact['artefactRepoLocation'] = {'repoURL': repoInfo.get('imagePath'), 'userName': repoInfo.get('userName'), 'password': repoInfo.get('credentials'), 'token': ''} exposedInterfaces = [] networkInterfaces = appData.get('componentSpec')[0].get('networkInterfaces') for ni in networkInterfaces: interface = {'interfaceId': '', 'commProtocol': ni.get('protocol'), 'commPort': ni.get('port'), 'visibilityType': ni.get('visibilityType'), 'network': '', 'InterfaceName': ''} exposedInterfaces.append(interface) artefact['componentSpec'] = [ { 'componentName': appData.get('name'), 'numOfInstances': 0, 'restartPolicy': 'RESTART_POLICY_ALWAYS', 'exposedInterfaces': exposedInterfaces, 'compEnvParams': [], 'persistentVolumes': [] } ] # Step 3: Send artefact to local fed manager fed_token = get_fed(zone.get('fedContextId')).get('token') create_artefact_response = federation_client.create_artefact(artefact=artefact, federation_context_id=zone.get('fedContextId'), token=fed_token) # Step 4: Onboard app if create_artefact_response.status_code == 200 or create_artefact_response.status_code ==409: # Step 5: Create GSM onboard app payload onboard_app = {} onboard_app['appId'] = app_id onboard_app['appProviderId'] = appData.get('appProvider') onboard_app['appDeploymentZones'] = [] appMetaData = {} appMetaData['appName'] = appData.get('name') appMetaData['version'] = appData.get('version') onboard_app['appMetaData'] = appMetaData onboard_app['appComponentSpecs'] = [{'serviceNameNB': appData.get('name'), 'serviceNameEW': appData.get('name'), 'componentName': appData.get('name'), 'artefactId': app_id } ] # Step 6: Onboard app at partner onboard_app_response = federation_client.onboard_application(federation_context_id=zone.get('fedContextId'), body=onboard_app, token=fed_token) if onboard_app_response.status_code==200: # Step 7: Construct GSMA deployment payload deploy_app = {} deploy_app['appId'] = app_id deploy_app['appVersion'] = appData.get('version') deploy_app['appProviderId'] = appData.get('appProvider') deploy_app['zoneInfo'] = {'zoneId': zone.get('edgeCloudZoneId')} # Step 8: Deploy app at partner deploy_app_response = federation_client.deploy_app_partner(federation_context_id=zone.get('fedContextId'), body=deploy_app, token = fed_token) return deploy_app_response logger.info(f"Preparing to send deployment request to SRM for appId={app_id}") pi_edge_client_factory = PiEdgeAPIClientFactory() pi_edge_client = pi_edge_client_factory.create_pi_edge_api_client() logger.info(f"Preparing to send deployment request to SRM for appId={app_id}") print("\n === Preparing Deployment Request ===") print(f" Endpoint: {pi_edge_client.base_url}/deployedServiceFunction") Loading
edge_cloud_management_api/controllers/edge_cloud_controller.py +5 −0 Viewed Changes for edge_cloud_management_api/controllers/edge_cloud_controller.py: 5 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ 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.storage_service import insert_zones from edge_cloud_management_api.services.federation_services import FederationManagerClientFactory try: Loading @@ -13,10 +14,14 @@ try: zones = api_client.edge_cloud_zones() for zone in zones: zone['_id'] = zone.get('edgeCloudZoneId') zone['isLocal'] = 'true' insert_zones(zones) except Exception as e: logger.error(e.args) factory = FederationManagerClientFactory() federation_client = factory.create_federation_client() class EdgeCloudZone(BaseModel): edgeCloudZoneId: str = Field(..., description="Unique identifier of the Edge Cloud Zone") edgeCloudZoneName: str = Field(..., description="Name of the Edge Cloud Zone") Loading
edge_cloud_management_api/controllers/federation_manager_controller.py +45 −6 Viewed Changes for edge_cloud_management_api/controllers/federation_manager_controller.py: 45 added lines, 6 removed lines. Original line number Diff line number Diff line Loading @@ -4,9 +4,20 @@ import connexion from requests.exceptions import Timeout, ConnectionError from edge_cloud_management_api.managers.log_manager import logger import requests from edge_cloud_management_api.configs.env_config import config from edge_cloud_management_api.services.storage_service import insert_zones from edge_cloud_management_api.services.storage_service import insert_federation, get_fed, get_all_feds from edge_cloud_management_api.services.federation_services import FederationManagerClientFactory token_headers = {'Authorization': 'Basic b3JpZ2luYXRpbmctb3AtMTpkZDd2TndGcWpOcFl3YWdobEV3TWJ3MTBnMGtsV0RIYg==', 'Content-Type': 'application/x-www-form-urlencoded' } data = {'grant_type': 'client_credentials', 'scope': 'fed-mgmt'} TOKEN_ENDPOINT = config.TOKEN_ENDPOINT # Factory pattern factory = FederationManagerClientFactory() federation_client = factory.create_federation_client() Loading @@ -16,27 +27,54 @@ def create_federation(): """POST /partner - Create federation with partner OP.""" body = request.get_json() token = __get_token() token = requests.post(TOKEN_ENDPOINT, headers=token_headers, data=data).json().get('access_token') response, code = federation_client.post_partner(body, token) fed = {'_id': response.get('federationContextId'), 'token': token} if code==200: provider = response.get('partnerOPFederationId') av_zones = response.get('offeredAvailabilityZones') zones_to_insert = [] for zone in av_zones: inserted_item = {'_id': zone.get('zoneId'), 'edgeCloudProvider': provider, 'edgeCloudZoneId': zone.get('zoneId'), 'edgeCloudZoneName': zone.get('geographyDetails'), 'edgeCloudZoneStatus': 'unknown', 'isLocal': 'false', 'fedContextId': response.get('federationContextId') } zones_to_insert.append(inserted_item) insert_zones(zones_to_insert) insert_federation(fed) return response, code def get_federation(federationContextId): """GET /{federationContextId}/partner - Get federation info.""" token = __get_token() fed = get_fed(federationContextId) if not fed: return 'Federation not found', 404 else: token = fed.get('token') response, code = federation_client.get_partner(federationContextId, token) return response, code def delete_federation(federationContextId): """DELETE /{federationContextId}/partner - Delete federation.""" token = __get_token() fed = get_fed(federationContextId) if not fed: return 'Federation not found', 404 else: token = fed.get('token') response, code = federation_client.delete_partner(federationContextId, token) return response, code def get_federation_context_ids(): """GET /fed-context-id - Fetch federationContextId(s).""" token = __get_token() feds = get_all_feds() if not feds: return 'Federation not found', 404 else: token = feds[len(feds)-1].get('token') response, code = federation_client.get_federation_context_ids(token) return response, code Loading Loading @@ -85,5 +123,6 @@ def remove_zone_sync(federationContextId, zoneId): def __get_token(): bearer = connexion.request.headers['Authorization'] token = bearer.split()[1] # __token = requests.post(TOKEN_ENDPOINT, headers=token_headers, data=data).json().get('access_token') return token