Commit 33a5a622 authored by Sergio Gimenez's avatar Sergio Gimenez
Browse files

feat(kubernetes): unify stateless adapter flow

Port GSMA/runtime-state adapter work into canonical tf-sdk so
local-docker and SRM use one repository path instead of duplicate
working trees.
parent 66a7685f
Loading
Loading
Loading
Loading
+508 −84

File changed.

Preview size limit exceeded, changes collapsed.

+3 −18
Original line number Diff line number Diff line
@@ -151,6 +151,7 @@ def deploy_service_function(
    service_function: DeployServiceFunction,
    connector_db: ConnectorDB,
    kubernetes_connector: KubernetesConnector,
    deployment_metadata=None,
    paas_name=None,
):

@@ -176,6 +177,8 @@ def deploy_service_function(
        final_deploy_descriptor["count-min"] = final_deploy_descriptor["count-max"]
    if service_function.location is not None:
        final_deploy_descriptor["location"] = service_function.location
    if deployment_metadata:
        final_deploy_descriptor["annotations"] = deployment_metadata

    containers = prepare_container(service_function, ser_function_)
    if isinstance(containers, tuple):
@@ -191,22 +194,4 @@ def deploy_service_function(
        return env_result

    response = kubernetes_connector.deploy_service_function(final_deploy_descriptor)
    deployed_service_function_db = {}
    deployed_service_function_db["service_function_name"] = ser_function_[0]["name"]
    if service_function.location is not None:
        deployed_service_function_db["location"] = service_function.location
    deployed_service_function_db["instance_name"] = deployed_name

    if "volumes" in final_deploy_descriptor:
        deployed_service_function_db["volumes"] = final_deploy_descriptor["volumes"]
    if "env_parameters" in final_deploy_descriptor:
        deployed_service_function_db["env_parameters"] = final_deploy_descriptor["env_parameters"]

    if "location" not in deployed_service_function_db:
        deployed_service_function_db["location"] = "Node is selected by the K8s scheduler"
    if type(response) is V1Deployment:
        deployed_service_function_db["_id"] = response.metadata.uid
        connector_db.insert_document_deployed_service_function(
            document=deployed_service_function_db
        )
    return response
+20 −0
Original line number Diff line number Diff line
from enum import Enum
from pydantic import BaseModel, ConfigDict
from typing import Optional

class RepoType(str, Enum):
    UPLOAD = "UPLOAD"
    PUBLICREPO = "PUBLICREPO"
    PRIVATEREPO = "PRIVATEREPO"
    
class ArtefactOnboarding(BaseModel):
    artefact_id: str
    name: str
    # chart: Optional[bytes] = Field(default=None) # XXX AFAIK not supported by CAMARA.
    repo_password: Optional[str] = None
    repo_name: Optional[str] = None
    repo_type: RepoType
    repo_url: Optional[str] = None
    repo_token: Optional[str] = None
    repo_user_name: Optional[str] = None
    model_config = ConfigDict(use_enum_values=True)
 No newline at end of file
+12 −10
Original line number Diff line number Diff line
@@ -24,20 +24,22 @@ def return_equal_ignore_order(a, b):
    return equal


import re


def _normalize_k8s_name(name):
    name = str(name).lower().replace("_", "-")
    name = re.sub(r"[^a-z0-9-]", "", name)
    name = re.sub(r"-+", "-", name).strip("-")
    return name[:63]


def prepare_name_for_k8s(name):
    name = name.lower()
    # deployed_name = deployed_name.replace("-", "")
    name = name.replace("_", "")
    deployed_name_ = "".join([i for i in name if not i.isdigit()])
    return deployed_name_
    return _normalize_k8s_name(name)


def prepare_name(name, driver):
    if driver != "docker":
        name = name.lower()
        # deployed_name = deployed_name.replace("-", "")
        name = name.replace("_", "")
        deployed_name_ = "".join([i for i in name if not i.isdigit()])
        return deployed_name_.rstrip("-")
        return _normalize_k8s_name(name)
    else:
        return name
+17 −0
Original line number Diff line number Diff line
@@ -251,6 +251,23 @@ class ConnectorDB:
        except Exception as ce_:
            raise Exception("An exception occurred :", ce_)     
    
    
    def insert_document_artefact(self, document=None, _id=None):
        collection = "artefacts"
        myclient = pymongo.MongoClient(self._storage_url)
        mydbmongo = myclient[self.mydb_mongo]
        mycol = mydbmongo[collection]

        myquery = {"artefact_id": document.artefact_id}
        mydoc = mycol.find_one(myquery)
        # keeps the last record (contains registrationStatus)
        if mydoc is not None:
            return ("Already Registered: Artefact id", document.artefact_id)
        try:
            mycol.insert_one(document.model_dump())
        except Exception as ce_:
            raise Exception("An exception occurred :", ce_)

    def get_documents_from_collection(
        self, collection_input, input_type=None, input_value=None
    ) -> List[dict]:
Loading