diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 73f69e0958611ac6e00bde95641f6699030ad235..0000000000000000000000000000000000000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
-# Datasource local storage ignored files
-/dataSources/
-/dataSources.local.xml
-# Editor-based HTTP Client requests
-/httpRequests/
diff --git a/.idea/deployment.xml b/.idea/deployment.xml
deleted file mode 100644
index 9e0c942a1170756bef834fd4ac6071f466d9ec56..0000000000000000000000000000000000000000
--- a/.idea/deployment.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/edge-implementation.iml b/.idea/edge-implementation.iml
deleted file mode 100644
index 856ca00957e4e3dbeebad831a4c793348cb316e1..0000000000000000000000000000000000000000
--- a/.idea/edge-implementation.iml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
deleted file mode 100644
index 105ce2da2d6447d11dfe32bfb846c3d5b199fc99..0000000000000000000000000000000000000000
--- a/.idea/inspectionProfiles/profiles_settings.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
deleted file mode 100644
index 512431b09ac7e71e08ced49dae931a2bfbe24677..0000000000000000000000000000000000000000
--- a/.idea/misc.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
deleted file mode 100644
index 26a7349d93ab97b9d21e1a71fe1c9a572ba78248..0000000000000000000000000000000000000000
--- a/.idea/modules.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
deleted file mode 100644
index 94a25f7f4cb416c083d265558da75d457237d671..0000000000000000000000000000000000000000
--- a/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
index 44c3320db6d03ed7c9bb05a2a89e41f9237b06e7..0d3a85eb206aadaacb6c2e34e76b0f4bdcd59e83 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -21,5 +21,5 @@ EXPOSE 8080
ENTRYPOINT ["python3"]
-CMD ["-m", "service-resource-manager-implementation/src"]
+CMD ["-m", "src"]
diff --git a/requirements.txt b/requirements.txt
index e9bb9ed81740636a4ab4ce2d2f78ea2f9194c0b1..d54e60b7a351fa9faa55847f4a7ef03502260554 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -5,4 +5,4 @@ requests==2.32.4
psycopg2-binary
urllib3
pydantic-extra-types==2.10.3
-sunrise6g-opensdk==1.0.21
+sunrise6g-opensdk==1.0.21
\ No newline at end of file
diff --git a/service-resource-manager-implementation/src/__main__.py b/service-resource-manager-implementation/src/__main__.py
index 828513a8859ae0c1e40d7cfc95ef8ff1c5c0ed56..da8b42ef6b3f8009d8117f36ddc86f243c2e1b18 100644
--- a/service-resource-manager-implementation/src/__main__.py
+++ b/service-resource-manager-implementation/src/__main__.py
@@ -4,6 +4,7 @@ import connexion
import logging
import src.encoder as encoder
from json import JSONEncoder
+# from connexion.options import SwaggerUIOptions
import urllib3
@@ -11,8 +12,13 @@ urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
def main():
logging.basicConfig(level=logging.INFO)
app = connexion.App(__name__, specification_dir='./swagger/')
+ # swagger_options = SwaggerUIOptions(swagger_ui_path="/docs")
app.app.json_encoder = JSONEncoder
- app.add_api('swagger.yaml', strict_validation=True, arguments={'title': 'Service Resource Manager Controller API'}, pythonic_params=True)
+ app.add_api('swagger.yaml',
+ # swagger_ui_options=swagger_options,
+ strict_validation=True,
+ arguments={'title': 'Service Resource Manager Controller API'},
+ pythonic_params=True)
app.run(port=8080)
diff --git a/service-resource-manager-implementation/src/controllers/app_instance_controller.py b/service-resource-manager-implementation/src/controllers/app_instance_controller.py
index 40ccb008afa662ea9ea0777b1c84deaa7b138986..db1a110e33dbfa3b25f100020e274348ae7528b8 100644
--- a/service-resource-manager-implementation/src/controllers/app_instance_controller.py
+++ b/service-resource-manager-implementation/src/controllers/app_instance_controller.py
@@ -1,43 +1,65 @@
-from os import environ
import logging
-import connexion
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.DEBUG)
-def deploy_app(helm_request_body=None):
- '''
- Retrieves the nodes of the edge cloud platform supported by the testbed
- '''
- logger.info('Submitting request to edge cloud transformation function')
- if connexion.request.is_json:
- helm_request_body = connexion.request.get_json()
- else:
- return 'Wrong request schema', 400
+def deploy_app(helm_request_body):
+ """
+ Deploys an application via Helm.
+ Adapter-level function:
+ - accepts Python dict
+ - returns Python dict
+ - raises exceptions on failure
+ """
+
+ logger.info("Submitting request to edge cloud transformation function")
+
+ if not isinstance(helm_request_body, dict):
+ raise ValueError("Invalid request body")
+
+ if not helm_request_body.get("uri"):
+ raise ValueError("Helm chart uri is missing")
+
+ if not helm_request_body.get("deployment_name"):
+ raise ValueError("Helm chart deployment name is missing")
+
try:
- if helm_request_body.get('uri') is None:
- return 'Helm chart uri is missing', 400
- if helm_request_body.get('deployment_name') is None:
- return 'Helm chart deployment name is missing', 400
-
- helm_submit_response = submit_helm_chart(helm_request_body)
- return helm_submit_response
+ # submit_helm_chart MUST return dict or list
+ result = submit_helm_chart(helm_request_body)
+
+ if not isinstance(result, (dict, list)):
+ raise TypeError(
+ f"submit_helm_chart returned unsupported type: {type(result)}"
+ )
+
+ return result
+
except Exception as e:
- logger.info(e)
- return 'Error submitting helm chart: '+e.__cause__
-
+ logger.exception("Error submitting helm chart")
+ raise
+
+
def get_app_instances(body):
- '''
- Instantiates app on the edge cloud platform
- '''
- logger.info('Deploying app instance')
- if connexion.request.is_json:
- helm_request_body = connexion.request.get_json()
- else:
- return 'Wrong request schema', 400
+ """
+ Instantiates app on the edge cloud platform.
+ Adapter-level function.
+ """
+
+ logger.info("Deploying app instance")
+
+ if not isinstance(body, dict):
+ raise ValueError("Invalid request body")
+
try:
- app_response = app_deploy(body)
+ result = app_deploy(body)
+
+ if not isinstance(result, (dict, list)):
+ raise TypeError(
+ f"app_deploy returned unsupported type: {type(result)}"
+ )
+
+ return result
+
except Exception as e:
- logger.info(e)
- return 'Error instantiating app: '+e.__cause__
-
\ No newline at end of file
+ logger.exception("Error instantiating app")
+ raise
diff --git a/service-resource-manager-implementation/src/controllers/edge_cloud_management_controller.py b/service-resource-manager-implementation/src/controllers/edge_cloud_management_controller.py
index 3b8fd20557f1ea4de50dd45767164f96ca537426..4bae0154a7c146075fe4913f30d22ed7377b8a7a 100644
--- a/service-resource-manager-implementation/src/controllers/edge_cloud_management_controller.py
+++ b/service-resource-manager-implementation/src/controllers/edge_cloud_management_controller.py
@@ -1,37 +1,72 @@
import connexion
import logging
from os import environ
-from requests import Response as RequestsResponse
from sunrise6g_opensdk import Sdk as sdkclient
-import sys
-logger=logging.getLogger(__name__)
+logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.DEBUG)
-if environ['EDGE_CLOUD_ADAPTER_NAME'] is not None:
- edgecloud_adapter_name = environ['EDGE_CLOUD_ADAPTER_NAME']
- edgecloud_adapter_base_url = environ['ADAPTER_BASE_URL']
- edgecloud_adapter_specs = {'client_name': edgecloud_adapter_name, 'base_url': edgecloud_adapter_base_url}
+# ---------------------------------------------------------------------
+# 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)
- print('Creating edge cloud adapter with env: ', edgecloud_adapter_specs)
- adapters = sdkclient.create_adapters_from(adapter_specs={'edgecloud': edgecloud_adapter_specs})
+
+ 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")
-# else:
-# logging.error('Edge Cloud adapter has not been specified! Aborting...')
-# sys.exit()
+if edgecloud_adapter is None:
+ raise RuntimeError("Edge cloud adapter could not be initialized")
+
+# ---------------------------------------------------------------------
+# Helpers: normalize adapter responses
+# ---------------------------------------------------------------------
+
+def _safe_http_json_response(response):
+ """
+ Normalize adapter responses:
+ - list / dict → return directly (200)
+ - requests.Response → parse JSON safely
+ """
+
+ # Adapter already returned Python data
+ if isinstance(response, (list, dict)):
+ return response, 200
+
+ # Adapter returned nothing
+ if response is None:
+ return {"error": "Adapter returned no response"}, 502
-def _normalize_adapter_response(response):
- if isinstance(response, RequestsResponse):
- try:
- data = response.json()
- except ValueError:
- data = response.text
- return data, response.status_code
- return response
+ # Adapter returned HTTP response
+ try:
+ return response.json(), response.status_code
+ except Exception as e:
+ logger.exception("Failed to parse adapter HTTP response")
+ return {
+ "error": "Invalid response from adapter",
+ "details": str(e)
+ }, 502
def _ensure_edge_cloud_region(data):
+ """
+ Ensure every zone/node object carries an edgeCloudRegion field.
+ Falls back to 'unknown' when the adapter omits the field.
+ """
if isinstance(data, list):
for item in data:
if isinstance(item, dict) and not item.get("edgeCloudRegion"):
@@ -41,172 +76,128 @@ def _ensure_edge_cloud_region(data):
data["edgeCloudRegion"] = "unknown"
return data
+# ---------------------------------------------------------------------
+# Catalogue (onboarded service functions)
+# ---------------------------------------------------------------------
-def deregister_service_function(service_function_id: str): # noqa: E501
- """Deregister service.
+def register_service_function(body=None):
+ if not connexion.request.is_json:
+ return {"error": "Invalid JSON payload"}, 400
- :param service_function_name: Removed app metadata from the catalogue.
- """
try:
- code = edgecloud_adapter.delete_onboarded_app(service_function_id)
- return code
- except Exception as ce_:
- raise Exception("An exception occurred :", ce_)
-
+ payload = connexion.request.get_json()
+ response = edgecloud_adapter.onboard_app(payload)
+ return _safe_http_json_response(response)
+ except Exception as e:
+ logger.exception("Failed to register service function")
+ return {"error": "Registration failed", "details": str(e)}, 500
-def get_service_function(service_function_id: str): # noqa: E501
- """Returns a specific app from the catalogue.
- """
+def get_service_function(service_function_id: str):
try:
- service_function = edgecloud_adapter.get_onboarded_app(service_function_id)
- return _normalize_adapter_response(service_function)
- except Exception as ce_:
- raise Exception("An exception occurred :", ce_)
+ response = edgecloud_adapter.get_onboarded_app(service_function_id)
+ return _safe_http_json_response(response)
+ except Exception as e:
+ logger.exception("Failed to get service function")
+ return {"error": "Fetch failed", "details": str(e)}, 500
-def get_service_functions(): # noqa: E501
- """Returns all apps from the catalogue.
- """
+def get_service_functions():
try:
- service_functions = edgecloud_adapter.get_all_onboarded_apps()
- return _normalize_adapter_response(service_functions)
- except Exception as ce_:
- raise Exception("An exception occurred :", ce_)
+ response = edgecloud_adapter.get_all_onboarded_apps()
+ return _safe_http_json_response(response)
+ except Exception as e:
+ logger.exception("Failed to list service functions")
+ return {"error": "Fetch failed", "details": str(e)}, 500
-def register_service_function(body=None): # noqa: E501
- """Registers app to the database
- """
-
- if connexion.request.is_json:
-
- insert_doc = connexion.request.get_json()
- try:
- response = edgecloud_adapter.onboard_app(insert_doc)
- return _normalize_adapter_response(response)
- except Exception as ce_:
- return ce_
-
-def delete_deployed_service_function(app_id: str): # noqa: E501
- """Undeployes app
- """
-
- response = None
+def deregister_service_function(service_function_id: str):
try:
- response = edgecloud_adapter.undeploy_app(app_id)
- return _normalize_adapter_response(response)
- # return response
+ response = edgecloud_adapter.delete_onboarded_app(service_function_id)
+ return _safe_http_json_response(response)
+ except Exception as e:
+ logger.exception("Failed to deregister service function")
+ return {"error": "Deletion failed", "details": str(e)}, 500
- except Exception as ce_:
- logger.error(ce_)
- return ce_
- # else:
- # return "You are not authorized to access the URL requested", 401
+# ---------------------------------------------------------------------
+# Deployment
+# ---------------------------------------------------------------------
+def deploy_service_function():
+ if not connexion.request.is_json:
+ return {"error": "Invalid JSON payload"}, 400
-def deploy_service_function(): # noqa: E501
- """Request to deploy a Service function (from the catalogue) to an edge node.
+ try:
+ body = connexion.request.get_json()
- # noqa: E501
+ response = edgecloud_adapter.deploy_app(
+ body.get("appId"),
+ body.get("appZones")
+ )
- :param body: Deploy Service Function.
- :type body: dict | bytes
+ return _safe_http_json_response(response)
- :rtype: None
- """
+ except Exception as e:
+ logger.exception("Failed to deploy service function")
+ return {
+ "error": "Deployment failed",
+ "details": str(e)
+ }, 500
- # role = user_authentication.check_role()
- # if role is not None and role == "admin":
- if connexion.request.is_json:
- try:
- # body = DeployApp.from_dict(connexion.request.get_json())
- body = connexion.request.get_json()
- app_id = body.get("appId") if isinstance(body, dict) else None
- app_zones = body.get("appZones") if isinstance(body, dict) else None
- if app_id is not None and app_zones is not None:
- response = edgecloud_adapter.deploy_app(app_id, app_zones)
- else:
- response = edgecloud_adapter.deploy_app(body)
- # body = DeployServiceFunction.from_dict(connexion.request.get_json())
- # response = piedge_encoder.deploy_service_function(body)
- return _normalize_adapter_response(response)
- except Exception as ce_:
- logger.error(ce_)
- return ce_
- else:
- return 'ERROR: Could not read JSON payload.'
-
-def get_deployed_service_functions(): # noqa: E501
- """Request to deploy a Service function (from the catalogue) to an edge node.
-
- # noqa: E501
-
- :param body: Deploy Service Function.
- :type body: dict | bytes
-
- :rtype: None
- """
- # role = user_authentication.check_role()
- # if role is not None and role == "admin":
+def delete_deployed_service_function(app_id: str):
try:
- response = edgecloud_adapter.get_all_deployed_apps()
- return _normalize_adapter_response(response)
- except Exception as ce_:
- logger.error(ce_)
- return ce_
+ response = edgecloud_adapter.undeploy_app(app_id)
+ return _safe_http_json_response(response)
+ except Exception as e:
+ logger.exception("Failed to undeploy service function")
+ return {"error": "Undeploy failed", "details": str(e)}, 500
-def get_deployed_service_function(app_id: str): # noqa: E501
- """Request to deploy a Service function (from the catalogue) to an edge node.
- # noqa: E501
-
- :param body: Deploy Service Function.
- :type body: dict | bytes
+def get_deployed_service_function(app_id: str):
+ try:
+ response = edgecloud_adapter.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")
+ return {"error": "Fetch failed", "details": str(e)}, 500
- :rtype: None
- """
- # role = user_authentication.check_role()
- # if role is not None and role == "admin":
+def get_deployed_service_functions():
try:
- response = edgecloud_adapter.get_deployed_app(app_id=app_id)
- return _normalize_adapter_response(response)
- except Exception as ce_:
- logger.error(ce_)
- return ce_
+ response = edgecloud_adapter.get_all_deployed_apps()
+ return _safe_http_json_response(response)
+ except Exception as e:
+ logger.exception("Failed to list deployed service functions")
+ return {"error": "Fetch failed", "details": str(e)}, 500
-def get_nodes(): # noqa: E501
- """Returns the edge nodes status.
+# ---------------------------------------------------------------------
+# Edge cloud nodes / zones
+# ---------------------------------------------------------------------
- # noqa: E501
-
- :rtype: NodesResponse
+def get_nodes():
+ """
+ Returns the edge cloud zones.
+ Normalizes the HTTP response and ensures edgeCloudRegion is always present.
"""
- # try:
- response = edgecloud_adapter.get_edge_cloud_zones()
- normalized = _normalize_adapter_response(response)
- if isinstance(normalized, tuple):
- data, status = normalized
+ try:
+ response = edgecloud_adapter.get_edge_cloud_zones()
+ data, status = _safe_http_json_response(response)
return _ensure_edge_cloud_region(data), status
- return _ensure_edge_cloud_region(normalized)
- # except Exception as ce_:
- # logger.info(ce_)
-
-def node_details(node_id: str): # noqa: E501
- """Returns the edge nodes status.
+ except Exception as e:
+ logger.exception("Failed to get edge cloud zones")
+ return {"error": "Fetch failed", "details": str(e)}, 500
- # noqa: E501
- :rtype: NodesResponse
+def node_details(node_id: str):
+ """
+ Returns details for a specific edge cloud zone.
+ Normalizes the HTTP response and ensures edgeCloudRegion is always present.
"""
try:
- response = edgecloud_adapter.get_edge_cloud_zones_details(zone_id=node_id)
- normalized = _normalize_adapter_response(response)
- if isinstance(normalized, tuple):
- data, status = normalized
- return _ensure_edge_cloud_region(data), status
- return _ensure_edge_cloud_region(normalized)
- except Exception as ce_:
- logger.info(ce_)
+ response = edgecloud_adapter.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:
+ logger.exception("Failed to get node details")
+ return {"error": "Fetch failed", "details": str(e)}, 500
diff --git a/service-resource-manager-implementation/src/controllers/network_functions_controller.py b/service-resource-manager-implementation/src/controllers/network_functions_controller.py
index 1c5db7dcbe4ac53e70b0bbe79721d3ae8d23c7c3..bb5c597c35896ca26934e8ed4a9b7b7a34253c45 100644
--- a/service-resource-manager-implementation/src/controllers/network_functions_controller.py
+++ b/service-resource-manager-implementation/src/controllers/network_functions_controller.py
@@ -1,141 +1,154 @@
from os import environ
import logging
-from os import environ
-from typing import Any
-
import connexion
-from requests import Response as RequestsResponse
from sunrise6g_opensdk.common.sdk import Sdk as sdkclient
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.DEBUG)
-network_adapter: Any = None
+network_adapter = None
if environ.get('NETWORK_ADAPTER_NAME') is not None:
network_adapter_name = environ.get('NETWORK_ADAPTER_NAME')
- adapter_base_url = environ.get('NETWORK_ADAPTER_BASE_URL') or ""
- scs_as_id = environ.get('SCS_AS_ID') or ""
- network_adapter_specs = {
- 'client_name': network_adapter_name,
- 'base_url': adapter_base_url,
- 'scs_as_id': scs_as_id,
- }
+ adapter_base_url = environ.get('NETWORK_ADAPTER_BASE_URL')
+ scs_as_id = environ.get('SCS_AS_ID')
+ network_adapter_specs = {'client_name': network_adapter_name, 'base_url': adapter_base_url, 'scs_as_id': scs_as_id}
+ # network_adapter_specs.update(environ)
print('Creating network adapter with env: ', network_adapter_specs)
adapters = sdkclient.create_adapters_from(adapter_specs={'network': network_adapter_specs})
network_adapter = adapters.get("network")
+
# else:
# logging.error('Network adapter has not been specified! Aborting...')
# sys.exit()
-def _normalize_adapter_response(response):
- if isinstance(response, RequestsResponse):
- try:
- data = response.json()
- except ValueError:
- data = response.text
- return data, response.status_code
- return response
+def _safe_http_json_response(response):
+ """
+ Normalize adapter responses:
+ - list / dict → return directly (200)
+ - requests.Response → parse JSON body and status code safely
+ """
+ if isinstance(response, (list, dict)):
+ return response, 200
+
+ if response is None:
+ return {"error": "Adapter returned no response"}, 502
+
+ try:
+ return response.json(), response.status_code
+ except Exception as e:
+ logger.exception("Failed to parse adapter HTTP response")
+ return {"error": "Invalid response from adapter", "details": str(e)}, 502
+
def create_qod_session():
-
if connexion.request.is_json:
try:
if network_adapter is not None:
response = network_adapter.create_qod_session(connexion.request.get_json())
- return _normalize_adapter_response(response)
+ return _safe_http_json_response(response)
else:
return {
- "applicationServer": {
+ "applicationServer": {
"ipv4Address": "198.51.100.0/24"
- },
- "qosProfile": "QOS_L",
- "sink": "https://application-server.com/notifications",
- "sessionId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
- "duration": 3600,
- "qosStatus": "REQUESTED"
- }
+ },
+ "qosProfile": "QOS_L",
+ "sink": "https://application-server.com/notifications",
+ "sessionId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
+ "duration": 3600,
+ "qosStatus": "REQUESTED"
+ }, 200
except Exception as ce_:
logger.error(ce_)
return {"error": str(ce_)}, 500
else:
- return 'ERROR: Could not read JSON payload.', 400
+ return {'error': 'Could not read JSON payload.'}, 400
+
def get_qod_session(session_id: str):
-
try:
if network_adapter is not None:
response = network_adapter.get_qod_session(session_id)
- normalized = _normalize_adapter_response(response)
- return normalized
+ return _safe_http_json_response(response)
else:
- return "Requested QoD session with ID: "+session_id
+ return {"message": "Requested QoD session with ID: " + session_id}, 200
except Exception as ce_:
logger.error(ce_)
return {"error": str(ce_)}, 500
+
def delete_qod_session(session_id: str):
-
try:
if network_adapter is not None:
- response = network_adapter.delete_qod_session(session_id)
- return _normalize_adapter_response(response)
+ response = network_adapter.delete_qod_session(session_id)
+ return _safe_http_json_response(response)
else:
- return "Deleting QoD session with ID: "+ session_id
+ return {"message": "Deleting QoD session with ID: " + session_id}, 200
except Exception as ce_:
logger.error(ce_)
return {"error": str(ce_)}, 500
+
def create_traffic_influence_resource(body):
- try:
+ try:
if network_adapter is not None:
response = network_adapter.create_traffic_influence_resource(traffic_influence_info=body)
- return response
+ return _safe_http_json_response(response)
else:
return {
- "trafficInfluenceID": "string",
- "apiConsumerId": "string",
- "appId": "6B29FC40-CA47-1067-B31D-00DD010662DA",
- "appInstanceId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
- "edgeCloudRegion": "string",
- "edgeCloudZoneId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
- "state": "ordered",
- "sourceTrafficFilters": {
+ "trafficInfluenceID": "string",
+ "apiConsumerId": "string",
+ "appId": "6B29FC40-CA47-1067-B31D-00DD010662DA",
+ "appInstanceId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
+ "edgeCloudRegion": "string",
+ "edgeCloudZoneId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
+ "state": "ordered",
+ "sourceTrafficFilters": {
"sourcePort": 65535
- },
- "destinationTrafficFilters": {
+ },
+ "destinationTrafficFilters": {
"destinationPort": 65535,
"destinationProtocol": "TCP"
- },
- "notificationUri": "string",
- "notificationAuthToken": "string"
- }
- except Exception as ce_:
+ },
+ "notificationUri": "string",
+ "notificationAuthToken": "string"
+ }, 200
+ except Exception as ce_:
logger.error(ce_)
- return ce_
+ return {"error": str(ce_)}, 500
+
def delete_traffic_influence_resource(traffic_influence_id: str):
- try:
+ try:
if network_adapter is not None:
- response = network_adapter.delete_traffic_influence_resource(resource_id=traffic_influence_id)
- return response
+ response = network_adapter.delete_traffic_influence_resource(resource_id=traffic_influence_id)
+ return _safe_http_json_response(response)
else:
- return "Deleting Traffic Influence resource with ID: "+ traffic_influence_id
- except Exception as ce_:
+ return {"message": "Deleting Traffic Influence resource with ID: " + traffic_influence_id}, 200
+ except Exception as ce_:
logger.error(ce_)
- return ce_
+ return {"error": str(ce_)}, 500
+
def get_traffic_influence_resource(traffic_influence_id: str):
- try:
+ try:
if network_adapter is not None:
response = network_adapter.get_individual_traffic_influence_resource(resource_id=traffic_influence_id)
- return {'status': 200, 'session': response}
+ return _safe_http_json_response(response)
else:
- return "Requested Traffice Influence resource with ID: "+traffic_influence_id
- except Exception as ce_:
+ return {"message": "Requested Traffic Influence resource with ID: " + traffic_influence_id}, 200
+ except Exception as ce_:
logger.error(ce_)
- return ce_
+ return {"error": str(ce_)}, 500
+
def get_all_traffic_influence_resources():
- #TODO
- pass
+ try:
+ if network_adapter is not None:
+ response = network_adapter.get_all_traffic_influence_resources()
+ return _safe_http_json_response(response)
+ else:
+ return {"message": "List all Traffic Influence resources"}, 200
+ except Exception as ce_:
+ logger.error(ce_)
+ return {"error": str(ce_)}, 500
diff --git a/srm-deployment.yaml b/srm-deployment.yaml
deleted file mode 100644
index ea77f74a0019427f085f4c8fd9f3a0b0658ccc06..0000000000000000000000000000000000000000
--- a/srm-deployment.yaml
+++ /dev/null
@@ -1,309 +0,0 @@
-kind: Namespace
-apiVersion: v1
-metadata:
- name: sunrise6g
- labels:
- name: sunrise6g
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- annotations:
- kompose.cmd: kompose convert
- kompose.version: 1.26.0 (40646f47)
- creationTimestamp: null
- labels:
- io.kompose.service: srmcontroller
- name: srmcontroller
-spec:
- replicas: 1
- selector:
- matchLabels:
- io.kompose.service: srmcontroller
- strategy: {}
- template:
- metadata:
- annotations:
- kompose.cmd: kompose convert
- kompose.version: 1.26.0 (40646f47)
- creationTimestamp: null
- labels:
- io.kompose.service: srmcontroller
- spec:
- containers:
- - env:
- - name: KUBERNETES_MASTER_IP
- value: k3d-sunriseop-server-0
- - name: KUBERNETES_MASTER_PORT
- value: "6443"
- - name: K8S_NAMESPACE
- value:
- - name: KUBERNETES_USERNAME
- value:
- - name: EMP_STORAGE_URI
- value:
- - name: KUBERNETES_MASTER_TOKEN
- value: eyJhbGciOiJSUzI1NiIsImtpZCI6IkRRS3VMNktkc1BOYk5ZeDhfSnFvVmJQdkJ6em1FODhPeHNIMHFya3JEQzgifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6InNybS1zZWNyZXQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiY2x1c3Rlci1hZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImU1MjUxZjhiLWY2ODItNDU0Ni1hOTgxLWNlNTk0YTg2NmZiNCIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmNsdXN0ZXItYWRtaW4ifQ.rnZyHFEE1ywceWqcio0UKQrp5GdfVGQOCXxx3RJpb_vvDj65GvNwN0VgA_anOlzj8kKJ9JQjWrA7an2k-5w0ycjeu8Ei_5Z0dvgRSpvKc4O5kCHddOB1kJl480hKWtZqgL0Vi6YbOziFGqvPd8hxHSTquxUgXEN2BStqII8MpVEK8z8iU2pJE5CNIaukGBozjlgc1Vb6HiEU4_UhlqG61uO6ReRVrzaYa4T1j4Zvvx1JN8t2HYcuv50QlHPrEAfW2F3ed0SBbb_X8AT0pGJrVas_uqZgMcN1j5BLO51RNmCY27ADHwCbj8HWuiHhyuLKQxYw8yKB-iMNQmq2fk3ezw
- - name: ARTIFACT_MANAGER_ADDRESS
- value:
- - name: EDGE_CLOUD_ADAPTER_NAME
- value:
- - name: ADAPTER_BASE_URL
- value:
- - name: NETWORK_ADAPTER_NAME
- value:
- - name: NETWORK_ADAPTER_BASE_URL
- value:
- - name: SCS_AS_ID
- value:
- - name: PLATFORM_PROVIDER
- value:
- image: ghcr.io/sunriseopenoperatorplatform/srm/srm:1.0.1
- name: srmcontroller
- ports:
- - containerPort: 8080
- resources: {}
- imagePullPolicy: Always
- restartPolicy: Always
-status: {}
-
----
-apiVersion: v1
-kind: Service
-metadata:
- annotations:
- kompose.cmd: kompose convert
- kompose.version: 1.26.0 (40646f47)
- creationTimestamp: null
- labels:
- io.kompose.service: srm
- name: srm
-spec:
- type: ClusterIP
- ports:
- - name: "8080"
- port: 8080
- selector:
- io.kompose.service: srmcontroller
-status:
- loadBalancer: {}
-
----
-kind: PersistentVolume
-apiVersion: v1
-metadata:
- name: mongodb-pv-volume # Sets PV's name
- labels:
- type: local # Sets PV's type to local
- app: mongosrm
-spec:
- storageClassName: manual
- capacity:
- storage: 200Mi # Sets PV Volume
- accessModes:
- - ReadWriteOnce
- hostPath:
- path: "/mnt/data/mongodb_srm"
----
-apiVersion: v1
-kind: PersistentVolumeClaim
-metadata:
- creationTimestamp: null
- labels:
- io.kompose.service: mongo-db
- name: mongo-db
-spec:
- storageClassName: manual
- accessModes:
- - ReadWriteOnce
- resources:
- requests:
- storage: 200Mi
-status: {}
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- annotations:
- kompose.cmd: kompose convert
- kompose.version: 1.26.0 (40646f47)
- creationTimestamp: null
- labels:
- io.kompose.service: mongosrm
- name: mongosrm
-spec:
- replicas: 1
- selector:
- matchLabels:
- io.kompose.service: mongosrm
- 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: mongosrm
- spec:
- containers:
- - image: mongo
- name: mongosrm
- ports:
- - containerPort: 27017
- resources: {}
- volumeMounts:
- - mountPath: /data/db
- name: mongo-db
- restartPolicy: Always
- volumes:
- - name: mongo-db
- persistentVolumeClaim:
- claimName: mongo-db
-status: {}
----
-apiVersion: v1
-kind: Service
-metadata:
- annotations:
- kompose.cmd: kompose convert
- kompose.version: 1.26.0 (40646f47)
- creationTimestamp: null
- labels:
- io.kompose.service: mongosrm
- name: mongosrm
-spec:
- type: ClusterIP
- ports:
- - name: "27017"
- port: 27017
- targetPort: 27017
- selector:
- io.kompose.service: mongosrm
-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: 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: {}
- restartPolicy: Always
----
-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: "27018"
- port: 27018
- 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/sample_db?authSource=admin
- - name: SRM_HOST
- value: http://srm:8080/srm/1.0.0
- - name: FEDERATION_MANAGER_HOST
- value: http://federation-manager:8989
- image: ghcr.io/sunriseopenoperatorplatform/oeg/oeg
- name: oegcontroller
- ports:
- - containerPort: 8080
- resources: {}
- imagePullPolicy: Always
- restartPolicy: Always
-
-status: {}
----
-apiVersion: v1
-kind: Service
-metadata:
- annotations:
- kompose.cmd: kompose convert
- kompose.version: 1.26.0 (40646f47)
- creationTimestamp: null
- labels:
- io.kompose.service: oeg
- name: oeg
-spec:
- type: LoadBalancer
- ports:
- - name: "8080"
- port: 8081
- targetPort: 8080
- selector:
- io.kompose.service: oegcontroller
-status:
- loadBalancer: {}
-
-
diff --git a/sunrise6g-deployment.yaml b/sunrise6g-deployment.yaml
deleted file mode 100644
index 7d097310c7bb1a69f70930257bda579b8e36d202..0000000000000000000000000000000000000000
--- a/sunrise6g-deployment.yaml
+++ /dev/null
@@ -1,395 +0,0 @@
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- annotations:
- kompose.cmd: kompose convert
- kompose.version: 1.26.0 (40646f47)
- creationTimestamp: null
- labels:
- io.kompose.service: srmcontroller
- name: srmcontroller
-spec:
- replicas: 1
- selector:
- matchLabels:
- io.kompose.service: srmcontroller
- strategy: {}
- template:
- metadata:
- annotations:
- kompose.cmd: kompose convert
- kompose.version: 1.26.0 (40646f47)
- creationTimestamp: null
- labels:
- io.kompose.service: srmcontroller
- spec:
- containers:
- - env:
- - name: KUBERNETES_MASTER_IP
- value: k3d-sunriseop-server-0
- - name: KUBERNETES_MASTER_PORT
- value: "6443"
- - name: KUBERNETES_USERNAME
- value: cluster-admin
- - name: K8S_NAMESPACE
- value: test
- - name: EMP_STORAGE_URI
- value: mongodb://mongosrm:27017
- - name: KUBERNETES_MASTER_TOKEN
- value: eyJhbGciOiJSUzI1NiIsImtpZCI6Img4UWI1cDR5MzRlV1FzZ0dsTTdIYmdwa1RKVlQ5aWZtSjJ3M2V2Q1RqazgifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiLCJrM3MiXSwiZXhwIjoxNzg0NjQyNjMwLCJpYXQiOjE3NTMxMDY2MzAsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwianRpIjoiNWU4MDc0NDYtYmMzYy00OTI1LThhNWMtNjUxODQ2YWQ1ZGVmIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJzdW5yaXNlNmciLCJzZXJ2aWNlYWNjb3VudCI6eyJuYW1lIjoic3VucmlzZS11c2VyIiwidWlkIjoiODFhMzAyNmQtYjcxMS00ZDJiLWEwYzktYjUwNmIwZjMwZTQyIn19LCJuYmYiOjE3NTMxMDY2MzAsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpzdW5yaXNlNmc6c3VucmlzZS11c2VyIn0.c6EbyUuXhCp6M1qkte7nGLFI8fDvWNPvMo0X3HIAq26pezXKEpTAafbHdGgk5o37zdgFW5RU6y6eduzdA65G8FXmHfGWIn_3h5EUvlg7ZGz-Pxl4rXehidlN-7ct8Kb9qChoIocdQWOEpCSuBTb1dS5Opc6DAXTchDkSDKoRLys4F7gu8_0djmwbDNh-17xrdeFMP76qUnBANCv3xCMzFUmYyJIj4P3ZAju7ru6xVjJOi9CveeFfuQZpYXIt_1H3zKe9zxHma5G3d6zmsfsrbfPSGXazuphC98O4M8xAJvvbRAx56tpdFs6y-BgMyEBffPxpRCW0FU3Ey8idSUK-WQ
- - name: ARTIFACT_MANAGER_ADDRESS
- value: http://artefact-manager-service:8000
- - name: EDGE_CLOUD_ADAPTER_NAME
- value: kubernetes
- - name: ADAPTER_BASE_URL
- value: k3d-sunriseop-server-0
- - name: PLATFORM_PROVIDER
- value: ISI
- image: ghcr.io/sunriseopenoperatorplatform/srm/srm:1.0.1
- name: srmcontroller
- ports:
- - containerPort: 8080
- resources: {}
- imagePullPolicy: Always
- restartPolicy: Always
-status: {}
-
----
-apiVersion: v1
-kind: Service
-metadata:
- annotations:
- kompose.cmd: kompose convert
- kompose.version: 1.26.0 (40646f47)
- creationTimestamp: null
- labels:
- io.kompose.service: srm
- name: srm
-spec:
- type: NodePort
- ports:
- - name: "8080"
- nodePort: 32415
- port: 8080
- targetPort: 8080
- selector:
- io.kompose.service: srmcontroller
-status:
- loadBalancer: {}
----
-kind: PersistentVolume
-apiVersion: v1
-metadata:
- name: mongodb-pv-volume # Sets PV's name
- labels:
- type: local # Sets PV's type to local
- app: mongosrm
-spec:
- storageClassName: manual
- capacity:
- storage: 200Mi # Sets PV Volume
- accessModes:
- - ReadWriteOnce
- hostPath:
- path: "/mnt/data/mongodb_srm"
----
-apiVersion: v1
-kind: PersistentVolumeClaim
-metadata:
- creationTimestamp: null
- labels:
- io.kompose.service: mongo-db
- name: mongo-db
-spec:
- storageClassName: manual
- accessModes:
- - ReadWriteOnce
- resources:
- requests:
- storage: 200Mi
-status: {}
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- annotations:
- kompose.cmd: kompose convert
- kompose.version: 1.26.0 (40646f47)
- creationTimestamp: null
- labels:
- io.kompose.service: mongosrm
- name: mongosrm
-spec:
- replicas: 1
- selector:
- matchLabels:
- io.kompose.service: mongosrm
- 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: mongosrm
- spec:
- containers:
- - image: mongo
- name: mongosrm
- ports:
- - containerPort: 27017
- resources: {}
- volumeMounts:
- - mountPath: /data/db
- name: mongo-db
- restartPolicy: Always
- volumes:
- - name: mongo-db
- persistentVolumeClaim:
- claimName: mongo-db
-status: {}
----
-apiVersion: v1
-kind: Service
-metadata:
- annotations:
- kompose.cmd: kompose convert
- kompose.version: 1.26.0 (40646f47)
- creationTimestamp: null
- labels:
- io.kompose.service: mongosrm
- name: mongosrm
-spec:
- type: ClusterIP
- ports:
- - name: "27017"
- port: 27017
- targetPort: 27017
- selector:
- io.kompose.service: mongosrm
-status:
- loadBalancer: {}
----
-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: JWT_ISSUER
- value: http://isiath.duckdns.org:8081/realms/federation
- - name: JWT_PUBLIC_KEY
- value: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnFHYObBh4Ar/s5/OG2swoUvmw25DNfX5j30itd3lFCzNnzXWobin/Jfywtj9HIXJ1euqiJMHchRgn7n0iY8X227/1+f+eml/bNs+roHtwP3GpO77ZLV/uP4RsGYbHUXKlGIf2EYglWNLs8ZNDFnpEIZzAEVzQrt1etr0HkwgwAKKkMbSdyRQTXoBgCPheyFgaLRtSHod4IijnBptolbK7LLKfkVaImQcs5R3GF81lM7cCtd1c+ERqZ2/pWAdlKHjt7zMuWWQypwVav59MgJprWv3oE9dvh5M0Ma+J4iH4DNiIzz6kYqAHpIJ1q813kjWlcUmwm4qSdgkDXwdGHxitwIDAQAB
- - name: FEDERATION_MANAGER_HOST
- value: http://federation-manager.federation-manager.svc.cluster.local:8989/operatorplatform/federation/v1
- 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
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: artefact-manager
- namespace: sunrise6g
-spec:
- replicas: 1
- selector:
- matchLabels:
- app: artefact-manager
- template:
- metadata:
- labels:
- app: artefact-manager
- spec:
- containers:
- - name: artefact-manager
- image: ghcr.io/sunriseopenoperatorplatform/artefactmanager:0.5
- ports:
- - containerPort: 8000
- env:
- - name: PYTHONPATH
- value: "/app"
----
-apiVersion: v1
-kind: Service
-metadata:
- name: artefact-manager-service
- namespace: sunrise6g
-spec:
- type: NodePort
- selector:
- app: artefact-manager
- ports:
- - protocol: TCP
- port: 8000
- targetPort: 8000
- nodePort: 30080 # Optional, must be between 30000–32767. Omit to let Kubernetes assign.
-
-