Commit 454eb176 authored by Javier Velázquez's avatar Javier Velázquez
Browse files

Add restconf namespace

parent 4865020a
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -4,3 +4,4 @@ src/__pycache__/
venv/
venv/
.env
.env
slice.db
slice.db
.python-version
+2 −0
Original line number Original line Diff line number Diff line
@@ -21,6 +21,7 @@ from flask_cors import CORS
from swagger.tfs_namespace import tfs_ns
from swagger.tfs_namespace import tfs_ns
from swagger.ixia_namespace import ixia_ns
from swagger.ixia_namespace import ixia_ns
from swagger.E2E_namespace import e2e_ns
from swagger.E2E_namespace import e2e_ns
from swagger.restconf_namespace import restconf_ns
from src.config.constants import NSC_PORT
from src.config.constants import NSC_PORT
from src.webui.gui import gui_bp
from src.webui.gui import gui_bp
from src.config.config import create_config
from src.config.config import create_config
@@ -52,6 +53,7 @@ def create_app():
    api.add_namespace(tfs_ns, path="/tfs")
    api.add_namespace(tfs_ns, path="/tfs")
    api.add_namespace(ixia_ns, path="/ixia")
    api.add_namespace(ixia_ns, path="/ixia")
    api.add_namespace(e2e_ns, path="/e2e")
    api.add_namespace(e2e_ns, path="/e2e")
    api.add_namespace(restconf_ns, path="/restconf")


    if app.config["WEBUI_DEPLOY"]:
    if app.config["WEBUI_DEPLOY"]:
        app.secret_key = "clave-secreta-dev"
        app.secret_key = "clave-secreta-dev"

deploy.sh

100644 → 100755
+0 −0

File mode changed from 100644 to 100755.

scripts/show_logs_nsc.sh

100644 → 100755
+0 −0

File mode changed from 100644 to 100755.

+257 −0
Original line number Original line Diff line number Diff line
@@ -20,6 +20,7 @@ from flask import current_app
from src.database.db import get_data, delete_data, get_all_data, delete_all_data
from src.database.db import get_data, delete_data, get_all_data, delete_all_data
from src.realizer.tfs.helpers.tfs_connector import tfs_connector
from src.realizer.tfs.helpers.tfs_connector import tfs_connector
from src.utils.safe_get import safe_get
from src.utils.safe_get import safe_get
from src.database.sysrepo_store import get_data_store, create_data_store, delete_data_store


class Api:
class Api:
    def __init__(self, slice_service):
    def __init__(self, slice_service):
@@ -214,3 +215,259 @@ class Api:
            return send_response(False, code=404, message=str(e))
            return send_response(False, code=404, message=str(e))
        except Exception as e:
        except Exception as e:
            return send_response(False, code=500, message=str(e))
            return send_response(False, code=500, message=str(e))

    # RESCONF calls

    ### GET

    def get_network_slice_services(self):
        try:
            data = get_data_store("/ietf-network-slice-service:network-slice-services")
            if not data:
                raise ValueError("Nothing found")
            return data, 200
        except ValueError as e:
            return send_response(False, code=404, message=str(e))
        except Exception as e:
            return send_response(False, code=500, message=str(e))

    def get_slo_sle_templates(self, template_id=None):
        try:
            if template_id:
                xpath = f"/ietf-network-slice-service:network-slice-services/slo-sle-templates/slo-sle-template[id='{template_id}']"
                data = get_data_store(xpath)
                if not data:
                    raise ValueError("Template not found")
                return data, 200

            data = get_data_store("/ietf-network-slice-service:network-slice-services/slo-sle-templates/slo-sle-template")
            if not data:
                raise ValueError("No templates found")

            return data, 200
    
        except ValueError as e:
            # Handle case where no slices are found
            return send_response(False, code=404, message=str(e))
        except Exception as e:
            # Handle unexpected errors
            return send_response(False, code=500, message=str(e))
    
    def get_slice_services(self, slice_id=None):
        try:
            if slice_id:
                data = get_data_store(f"/ietf-network-slice-service:network-slice-services/slice-service[id='{slice_id}']")
                if not data:
                    raise ValueError("Slice not found")
                return data, 200

            data = get_data_store("/ietf-network-slice-service:network-slice-services/slice-service")
            if not data:
                raise ValueError("No slices found")

            return data, 200
    
        except ValueError as e:
            # Handle case where no slices are found
            return send_response(False, code=404, message=str(e))
        except Exception as e:
            # Handle unexpected errors
            return send_response(False, code=500, message=str(e))
    
    def get_sdps(self, slice_id, sdp_id=None):
        try:
            if sdp_id:
                data = get_data_store(f"/ietf-network-slice-service:network-slice-services/slice-service[id='{slice_id}']/sdps/sdp[id='{sdp_id}']")
                if not data:
                    raise ValueError("SDP not found")
                return data, 200

            data = get_data_store(f"/ietf-network-slice-service:network-slice-services/slice-service[id='{slice_id}']/sdps")
            if not data:
                raise ValueError("No SDPs found")

            return data, 200
    
        except ValueError as e:
            # Handle case where no slices are found
            return send_response(False, code=404, message=str(e))
        except Exception as e:
            # Handle unexpected errors
            return send_response(False, code=500, message=str(e))
    
    ### POST 

    def add_network_slice_service(self, intent):
        try:
            # result = self.slice_service.nsc(intent)
            create_data_store(intent)
            # if not result:
            #     return send_response(False, code=404, message="No intents found")
            logging.info(f"Slice created successfully")
            return send_response(
                True,
                code=201,
                data="Data stored successfully" 
            )
        except RuntimeError as e:
            # Handle case where there is no content to process
            return send_response(False, code=200, message=str(e))
        except Exception as e:
            # Handle unexpected errors
            return send_response(False, code=500, message=str(e))
    
    def add_slo_sle_template(self, template):
        try:
            template_id = template.pop("id", None)
            xpath = f"/ietf-network-slice-service:network-slice-services/slo-sle-templates/slo-sle-template[id='{template_id}']"
            existing_template = get_data_store(xpath)
            if existing_template:
                return send_response(False, code=409, message="Template already exists")
            create_data_store(template, xpath)
            logging.info(f"Template created successfully")
            return send_response(
                True,
                code=201,
                message="Template created successfully"
            )
        except Exception as e:
            # Handle unexpected errors
            return send_response(False, code=500, message=str(e))
    
    def add_slice_service(self, intent):
        try:
            slice_id = intent.pop("id", None)
            xpath = f"/ietf-network-slice-service:network-slice-services/slice-service[id='{slice_id}']"

            existing_slice = get_data_store(xpath)
            if existing_slice:
                return send_response(False, code=409, message="Slice already exists")
            create_data_store(intent, xpath)
            #result = self.slice_service.nsc(intent)
            # if not result:
            #     return send_response(False, code=404, message="No intents found")
            logging.info(f"Slice created successfully")
            return send_response(
                True,
                code=201,
                data="Data stored successfully"
            )
        except RuntimeError as e:
            # Handle case where there is no content to process
            return send_response(False, code=200, message=str(e))
        except Exception as e:
            # Handle unexpected errors
            return send_response(False, code=500, message=str(e))
    
    def add_sdp(self, slice_id, sdp):
        try:
            sdp_id = sdp.pop("id", None)
            xpath = f"/ietf-network-slice-service:network-slice-services/slice-service[id='{slice_id}']/sdps/sdp[id='{sdp_id}']"
            existing_sdp = get_data_store(xpath)
            if existing_sdp:
                return send_response(False, code=409, message="SDP already exists")
            create_data_store(sdp, xpath)   
            logging.info(f"SDP created successfully")
            return send_response(
                True,
                code=201,
                message="SDP created successfully"
            )
        except Exception as e:
            # Handle unexpected errors
            return send_response(False, code=500, message=str(e))
        
    ### DELETE

    def delete_network_slice_services(self):
        try:
            # Delete specific slice if slice_id is provided
            xpath = f"/ietf-network-slice-service:network-slice-services"
            delete_data_store(xpath)
            logging.info("All slices removed successfully")
            return {}, 204
        
        except ValueError as e:
            return send_response(False, code=404, message=str(e))
        except Exception as e:
            return send_response(False, code=500, message=str(e))
    
    def delete_slo_sle_templates(self, template_id=None):
        try:
            # Delete specific template if template_id is provided
            if template_id:
                xpath = f"/ietf-network-slice-service:network-slice-services/slo-sle-templates/slo-sle-template[id='{template_id}']"
                existing_template = get_data_store(xpath)
                if not existing_template:
                    raise ValueError("Template not found")
                delete_data_store(xpath)
                logging.info(f"Template {template_id} removed successfully")
                return {}, 204
            
            # Delete all templates
            else:
                xpath = f"/ietf-network-slice-service:network-slice-services/slo-sle-templates/slo-sle-template"
                delete_data_store(xpath)
                logging.info("All templates removed successfully")
                return {}, 204
        
        except ValueError as e:
            return send_response(False, code=404, message=str(e))
        except Exception as e:
            return send_response(False, code=500, message=str(e))
    
    def delete_slice_services(self, slice_id=None):
        try:
            # Delete specific slice if slice_id is provided
            if slice_id:
                xpath = f"/ietf-network-slice-service:network-slice-services/slice-service[id='{slice_id}']"
                existing_slice = get_data_store(xpath)
                if not existing_slice:
                    raise ValueError("Slice not found")
                delete_data_store(xpath)
                logging.info(f"Slice {slice_id} removed successfully")
                return {}, 204
            
            # Delete all slices
            else:
                xpath = f"/ietf-network-slice-service:network-slice-services/slice-service"
                delete_data_store(xpath)
                logging.info("All slices removed successfully")
                return {}, 204
        
        except ValueError as e:
            return send_response(False, code=404, message=str(e))
        except Exception as e:
            return send_response(False, code=500, message=str(e))
    
    def delete_sdps(self, slice_id, sdp_id=None):
        try:
            # Delete specific SDP if sdp_id is provided
            if sdp_id:
                xpath = f"/ietf-network-slice-service:network-slice-services/slice-service[id='{slice_id}']"
                existing_slice = get_data_store(xpath)
                if not existing_slice:
                    raise ValueError("Slice not found")
                xpath = f"/ietf-network-slice-service:network-slice-services/slice-service[id='{slice_id}']/sdps/sdp[id='{sdp_id}']"
                existing_sdp = get_data_store(xpath)
                if not existing_sdp:
                    raise ValueError("SDP not found")
                delete_data_store(xpath)
                logging.info(f"SDP {sdp_id} removed successfully")
                return {}, 204
            
            # Delete all SDPs
            else:
                xpath = f"/ietf-network-slice-service:network-slice-services/slice-service[id='{slice_id}']"
                existing_slice = get_data_store(xpath)
                if not existing_slice:
                    raise ValueError("Slice not found")
                xpath = f"/ietf-network-slice-service:network-slice-services/slice-service[id='{slice_id}']/sdps"
                delete_data_store(xpath)
                logging.info("All SDPs removed successfully")
                return {}, 204
        
        except ValueError as e:
            return send_response(False, code=404, message=str(e))
        except Exception as e:
            return send_response(False, code=500, message=str(e))
 No newline at end of file
Loading