From 15d73a69bdb13f83905142e352323b9f483a226c Mon Sep 17 00:00:00 2001 From: gifrerenom <lluis.gifre@cttc.es> Date: Tue, 31 Jan 2023 12:15:14 +0000 Subject: [PATCH] WebUI component: - improved name of drivers in AddDevice form - removed variable name collision in add device logic - improved logic to parse connect settings from WebUI --- src/webui/service/device/forms.py | 2 +- src/webui/service/device/routes.py | 55 +++++++++++++++--------------- 2 files changed, 29 insertions(+), 28 deletions(-) diff --git a/src/webui/service/device/forms.py b/src/webui/service/device/forms.py index cfa741ab3..e0af206b2 100644 --- a/src/webui/service/device/forms.py +++ b/src/webui/service/device/forms.py @@ -27,7 +27,7 @@ class AddDeviceForm(FlaskForm): # choices=[(-1, 'Select...'), (0, 'Undefined'), (1, 'Disabled'), (2, 'Enabled')], coerce=int, validators=[NumberRange(min=0)]) - device_drivers_undefined = BooleanField('UNDEFINED') + device_drivers_undefined = BooleanField('UNDEFINED / EMULATED') device_drivers_openconfig = BooleanField('OPENCONFIG') device_drivers_transport_api = BooleanField('TRANSPORT_API') device_drivers_p4 = BooleanField('P4') diff --git a/src/webui/service/device/routes.py b/src/webui/service/device/routes.py index 140efe4b0..baff30348 100644 --- a/src/webui/service/device/routes.py +++ b/src/webui/service/device/routes.py @@ -12,14 +12,12 @@ # See the License for the specific language governing permissions and # limitations under the License. +import json from flask import current_app, render_template, Blueprint, flash, session, redirect, url_for from common.proto.context_pb2 import ( - ConfigActionEnum, ConfigRule, - Device, DeviceDriverEnum, DeviceId, DeviceList, DeviceOperationalStatusEnum, - Empty, TopologyId, ContextId) + ConfigActionEnum, Device, DeviceDriverEnum, DeviceId, DeviceList, DeviceOperationalStatusEnum, Empty, TopologyId) from common.tools.object_factory.Context import json_context_id from common.tools.object_factory.Topology import json_topology_id -from common.tools.context_queries.Device import add_device_to_topology from context.client.ContextClient import ContextClient from device.client.DeviceClient import DeviceClient from webui.service.device.forms import AddDeviceForm @@ -62,7 +60,7 @@ def add(): # listing enum values form.operational_status.choices = [] - for key, value in DeviceOperationalStatusEnum.DESCRIPTOR.values_by_name.items(): + for key, _ in DeviceOperationalStatusEnum.DESCRIPTOR.values_by_name.items(): form.operational_status.choices.append( (DeviceOperationalStatusEnum.Value(key), key.replace('DEVICEOPERATIONALSTATUS_', ''))) @@ -71,58 +69,61 @@ def add(): form.device_type.choices.append((device_type.value,device_type.value)) if form.validate_on_submit(): - device = Device() + device_obj = Device() # Device UUID: - device.device_id.device_uuid.uuid = form.device_id.data + device_obj.device_id.device_uuid.uuid = form.device_id.data # Device type: - device.device_type = str(form.device_type.data) + device_obj.device_type = str(form.device_type.data) # Device configurations: - config_rule = device.device_config.config_rules.add() + config_rule = device_obj.device_config.config_rules.add() config_rule.action = ConfigActionEnum.CONFIGACTION_SET config_rule.custom.resource_key = '_connect/address' config_rule.custom.resource_value = form.device_config_address.data - config_rule = device.device_config.config_rules.add() + config_rule = device_obj.device_config.config_rules.add() config_rule.action = ConfigActionEnum.CONFIGACTION_SET config_rule.custom.resource_key = '_connect/port' config_rule.custom.resource_value = form.device_config_port.data - config_rule = device.device_config.config_rules.add() + config_rule = device_obj.device_config.config_rules.add() config_rule.action = ConfigActionEnum.CONFIGACTION_SET config_rule.custom.resource_key = '_connect/settings' - config_rule.custom.resource_value = form.device_config_settings.data + + try: + device_config_settings = json.loads(form.device_config_settings.data) + except: # pylint: disable=bare-except + device_config_settings = form.device_config_settings.data + + if isinstance(device_config_settings, dict): + config_rule.custom.resource_value = json.dumps(device_config_settings) + else: + config_rule.custom.resource_value = str(device_config_settings) # Device status: - device.device_operational_status = form.operational_status.data + device_obj.device_operational_status = form.operational_status.data # Device drivers: if form.device_drivers_undefined.data: - device.device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_UNDEFINED) + device_obj.device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_UNDEFINED) if form.device_drivers_openconfig.data: - device.device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_OPENCONFIG) + device_obj.device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_OPENCONFIG) if form.device_drivers_transport_api.data: - device.device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_TRANSPORT_API) + device_obj.device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_TRANSPORT_API) if form.device_drivers_p4.data: - device.device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_P4) + device_obj.device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_P4) if form.device_drivers_ietf_network_topology.data: - device.device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_IETF_NETWORK_TOPOLOGY) + device_obj.device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_IETF_NETWORK_TOPOLOGY) if form.device_drivers_onf_tr_352.data: - device.device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_ONF_TR_352) + device_obj.device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_ONF_TR_352) if form.device_drivers_xr.data: - device.device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_XR) + device_obj.device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_XR) try: device_client.connect() - response: DeviceId = device_client.AddDevice(device) + response: DeviceId = device_client.AddDevice(device_obj) device_client.close() - context_uuid = session['context_uuid'] - topology_uuid = session['topology_uuid'] - context_client.connect() - context_id = ContextId(**json_context_id(context_uuid)) - add_device_to_topology(context_client, context_id, topology_uuid, device.device_id.device_uuid.uuid) - context_client.close() flash(f'New device was created with ID "{response.device_uuid.uuid}".', 'success') return redirect(url_for('device.home')) except Exception as e: -- GitLab