Loading deploy/oeg.yaml 0 → 100644 +179 −0 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 docker-compose.yamldeleted 100644 → 0 +0 −20 Original line number Diff line number Diff line version: '3.1' services: mongo: image: mongo restart: always environment: MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_ROOT_PASSWORD: example # cloud-management-api: # image: cloud-management-api # restart: always # ports: # - 8080:8080 # environment: # ME_CONFIG_MONGODB_ADMINUSERNAME: root # ME_CONFIG_MONGODB_ADMINPASSWORD: example # ME_CONFIG_MONGODB_URL: mongodb://root:example@mongo:27017/ # ME_CONFIG_BASICAUTH: false edge_cloud_management_api/configs/env_config.py +2 −0 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 +4 −4 Original line number Diff line number Diff line Loading @@ -94,13 +94,13 @@ def create_app_instance(): logger.debug(f"Request body: {body}") app_id = body.get("appId") edge_zone_id = body.get("edgeCloudZoneId") app_zones = body.get("appZones") # k8s_ref = body.get("kubernetesClusterRef") 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) local_zone = get_zone(app_zones[0].get('EdgeCloudZone').get('edgeCloudZoneId')) if not local_zone: # TODO: apply federation logic return 'Zone belongs to federated partner OP. Switching to Federation Manager.' Loading edge_cloud_management_api/controllers/federation_manager_controller.py +36 −12 Original line number Diff line number Diff line Loading @@ -4,9 +4,19 @@ 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_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 +26,40 @@ 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: 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 +108,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 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
docker-compose.yamldeleted 100644 → 0 +0 −20 Original line number Diff line number Diff line version: '3.1' services: mongo: image: mongo restart: always environment: MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_ROOT_PASSWORD: example # cloud-management-api: # image: cloud-management-api # restart: always # ports: # - 8080:8080 # environment: # ME_CONFIG_MONGODB_ADMINUSERNAME: root # ME_CONFIG_MONGODB_ADMINPASSWORD: example # ME_CONFIG_MONGODB_URL: mongodb://root:example@mongo:27017/ # ME_CONFIG_BASICAUTH: false
edge_cloud_management_api/configs/env_config.py +2 −0 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 +4 −4 Original line number Diff line number Diff line Loading @@ -94,13 +94,13 @@ def create_app_instance(): logger.debug(f"Request body: {body}") app_id = body.get("appId") edge_zone_id = body.get("edgeCloudZoneId") app_zones = body.get("appZones") # k8s_ref = body.get("kubernetesClusterRef") 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) local_zone = get_zone(app_zones[0].get('EdgeCloudZone').get('edgeCloudZoneId')) if not local_zone: # TODO: apply federation logic return 'Zone belongs to federated partner OP. Switching to Federation Manager.' Loading
edge_cloud_management_api/controllers/federation_manager_controller.py +36 −12 Original line number Diff line number Diff line Loading @@ -4,9 +4,19 @@ 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_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 +26,40 @@ 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: 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 +108,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