Loading .gitignore +1 −0 Original line number Original line Diff line number Diff line Loading @@ -4,3 +4,4 @@ src/__pycache__/ venv/ venv/ .env .env slice.db slice.db .python-version app.py +2 −0 Original line number Original line Diff line number Diff line Loading @@ -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 Loading Loading @@ -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" Loading deploy.sh 100644 → 100755 +0 −0 File mode changed from 100644 to 100755. View file scripts/show_logs_nsc.sh 100644 → 100755 +0 −0 File mode changed from 100644 to 100755. View file src/api/main.py +257 −0 Original line number Original line Diff line number Diff line Loading @@ -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): Loading Loading @@ -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
.gitignore +1 −0 Original line number Original line Diff line number Diff line Loading @@ -4,3 +4,4 @@ src/__pycache__/ venv/ venv/ .env .env slice.db slice.db .python-version
app.py +2 −0 Original line number Original line Diff line number Diff line Loading @@ -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 Loading Loading @@ -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" Loading
src/api/main.py +257 −0 Original line number Original line Diff line number Diff line Loading @@ -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): Loading Loading @@ -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