Commit 523765b1 authored by Laskaratos Dimitris's avatar Laskaratos Dimitris
Browse files

Added sunrise6g as an sdk

parent 59ae37f2
Loading
Loading
Loading
Loading
+1 −78
Original line number Diff line number Diff line
@@ -8,8 +8,6 @@ The Service Resource Manager facilitates the North-South Bound Interface (NSBI)

SRM supports the following CAMARA functions:

NOTE: NEF APIs are not yet implemented

<br>

| Edge Cloud Management API  | Network Exposure API  (QoD & Traffic Influence)|
@@ -34,78 +32,3 @@ SRM can be deployed in a Kubernetes cluster by executing the file _srm-deploymen
|  ARTIFACT_MANAGER_ADDRESS |  Address of the Artefact Manager |
| EDGE_CLOUD_ADAPTER_NAME  | The adapter SRM is going to use throughout its lifecycle. For direct access to K8s just type 'kubernetes'  |
|PLATFORM_PROVIDER| The Edge Cloud infrastructure provider|
 No newline at end of file

## Usage

Assuming an instance of Open Exposure Gateway (OEG) is running so that CAMARA APIs are accessible, here are a few request examples with responses, all CAMARA compatible:

### Get all registered apps

_curl -X GET http://[OEG_root_url]/apps_

Example response:

_[
  {
    "appId": "68503f9fe81dc7441fdaae94",
    "appRepo": {
      "imagePath": "mongo:4.4.18"
    },
    "componentSpec": [
      {
        "componentName": "mongodb",
        "networkInterfaces": [
          {
            "port": 27017,
            "protocol": "TCP"
          }
        ]
      }
    ],
    "name": "mongodb",
    "packageType": "QCOW2"
  },
  {
    "appId": "685122aa8fff437507ec8932",
    "appRepo": {
      "imagePath": "nginx"
    },
    "componentSpec": [
      {
        "componentName": "nginx",
        "networkInterfaces": [
          {
            "port": 80,
            "protocol": "TCP"
          },
          {
            "port": 443,
            "protocol": "TCP"
          }
        ]
      }
    ],
    "name": "nginx",
    "packageType": "QCOW2"
  }
]_

### Register app metadata

_curl -X POST http://[OEG_root_url]/apps --data '{"name": "nginx", "version": "1", "packageType": "QCOW2", "appRepo": {"imagePath": "nginx", "type": "PRIVATEREPO"}
, "componentSpec": [{"componentName": "nginx", "networkInterfaces": [{"protocol": "TCP", "port": 80, "interfaceId": "Uj6qThvzkegxa3L4b88", "visibilityType": "VISIBILITY_EXTERNAL"}, {"protoco
l": "TCP", "port": 443, "interfaceId": "Uj6qThvzkegxa3L4b88", "visibilityType": "VISIBILITY_EXTERNAL"}]}]}' -H "Content-Type: application/json"_

Example Response:

_{
  "appId": "685bdc7dc2db24cc0e8927dc"
}_

### Instantiate registered app

_curl -X POST http://[OEG_root_url]/appinstances --data '{"appId": "685bdc7dc2db24cc0e8927dc", "name": "nginx-test", "appZones": [{"EdgeCloudZone":{"edgeCloudZoneI
d": "f39c5ea3-f4e3-472f-b080-2f3b81c39995", "edgeCloudZoneName": "k3d-sunriseop-agent-2", "edgeCloudProvider": "ISI"}}]}' -H "Content-Type: application/json"_

Example Response:
+6 −30
Original line number Diff line number Diff line
#connexion >= 2.6.0
#connexion[swagger-ui] >= 2.6.0
#python_dateutil == 2.6.0
#setuptools >= 21.0.0
#swagger-ui-bundle >= 0.0.2
#requests
#pymongo
#logging
#traceback
#pprint

#connexion >= 2.6.0
#connexion == 2.5.0 used in python 3.5 running server for dev
#connexion #for test
connexion<3.0.0
connexion[swagger-ui]
python_dateutil == 2.6.0
setuptools >= 21.0.0
#setuptools==50.3.2
pymongo==3.12.0
#git+https://github.com/kubernetes-client/python.git
requests==2.25.1
#kubernetes==17.17.0
requests==2.32.4
kubernetes==18.20.0

python-jose[cryptography]
cffi==1.15.1
#bcrypt
#bcrypt==3.1.7 #used in python 3.5 running server for dev

psycopg2-binary
#psycopg2==2.7.7 #used in python 3.5 running server for dev

#not used!
#pandas==0.24.2
paramiko>=2.12.0
urllib3
colorlog==6.8.2
pydantic==2.10.6

pydantic==2.11.3
pydantic-extra-types==2.10.3
sunrise6g_opensdk
 No newline at end of file
+7 −7
Original line number Diff line number Diff line
import connexion
import six
import logging
import os
from sunrise6g_opensdk.edgecloud.adapters.aeros.client import EdgeApplicationManager as AerOSClient
from sunrise6g_opensdk.edgecloud.adapters.i2edge.client import EdgeApplicationManager as I2EdgeClient
from sunrise6g_opensdk.edgecloud.adapters.kubernetes.client import EdgeApplicationManager as kubernetesClient

logger=logging.getLogger(__name__)

@@ -10,14 +12,12 @@ adapter_base_url = os.environ['ADAPTER_BASE_URL']
adapter = None

if adapter_name=='aeros':
     from src.adapters.edgecloud.adapters.aeros.client import EdgeApplicationManager
     adapter = EdgeApplicationManager(base_url=adapter_base_url)
     
     adapter = AerOSClient(base_url=adapter_base_url)
elif adapter_name=='i2edge':
     from src.adapters.edgecloud.adapters.i2edge.client import EdgeApplicationManager
     adapter = EdgeApplicationManager(base_url=adapter_base_url)
     adapter = I2EdgeClient(base_url=adapter_base_url)
elif adapter_name=='kubernetes':
     from src.adapters.edgecloud.adapters.kubernetes.client import EdgeApplicationManager
     adapter = EdgeApplicationManager(base_url=adapter_base_url, **os.environ)
     adapter = kubernetesClient(base_url=adapter_base_url, **os.environ)

def deregister_service_function(service_function_id: str):  # noqa: E501
    """Deregister service.
+16 −17
Original line number Diff line number Diff line
from os import environ
import logging
import connexion
from sunrise6g_opensdk.network.adapters.oai.client import NetworkManager as OAIClient
from sunrise6g_opensdk.network.adapters.open5gcore.client import NetworkManager as Open5GCoreClient
from sunrise6g_opensdk.network.adapters.open5gs.client import NetworkManager as Open5GSClient

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


network_client = environ.get('NETWORK_CLIENT')
adapter = None

if network_client is not None:
    if network_client=='oai':
        from src.adapters.network.clients.oai.client import NetworkManager
        adapter = NetworkManager()
        adapter = OAIClient()
    elif network_client=='open5gcore':
        from src.adapters.network.clients.open5gcore.client import NetworkManager
        adapter = NetworkManager()
        adapter = Open5GCoreClient()
    else:
        from src.adapters.network.clients.open5gs.client import NetworkManager
        adapter = NetworkManager()
        adapter = Open5GSClient()


def create_qod_session(body: dict):
def create_qod_session():
     
    if connexion.request.is_json:
        try:
            response = adapter.create_qod_session(body)
            response = adapter.create_qod_session(connexion.request.get_json())
            return response
        except Exception as ce_:
            logger.error(ce_)
@@ -33,16 +32,16 @@ def create_qod_session(body: dict):
    else:
        return 'ERROR: Could not read JSON payload.', 400

def get_qod_session(id: str):
def get_qod_session(session_id: str):
    
    try:
        response = adapter.get_qod_session(id)
        return response
        return {'status': 200, 'session': response.json()}
    except Exception as ce_:
        logger.error(ce_)
        return ce_

def delete_qod_session(id: str):
def delete_qod_session(session_id: str):
   
    try:
        response = adapter.delete_qod_session(id)
+3 −3
Original line number Diff line number Diff line
@@ -316,14 +316,14 @@ paths:
        "200":
          description: Session created.
      x-openapi-router-controller: src.controllers.network_functions_controller
  /sessions/{id}:
  /sessions/{sessionId}:
    get:
      tags:
      - Quality on Demand Functions
      summary: Retrieve details of a QoD Session
      operationId: get_qod_session
      parameters:
      - name: id
      - name: sessionId
        in: path
        description: Represents a QoD Session.
        required: true
@@ -345,7 +345,7 @@ paths:
      summary: Remove QoD Session
      operationId: delete_qod_session
      parameters:
      - name: id
      - name: sessionId
        in: path
        description: Represents a QoD Session.
        required: true
Loading