From 216ddc4e6f39fbdcec04ef7d3089bc7ddb3cd329 Mon Sep 17 00:00:00 2001 From: hajipour Date: Thu, 6 Feb 2025 10:19:24 +0100 Subject: [PATCH 1/7] ietf-slice NBI and nce controllers icons added --- .../static/topology_icons/ietf-slice.png | Bin 0 -> 8751 bytes src/webui/service/static/topology_icons/nce.png | Bin 0 -> 19438 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/webui/service/static/topology_icons/ietf-slice.png create mode 100644 src/webui/service/static/topology_icons/nce.png diff --git a/src/webui/service/static/topology_icons/ietf-slice.png b/src/webui/service/static/topology_icons/ietf-slice.png new file mode 100644 index 0000000000000000000000000000000000000000..ed2232e8223a39eb0d829e0e50975a697b0660fc GIT binary patch literal 8751 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 YUQe!cnBB}^U|?YIboFyt=akR{09ic(9RL6T literal 0 HcmV?d00001 diff --git a/src/webui/service/static/topology_icons/nce.png b/src/webui/service/static/topology_icons/nce.png new file mode 100644 index 0000000000000000000000000000000000000000..0c9af8f37fbb7249fbe570a920e0bcd281582655 GIT binary patch literal 19438 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 Rx;KDq_jL7hS?83{1OOkDbQb^s literal 0 HcmV?d00001 -- GitLab From d48cfb7ba339414468ce5dc0bccce93d61714101 Mon Sep 17 00:00:00 2001 From: hajipour Date: Thu, 6 Feb 2025 10:52:40 +0100 Subject: [PATCH 2/7] enhancement: - agg-net and ip-transport controllers added to e2e descriptor of CAMARA ofc25 demo to have both in the e2e topology - agg-net descriptor synced with the latest tests --- src/nbi/tests/data/agg-net-descriptor.json | 288 ++++++++++++++++-- src/nbi/tests/data/camara-e2e-topology.json | 119 ++++++-- .../data/camara-e2e-topology.json | 119 ++++++-- 3 files changed, 461 insertions(+), 65 deletions(-) diff --git a/src/nbi/tests/data/agg-net-descriptor.json b/src/nbi/tests/data/agg-net-descriptor.json index bde4db628..bb27d6f25 100644 --- a/src/nbi/tests/data/agg-net-descriptor.json +++ b/src/nbi/tests/data/agg-net-descriptor.json @@ -41,7 +41,7 @@ "action": 1, "custom": { "resource_key": "_connect/address", - "resource_value": "10.10.10.10" + "resource_value": "10.0.58.29" } }, { @@ -56,7 +56,13 @@ "custom": { "resource_key": "_connect/settings", "resource_value": { - "endpoints": [], + "endpoints": [ + { + "uuid": "mgmt", + "name": "mgmt", + "type": "mgmt" + } + ], "scheme": "http", "username": "admin", "password": "admin", @@ -85,7 +91,7 @@ }, "device_operational_status": 1, "device_drivers": [ - 0 + 13 ], "device_config": { "config_rules": [ @@ -118,21 +124,9 @@ "uuid": "200", "name": "200", "type": "optical", - "ce-ip": "128.32.33.2", "address_ip": "128.32.33.254", "address_prefix": "24", - "site_location": "access", - "mtu": "1500", - "ipv4_lan_prefixes": [ - { - "lan": "128.32.10.0/24", - "lan_tag": "10" - }, - { - "lan": "128.32.20.0/24", - "lan_tag": "20" - } - ] + "site_location": "access" }, { "uuid": "500", @@ -166,7 +160,7 @@ }, "device_operational_status": 1, "device_drivers": [ - 0 + 13 ], "device_config": { "config_rules": [ @@ -227,7 +221,7 @@ }, "device_operational_status": 1, "device_drivers": [ - 0 + 13 ], "device_config": { "config_rules": [ @@ -288,7 +282,7 @@ }, "device_operational_status": 1, "device_drivers": [ - 0 + 13 ], "device_config": { "config_rules": [ @@ -321,17 +315,9 @@ "uuid": "200", "name": "200", "type": "optical", - "ce-ip": "172.10.33.2", "address_ip": "172.10.33.254", "address_prefix": "24", - "site_location": "cloud", - "mtu": "1500", - "ipv4_lan_prefixes": [ - { - "lan": "172.1.101.0/24", - "lan_tag": "101" - } - ] + "site_location": "cloud" }, { "uuid": "500", @@ -349,9 +335,185 @@ } ] } + }, + { + "device_id": { + "device_uuid": { + "uuid": "172.16.204.220" + } + }, + "device_type": "emu-datacenter", + "device_drivers": [ + 0 + ], + "device_endpoints": [], + "device_operational_status": 1, + "device_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "_connect/address", + "resource_value": "127.0.0.1" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/port", + "resource_value": "0" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/settings", + "resource_value": { + "endpoints": [ + { + "sample_types": [], + "type": "optical", + "uuid": "500" + }, + { + "sample_types": [], + "type": "optical", + "uuid": "200" + }, + { + "sample_types": [], + "type": "optical", + "uuid": "201" + } + ] + } + } + } + ] + } } ], "links": [ + { + "link_id": { + "link_uuid": { + "uuid": "ip-net-controller/mgmt==172.16.182.25/mgmt" + } + }, + "name": "ip-net-controller/mgmt==172.16.182.25/mgmt", + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "ip-net-controller" + } + }, + "endpoint_uuid": { + "uuid": "mgmt" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "172.16.182.25" + } + }, + "endpoint_uuid": { + "uuid": "mgmt" + } + } + ] + }, + { + "link_id": { + "link_uuid": { + "uuid": "ip-net-controller/mgmt==172.16.185.31/mgmt" + } + }, + "name": "ip-net-controller/mgmt==172.16.185.31/mgmt", + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "ip-net-controller" + } + }, + "endpoint_uuid": { + "uuid": "mgmt" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "172.16.185.31" + } + }, + "endpoint_uuid": { + "uuid": "mgmt" + } + } + ] + }, + { + "link_id": { + "link_uuid": { + "uuid": "ip-net-controller/mgmt==172.16.185.33/mgmt" + } + }, + "name": "ip-net-controller/mgmt==172.16.185.33/mgmt", + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "ip-net-controller" + } + }, + "endpoint_uuid": { + "uuid": "mgmt" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "172.16.185.33" + } + }, + "endpoint_uuid": { + "uuid": "mgmt" + } + } + ] + }, + { + "link_id": { + "link_uuid": { + "uuid": "ip-net-controller/mgmt==172.16.185.32/mgmt" + } + }, + "name": "ip-net-controller/mgmt==172.16.185.32/mgmt", + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "ip-net-controller" + } + }, + "endpoint_uuid": { + "uuid": "mgmt" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "172.16.185.32" + } + }, + "endpoint_uuid": { + "uuid": "mgmt" + } + } + ] + }, { "link_id": { "link_uuid": { @@ -623,6 +785,74 @@ } } ] + }, + { + "link_id": { + "link_uuid": { + "uuid": "172.16.185.32-200" + } + }, + "name": "172.16.185.32-200", + "attributes": { + "total_capacity_gbps": 10, + "used_capacity_gbps": 0 + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "172.16.185.32" + } + }, + "endpoint_uuid": { + "uuid": "200" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "172.16.204.220" + } + }, + "endpoint_uuid": { + "uuid": "500" + } + } + ] + }, + { + "link_id": { + "link_uuid": { + "uuid": "172.16.204.220-500" + } + }, + "name": "172.16.204.220-500", + "attributes": { + "total_capacity_gbps": 10, + "used_capacity_gbps": 0 + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "172.16.204.220" + } + }, + "endpoint_uuid": { + "uuid": "500" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "172.16.185.32" + } + }, + "endpoint_uuid": { + "uuid": "200" + } + } + ] } ] -} \ No newline at end of file +} diff --git a/src/nbi/tests/data/camara-e2e-topology.json b/src/nbi/tests/data/camara-e2e-topology.json index 0b314e104..02a21e691 100644 --- a/src/nbi/tests/data/camara-e2e-topology.json +++ b/src/nbi/tests/data/camara-e2e-topology.json @@ -23,6 +23,59 @@ } ], "devices": [ + { + "device_id": { + "device_uuid": { + "uuid": "ip-transport-controller" + } + }, + "name": "ip-transport-controller", + "device_type": "ietf-slice", + "device_operational_status": 1, + "device_drivers": [ + 14 + ], + "device_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "_connect/address", + "resource_value": "10.0.58.9" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/port", + "resource_value": "80" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/settings", + "resource_value": { + "endpoints": [ + { + "uuid": "mgmt", + "name": "mgmt", + "type": "mgmt" + } + ], + "scheme": "http", + "username": "admin", + "password": "admin", + "base_url": "/restconf/v2/data", + "timeout": 120, + "verify": false + } + } + } + ] + }, + "device_endpoints": [] + }, { "device_id": { "device_uuid": { @@ -94,7 +147,7 @@ "action": 1, "custom": { "resource_key": "_connect/address", - "resource_value": "10.10.10.10" + "resource_value": "1.1.1.1" } }, { @@ -139,7 +192,7 @@ "device_type": "emu-packet-router", "controller_id": { "device_uuid": { - "uuid": "agg-net-controller" + "uuid": "ip-transport-controller" } }, "device_operational_status": 1, @@ -210,7 +263,7 @@ "device_type": "emu-packet-router", "controller_id": { "device_uuid": { - "uuid": "agg-net-controller" + "uuid": "ip-transport-controller" } }, "device_operational_status": 1, @@ -272,7 +325,7 @@ "device_type": "emu-packet-router", "controller_id": { "device_uuid": { - "uuid": "agg-net-controller" + "uuid": "ip-transport-controller" } }, "device_operational_status": 1, @@ -334,7 +387,7 @@ "device_type": "emu-packet-router", "controller_id": { "device_uuid": { - "uuid": "agg-net-controller" + "uuid": "ip-transport-controller" } }, "device_operational_status": 1, @@ -748,6 +801,36 @@ } ], "links": [ + { + "link_id": { + "link_uuid": { + "uuid": "agg-net-controller/mgmt==ip-transport-controller/mgmt" + } + }, + "name": "agg-net-controller/mgmt==ip-transport-controller/mgmt", + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "agg-net-controller" + } + }, + "endpoint_uuid": { + "uuid": "mgmt" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "ip-transport-controller" + } + }, + "endpoint_uuid": { + "uuid": "mgmt" + } + } + ] + }, { "link_id": { "link_uuid": { @@ -841,15 +924,15 @@ { "link_id": { "link_uuid": { - "uuid": "agg-net-controller/mgmt==172.16.185.33/mgmt" + "uuid": "ip-transport-controller/mgmt==172.16.185.33/mgmt" } }, - "name": "agg-net-controller/mgmt==172.16.185.33/mgmt", + "name": "ip-transport-controller/mgmt==172.16.185.33/mgmt", "link_endpoint_ids": [ { "device_id": { "device_uuid": { - "uuid": "agg-net-controller" + "uuid": "ip-transport-controller" } }, "endpoint_uuid": { @@ -871,15 +954,15 @@ { "link_id": { "link_uuid": { - "uuid": "agg-net-controller/mgmt==172.16.185.31/mgmt" + "uuid": "ip-transport-controller/mgmt==172.16.185.31/mgmt" } }, - "name": "agg-net-controller/mgmt==172.16.185.31/mgmt", + "name": "ip-transport-controller/mgmt==172.16.185.31/mgmt", "link_endpoint_ids": [ { "device_id": { "device_uuid": { - "uuid": "agg-net-controller" + "uuid": "ip-transport-controller" } }, "endpoint_uuid": { @@ -901,15 +984,15 @@ { "link_id": { "link_uuid": { - "uuid": "agg-net-controller/mgmt==172.16.182.25/mgmt" + "uuid": "ip-transport-controller/mgmt==172.16.185.32/mgmt" } }, - "name": "agg-net-controller/mgmt==172.16.182.25/mgmt", + "name": "ip-transport-controller/mgmt==172.16.185.32/mgmt", "link_endpoint_ids": [ { "device_id": { "device_uuid": { - "uuid": "agg-net-controller" + "uuid": "ip-transport-controller" } }, "endpoint_uuid": { @@ -919,7 +1002,7 @@ { "device_id": { "device_uuid": { - "uuid": "172.16.182.25" + "uuid": "172.16.185.32" } }, "endpoint_uuid": { @@ -931,15 +1014,15 @@ { "link_id": { "link_uuid": { - "uuid": "agg-net-controller/mgmt==172.16.182.25/mgmt" + "uuid": "ip-transport-controller/mgmt==172.16.182.25/mgmt" } }, - "name": "agg-net-controller/mgmt==172.16.182.25/mgmt", + "name": "ip-transport-controller/mgmt==172.16.182.25/mgmt", "link_endpoint_ids": [ { "device_id": { "device_uuid": { - "uuid": "agg-net-controller" + "uuid": "ip-transport-controller" } }, "endpoint_uuid": { diff --git a/src/tests/ofc25-camara-e2e-controller/data/camara-e2e-topology.json b/src/tests/ofc25-camara-e2e-controller/data/camara-e2e-topology.json index 7ae2da79c..4cc5645a0 100644 --- a/src/tests/ofc25-camara-e2e-controller/data/camara-e2e-topology.json +++ b/src/tests/ofc25-camara-e2e-controller/data/camara-e2e-topology.json @@ -23,6 +23,59 @@ } ], "devices": [ + { + "device_id": { + "device_uuid": { + "uuid": "ip-transport-controller" + } + }, + "name": "ip-transport-controller", + "device_type": "ietf-slice", + "device_operational_status": 1, + "device_drivers": [ + 14 + ], + "device_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "_connect/address", + "resource_value": "AGG_NET_IP" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/port", + "resource_value": "AGG_NET_PORT" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/settings", + "resource_value": { + "endpoints": [ + { + "uuid": "mgmt", + "name": "mgmt", + "type": "mgmt" + } + ], + "scheme": "http", + "username": "admin", + "password": "admin", + "base_url": "/restconf/v2/data", + "timeout": 120, + "verify": false + } + } + } + ] + }, + "device_endpoints": [] + }, { "device_id": { "device_uuid": { @@ -101,7 +154,7 @@ "action": 1, "custom": { "resource_key": "_connect/port", - "resource_value": "NCE_PORT" + "resource_value": "NCE_IP" } }, { @@ -139,7 +192,7 @@ "device_type": "emu-packet-router", "controller_id": { "device_uuid": { - "uuid": "agg-net-controller" + "uuid": "ip-transport-controller" } }, "device_operational_status": 1, @@ -210,7 +263,7 @@ "device_type": "emu-packet-router", "controller_id": { "device_uuid": { - "uuid": "agg-net-controller" + "uuid": "ip-transport-controller" } }, "device_operational_status": 1, @@ -272,7 +325,7 @@ "device_type": "emu-packet-router", "controller_id": { "device_uuid": { - "uuid": "agg-net-controller" + "uuid": "ip-transport-controller" } }, "device_operational_status": 1, @@ -334,7 +387,7 @@ "device_type": "emu-packet-router", "controller_id": { "device_uuid": { - "uuid": "agg-net-controller" + "uuid": "ip-transport-controller" } }, "device_operational_status": 1, @@ -748,6 +801,36 @@ } ], "links": [ + { + "link_id": { + "link_uuid": { + "uuid": "agg-net-controller/mgmt==ip-transport-controller/mgmt" + } + }, + "name": "agg-net-controller/mgmt==ip-transport-controller/mgmt", + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "agg-net-controller" + } + }, + "endpoint_uuid": { + "uuid": "mgmt" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "ip-transport-controller" + } + }, + "endpoint_uuid": { + "uuid": "mgmt" + } + } + ] + }, { "link_id": { "link_uuid": { @@ -841,15 +924,15 @@ { "link_id": { "link_uuid": { - "uuid": "agg-net-controller/mgmt==172.16.185.33/mgmt" + "uuid": "ip-transport-controller/mgmt==172.16.185.33/mgmt" } }, - "name": "agg-net-controller/mgmt==172.16.185.33/mgmt", + "name": "ip-transport-controller/mgmt==172.16.185.33/mgmt", "link_endpoint_ids": [ { "device_id": { "device_uuid": { - "uuid": "agg-net-controller" + "uuid": "ip-transport-controller" } }, "endpoint_uuid": { @@ -871,15 +954,15 @@ { "link_id": { "link_uuid": { - "uuid": "agg-net-controller/mgmt==172.16.185.31/mgmt" + "uuid": "ip-transport-controller/mgmt==172.16.185.31/mgmt" } }, - "name": "agg-net-controller/mgmt==172.16.185.31/mgmt", + "name": "ip-transport-controller/mgmt==172.16.185.31/mgmt", "link_endpoint_ids": [ { "device_id": { "device_uuid": { - "uuid": "agg-net-controller" + "uuid": "ip-transport-controller" } }, "endpoint_uuid": { @@ -901,15 +984,15 @@ { "link_id": { "link_uuid": { - "uuid": "agg-net-controller/mgmt==172.16.182.25/mgmt" + "uuid": "ip-transport-controller/mgmt==172.16.185.32/mgmt" } }, - "name": "agg-net-controller/mgmt==172.16.182.25/mgmt", + "name": "ip-transport-controller/mgmt==172.16.185.32/mgmt", "link_endpoint_ids": [ { "device_id": { "device_uuid": { - "uuid": "agg-net-controller" + "uuid": "ip-transport-controller" } }, "endpoint_uuid": { @@ -919,7 +1002,7 @@ { "device_id": { "device_uuid": { - "uuid": "172.16.182.25" + "uuid": "172.16.185.32" } }, "endpoint_uuid": { @@ -931,15 +1014,15 @@ { "link_id": { "link_uuid": { - "uuid": "agg-net-controller/mgmt==172.16.182.25/mgmt" + "uuid": "ip-transport-controller/mgmt==172.16.182.25/mgmt" } }, - "name": "agg-net-controller/mgmt==172.16.182.25/mgmt", + "name": "ip-transport-controller/mgmt==172.16.182.25/mgmt", "link_endpoint_ids": [ { "device_id": { "device_uuid": { - "uuid": "agg-net-controller" + "uuid": "ip-transport-controller" } }, "endpoint_uuid": { -- GitLab From 0e64c58bf464fcb0a445b9803176d4befc3bf3cc Mon Sep 17 00:00:00 2001 From: hajipour Date: Thu, 6 Feb 2025 11:11:20 +0100 Subject: [PATCH 3/7] enhancement: agg-net-descriptor.json renamed to agg-net-topology.json in nbi tests --- .../tests/data/{agg-net-descriptor.json => agg-net-topology.json} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/nbi/tests/data/{agg-net-descriptor.json => agg-net-topology.json} (100%) diff --git a/src/nbi/tests/data/agg-net-descriptor.json b/src/nbi/tests/data/agg-net-topology.json similarity index 100% rename from src/nbi/tests/data/agg-net-descriptor.json rename to src/nbi/tests/data/agg-net-topology.json -- GitLab From 32ec651fe9a648843b145d49da870b0b310c39af Mon Sep 17 00:00:00 2001 From: hajipour Date: Thu, 6 Feb 2025 11:44:46 +0100 Subject: [PATCH 4/7] debug: NCE_IP changed to NCE_PORT in ofc25 e2e test descriptor --- .../ofc25-camara-e2e-controller/data/camara-e2e-topology.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tests/ofc25-camara-e2e-controller/data/camara-e2e-topology.json b/src/tests/ofc25-camara-e2e-controller/data/camara-e2e-topology.json index 4cc5645a0..b2a8617e2 100644 --- a/src/tests/ofc25-camara-e2e-controller/data/camara-e2e-topology.json +++ b/src/tests/ofc25-camara-e2e-controller/data/camara-e2e-topology.json @@ -154,7 +154,7 @@ "action": 1, "custom": { "resource_key": "_connect/port", - "resource_value": "NCE_IP" + "resource_value": "NCE_PORT" } }, { -- GitLab From f154b297e8fe87abce766c31b798f6be78bdfdbf Mon Sep 17 00:00:00 2001 From: hajipour Date: Sun, 9 Feb 2025 18:16:42 +0100 Subject: [PATCH 5/7] enhancement: list of slice endpoints retrieved in webui depended on config rules. If the slice is related to CAMARA OFC25, retrieve the list of endpoints based on SDPs, otherwise, return the slice object's list of endpoints. --- src/webui/service/slice/routes.py | 72 +++++++++++++++++++++++++++++-- 1 file changed, 68 insertions(+), 4 deletions(-) diff --git a/src/webui/service/slice/routes.py b/src/webui/service/slice/routes.py index 922f8af96..11ed8dad7 100644 --- a/src/webui/service/slice/routes.py +++ b/src/webui/service/slice/routes.py @@ -14,10 +14,11 @@ import grpc from flask import current_app, redirect, render_template, Blueprint, flash, session, url_for -from common.proto.context_pb2 import IsolationLevelEnum, Slice, SliceId, SliceStatusEnum +from common.proto.context_pb2 import IsolationLevelEnum, Slice, SliceId, SliceStatusEnum, EndPointId from common.tools.context_queries.Context import get_context from common.tools.context_queries.EndPoint import get_endpoint_names from common.tools.context_queries.Slice import get_slice_by_uuid +from common.Constants import DEFAULT_CONTEXT_NAME from context.client.ContextClient import ContextClient from slice.client.SliceClient import SliceClient @@ -26,6 +27,67 @@ slice = Blueprint('slice', __name__, url_prefix='/slice') context_client = ContextClient() slice_client = SliceClient() + +RUNNING_RESOURCE_KEY = "running_ietf_slice" +CANDIDATE_RESOURCE_KEY = "candidate_ietf_slice" + + +class ConfigRuleNotFoundError(Exception): + ... + +def get_custom_config_rule( + service_config: ServiceConfig, resource_key: str +) -> Optional[ConfigRule]: + """ + Retrieve the custom config rule with the given resource_key from a ServiceConfig. + """ + for cr in service_config.config_rules: + if ( + cr.WhichOneof("config_rule") == "custom" + and cr.custom.resource_key == resource_key + ): + return cr + return None + + +def get_ietf_data_from_config(slice_request: Slice, resource_key: str) -> Dict: + """ + Retrieve the IETF data (as a Python dict) from a slice's config rule for the specified resource_key. + Raises an exception if not found. + """ + config_rule = get_custom_config_rule(slice_request.slice_config, resource_key) + if not config_rule: + raise ConfigRuleNotFoundError(f"IETF data not found for resource_key: {resource_key}") + return json.loads(config_rule.custom.resource_value) + + +def get_slice_endpoints(slice_obj: Slice) -> list[EndPointId]: + ''' + Get the list of endpoint ids for a slice. + If the slice has a `running_ietf_slice` config rule, return the list of endpoint ids from the config rule, + otherwise return the slice's list of endpoint ids. + ''' + try: + running_ietf_data = get_ietf_data_from_config(slice_obj, RUNNING_RESOURCE_KEY) + slice_service = running_ietf_data["network-slice-services"]["slice-service"][0] + slice_sdps = slice_service["sdps"]["sdp"] + list_endpoint_ids = [] + for sdp in slice_sdps: + endpoint = EndPointId() + endpoint.topology_id.context_id.context_uuid.uuid = DEFAULT_CONTEXT_NAME + device_uuid = sdp["node-id"] + endpoint.device_id.device_uuid.uuid = device_uuid + attachment_circuits = sdp["attachment-circuits"]["attachment-circuit"] + endpoint_uuid = attachment_circuits[0]["ac-tp-id"] + endpoint.endpoint_uuid.uuid = endpoint_uuid + list_endpoint_ids.append(endpoint) + + except ConfigRuleNotFoundError: + # The slice does not have `running_ietf_slice` config rule, return slice's list of endpoint ids + list_endpoint_ids = slice_obj.slice_endpoint_ids + + return list_endpoint_ids + @slice.get('/') def home(): if 'context_uuid' not in session or 'topology_uuid' not in session: @@ -50,7 +112,8 @@ def home(): else: endpoint_ids = list() for slice_ in slices: - endpoint_ids.extend(slice_.slice_endpoint_ids) + slice_endpoint_ids = get_slice_endpoints(slice_) + endpoint_ids.extend(slice_endpoint_ids) device_names, endpoints_data = get_endpoint_names(context_client, endpoint_ids) context_client.close() @@ -81,7 +144,8 @@ def detail(slice_uuid: str): flash('Context({:s})/Slice({:s}) not found'.format(str(context_uuid), str(slice_uuid)), 'danger') slice_obj = Slice() else: - device_names, endpoints_data = get_endpoint_names(context_client, slice_obj.slice_endpoint_ids) + slice_endpoint_ids = get_slice_endpoints(slice_obj) + device_names, endpoints_data = get_endpoint_names(context_client, slice_endpoint_ids) context_client.close() @@ -111,5 +175,5 @@ def delete(slice_uuid: str): flash('Slice "{:s}" deleted successfully!'.format(slice_uuid), 'success') except Exception as e: flash('Problem deleting slice "{:s}": {:s}'.format(slice_uuid, str(e.details())), 'danger') - current_app.logger.exception(e) + current_app.logger.exception(e) return redirect(url_for('slice.home')) -- GitLab From 38f0e5aa39ebb85c682bf4fec046bc74c0458b60 Mon Sep 17 00:00:00 2001 From: hajipour Date: Sun, 9 Feb 2025 18:34:31 +0100 Subject: [PATCH 6/7] debug: - missing imports added to slice webui router - service names changed to slice --- src/webui/service/slice/routes.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/webui/service/slice/routes.py b/src/webui/service/slice/routes.py index 11ed8dad7..dd23e6469 100644 --- a/src/webui/service/slice/routes.py +++ b/src/webui/service/slice/routes.py @@ -12,9 +12,11 @@ # See the License for the specific language governing permissions and # limitations under the License. +import json +from typing import Dict, Optional import grpc from flask import current_app, redirect, render_template, Blueprint, flash, session, url_for -from common.proto.context_pb2 import IsolationLevelEnum, Slice, SliceId, SliceStatusEnum, EndPointId +from common.proto.context_pb2 import IsolationLevelEnum, Slice, SliceId, SliceStatusEnum, EndPointId, SliceConfig, ConfigRule from common.tools.context_queries.Context import get_context from common.tools.context_queries.EndPoint import get_endpoint_names from common.tools.context_queries.Slice import get_slice_by_uuid @@ -36,12 +38,12 @@ class ConfigRuleNotFoundError(Exception): ... def get_custom_config_rule( - service_config: ServiceConfig, resource_key: str + slice_config: SliceConfig, resource_key: str ) -> Optional[ConfigRule]: """ Retrieve the custom config rule with the given resource_key from a ServiceConfig. """ - for cr in service_config.config_rules: + for cr in slice_config.config_rules: if ( cr.WhichOneof("config_rule") == "custom" and cr.custom.resource_key == resource_key -- GitLab From 71b7936a8ca53a69635323d9c4ab8a7a23831bfe Mon Sep 17 00:00:00 2001 From: hajipour Date: Mon, 10 Feb 2025 10:32:19 +0100 Subject: [PATCH 7/7] debug: - mutliple endpoint list shown in webui of OFC25 CAMARA demo --- src/webui/service/slice/routes.py | 38 +++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/src/webui/service/slice/routes.py b/src/webui/service/slice/routes.py index dd23e6469..f56c50f46 100644 --- a/src/webui/service/slice/routes.py +++ b/src/webui/service/slice/routes.py @@ -13,13 +13,14 @@ # limitations under the License. import json -from typing import Dict, Optional +from typing import Dict, Optional, Tuple import grpc from flask import current_app, redirect, render_template, Blueprint, flash, session, url_for +from common.method_wrappers.ServiceExceptions import InvalidArgumentsException from common.proto.context_pb2 import IsolationLevelEnum, Slice, SliceId, SliceStatusEnum, EndPointId, SliceConfig, ConfigRule from common.tools.context_queries.Context import get_context from common.tools.context_queries.EndPoint import get_endpoint_names -from common.tools.context_queries.Slice import get_slice_by_uuid +from common.tools.context_queries.Slice import get_slice_by_uuid, get_uuid_from_string from common.Constants import DEFAULT_CONTEXT_NAME from context.client.ContextClient import ContextClient from slice.client.SliceClient import SliceClient @@ -63,6 +64,25 @@ def get_ietf_data_from_config(slice_request: Slice, resource_key: str) -> Dict: return json.loads(config_rule.custom.resource_value) +def endpoint_get_uuid( + endpoint_id : EndPointId, endpoint_name : str = '', allow_random : bool = False +) -> Tuple[str, str, str]: + device_uuid = endpoint_id.device_id.device_uuid.uuid + topology_uuid = endpoint_id.topology_id.topology_uuid.uuid + raw_endpoint_uuid = endpoint_id.endpoint_uuid.uuid + + if len(raw_endpoint_uuid) > 0: + prefix_for_name = '{:s}/{:s}'.format(topology_uuid, device_uuid) + return topology_uuid, device_uuid, get_uuid_from_string(raw_endpoint_uuid, prefix_for_name=prefix_for_name) + if len(endpoint_name) > 0: + prefix_for_name = '{:s}/{:s}'.format(topology_uuid, device_uuid) + return topology_uuid, device_uuid, get_uuid_from_string(endpoint_name, prefix_for_name=prefix_for_name) + + raise InvalidArgumentsException([ + ('endpoint_id.endpoint_uuid.uuid', raw_endpoint_uuid), + ('name', endpoint_name), + ], extra_details=['At least one is required to produce a EndPoint UUID']) + def get_slice_endpoints(slice_obj: Slice) -> list[EndPointId]: ''' Get the list of endpoint ids for a slice. @@ -70,19 +90,27 @@ def get_slice_endpoints(slice_obj: Slice) -> list[EndPointId]: otherwise return the slice's list of endpoint ids. ''' try: + first_slice_endpoint_id = slice_obj.slice_endpoint_ids[0] + topology_uuid = first_slice_endpoint_id.topology_id.topology_uuid.uuid + context_uuid = slice_obj.slice_id.context_id.context_uuid.uuid running_ietf_data = get_ietf_data_from_config(slice_obj, RUNNING_RESOURCE_KEY) slice_service = running_ietf_data["network-slice-services"]["slice-service"][0] slice_sdps = slice_service["sdps"]["sdp"] list_endpoint_ids = [] for sdp in slice_sdps: endpoint = EndPointId() - endpoint.topology_id.context_id.context_uuid.uuid = DEFAULT_CONTEXT_NAME - device_uuid = sdp["node-id"] + endpoint.topology_id.context_id.context_uuid.uuid = context_uuid + endpoint.topology_id.topology_uuid.uuid = topology_uuid + device_uuid = get_uuid_from_string(sdp["node-id"]) endpoint.device_id.device_uuid.uuid = device_uuid attachment_circuits = sdp["attachment-circuits"]["attachment-circuit"] - endpoint_uuid = attachment_circuits[0]["ac-tp-id"] + endpoint_name = attachment_circuits[0]["ac-tp-id"] + endpoint.endpoint_uuid.uuid = endpoint_name + _, _, endpoint_uuid = endpoint_get_uuid(endpoint) endpoint.endpoint_uuid.uuid = endpoint_uuid list_endpoint_ids.append(endpoint) + del slice_obj.slice_endpoint_ids[:] + slice_obj.slice_endpoint_ids.extend(list_endpoint_ids) except ConfigRuleNotFoundError: # The slice does not have `running_ietf_slice` config rule, return slice's list of endpoint ids -- GitLab