Skip to content
Snippets Groups Projects
Commit 15d73a69 authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

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
parent 5a3b9248
No related branches found
No related tags found
2 merge requests!54Release 2.0.0,!45Bug fixes and improvements related to device configuration and monitoring
......@@ -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')
......
......@@ -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:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment