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): ...@@ -27,7 +27,7 @@ class AddDeviceForm(FlaskForm):
# choices=[(-1, 'Select...'), (0, 'Undefined'), (1, 'Disabled'), (2, 'Enabled')], # choices=[(-1, 'Select...'), (0, 'Undefined'), (1, 'Disabled'), (2, 'Enabled')],
coerce=int, coerce=int,
validators=[NumberRange(min=0)]) validators=[NumberRange(min=0)])
device_drivers_undefined = BooleanField('UNDEFINED') device_drivers_undefined = BooleanField('UNDEFINED / EMULATED')
device_drivers_openconfig = BooleanField('OPENCONFIG') device_drivers_openconfig = BooleanField('OPENCONFIG')
device_drivers_transport_api = BooleanField('TRANSPORT_API') device_drivers_transport_api = BooleanField('TRANSPORT_API')
device_drivers_p4 = BooleanField('P4') device_drivers_p4 = BooleanField('P4')
......
...@@ -12,14 +12,12 @@ ...@@ -12,14 +12,12 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
import json
from flask import current_app, render_template, Blueprint, flash, session, redirect, url_for from flask import current_app, render_template, Blueprint, flash, session, redirect, url_for
from common.proto.context_pb2 import ( from common.proto.context_pb2 import (
ConfigActionEnum, ConfigRule, ConfigActionEnum, Device, DeviceDriverEnum, DeviceId, DeviceList, DeviceOperationalStatusEnum, Empty, TopologyId)
Device, DeviceDriverEnum, DeviceId, DeviceList, DeviceOperationalStatusEnum,
Empty, TopologyId, ContextId)
from common.tools.object_factory.Context import json_context_id from common.tools.object_factory.Context import json_context_id
from common.tools.object_factory.Topology import json_topology_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 context.client.ContextClient import ContextClient
from device.client.DeviceClient import DeviceClient from device.client.DeviceClient import DeviceClient
from webui.service.device.forms import AddDeviceForm from webui.service.device.forms import AddDeviceForm
...@@ -62,7 +60,7 @@ def add(): ...@@ -62,7 +60,7 @@ def add():
# listing enum values # listing enum values
form.operational_status.choices = [] 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( form.operational_status.choices.append(
(DeviceOperationalStatusEnum.Value(key), key.replace('DEVICEOPERATIONALSTATUS_', ''))) (DeviceOperationalStatusEnum.Value(key), key.replace('DEVICEOPERATIONALSTATUS_', '')))
...@@ -71,58 +69,61 @@ def add(): ...@@ -71,58 +69,61 @@ def add():
form.device_type.choices.append((device_type.value,device_type.value)) form.device_type.choices.append((device_type.value,device_type.value))
if form.validate_on_submit(): if form.validate_on_submit():
device = Device() device_obj = Device()
# Device UUID: # 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 type:
device.device_type = str(form.device_type.data) device_obj.device_type = str(form.device_type.data)
# Device configurations: # 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.action = ConfigActionEnum.CONFIGACTION_SET
config_rule.custom.resource_key = '_connect/address' config_rule.custom.resource_key = '_connect/address'
config_rule.custom.resource_value = form.device_config_address.data 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.action = ConfigActionEnum.CONFIGACTION_SET
config_rule.custom.resource_key = '_connect/port' config_rule.custom.resource_key = '_connect/port'
config_rule.custom.resource_value = form.device_config_port.data 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.action = ConfigActionEnum.CONFIGACTION_SET
config_rule.custom.resource_key = '_connect/settings' 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 status:
device.device_operational_status = form.operational_status.data device_obj.device_operational_status = form.operational_status.data
# Device drivers: # Device drivers:
if form.device_drivers_undefined.data: 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: 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: 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: 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: 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: 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: if form.device_drivers_xr.data:
device.device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_XR) device_obj.device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_XR)
try: try:
device_client.connect() device_client.connect()
response: DeviceId = device_client.AddDevice(device) response: DeviceId = device_client.AddDevice(device_obj)
device_client.close() 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') flash(f'New device was created with ID "{response.device_uuid.uuid}".', 'success')
return redirect(url_for('device.home')) return redirect(url_for('device.home'))
except Exception as e: 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