From 49aa2da810885789c97ce9083f59a2df0da5b25f Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 18 Mar 2025 14:00:10 +0000
Subject: [PATCH] WebUI component:

- Implemented vlink removal
- Added sanity checks in device and link removal
---
 src/webui/service/device/routes.py | 27 ++++++++++++++-------------
 src/webui/service/link/routes.py   | 24 +++++++++++++-----------
 2 files changed, 27 insertions(+), 24 deletions(-)

diff --git a/src/webui/service/device/routes.py b/src/webui/service/device/routes.py
index 16b86c769..977f0ec4b 100644
--- a/src/webui/service/device/routes.py
+++ b/src/webui/service/device/routes.py
@@ -184,20 +184,21 @@ def logical(device_uuid: str):
 @device.get('<path:device_uuid>/delete')
 def delete(device_uuid):
     try:
+        context_client.connect()
+
+        device_obj = get_device(
+            context_client, device_uuid, rw_copy=False, include_components=False,
+            include_config_rules=False, include_endpoints=False
+        )
+        if device_obj is None:
+            flash('Device({:s}) not found'.format(str(device_uuid)), 'danger')
+        else:
+            device_client.connect()
+            device_client.DeleteDevice(device_obj.device_id)
+            device_client.close()
+            flash(f'Device "{device_uuid}" deleted successfully!', 'success')
 
-        # first, check if device exists!
-        # request: DeviceId = DeviceId()
-        # request.device_uuid.uuid = device_uuid
-        # response: Device = client.GetDevice(request)
-        # TODO: finalize implementation
-
-        request = DeviceId()
-        request.device_uuid.uuid = device_uuid # pylint: disable=no-member
-        device_client.connect()
-        device_client.DeleteDevice(request)
-        device_client.close()
-
-        flash(f'Device "{device_uuid}" deleted successfully!', 'success')
+        context_client.close()
     except Exception as e: # pylint: disable=broad-except
         flash(f'Problem deleting device "{device_uuid}": {e.details()}', 'danger')
         current_app.logger.exception(e)
diff --git a/src/webui/service/link/routes.py b/src/webui/service/link/routes.py
index 42f5984a3..34b2af27f 100644
--- a/src/webui/service/link/routes.py
+++ b/src/webui/service/link/routes.py
@@ -21,10 +21,12 @@ from common.tools.context_queries.EndPoint import get_endpoint_names
 from common.tools.context_queries.Link import get_link
 from common.tools.context_queries.Topology import get_topology
 from context.client.ContextClient import ContextClient
+from vnt_manager.client.VNTManagerClient import VNTManagerClient
 
 
 link = Blueprint('link', __name__, url_prefix='/link')
 context_client = ContextClient()
+vntm_client = VNTManagerClient()
 
 @link.get('/')
 def home():
@@ -77,20 +79,20 @@ def detail(link_uuid: str):
 @link.get('<path:link_uuid>/delete')
 def delete(link_uuid):
     try:
+        context_client.connect()
 
-        # first, check if link exists!
-        # request: LinkId = LinkId()
-        # request.link_uuid.uuid = link_uuid
-        # response: Link = client.GetLink(request)
-        # TODO: finalize implementation
+        link_obj = get_link(context_client, link_uuid, rw_copy=False)
+        if link_obj is None:
+            flash('Link({:s}) not found'.format(str(link_uuid)), 'danger')
+        else:
+            link_type = link_obj.link_type
+            if link_type == LinkTypeEnum.LINKTYPE_VIRTUAL:
+                vntm_client.RemoveVirtualLink(link_obj.link_id)
+            else:
+                context_client.RemoveLink(link_obj.link_id)
+            flash(f'Link "{link_uuid}" deleted successfully!', 'success')
 
-        request = LinkId()
-        request.link_uuid.uuid = link_uuid # pylint: disable=no-member
-        context_client.connect()
-        context_client.RemoveLink(request)
         context_client.close()
-
-        flash(f'Link "{link_uuid}" deleted successfully!', 'success')
     except Exception as e: # pylint: disable=broad-except
         flash(f'Problem deleting link "{link_uuid}": {e.details()}', 'danger')
         current_app.logger.exception(e)
-- 
GitLab