From c0edbf1ee7ceb3939e2197042279c4775c98b42c Mon Sep 17 00:00:00 2001 From: gifrerenom <lluis.gifre@cttc.es> Date: Wed, 6 Mar 2024 19:00:49 +0000 Subject: [PATCH] Optical component: - Pre-merge cleanup --- proto/context.proto | 4 +- proto/openconfig_device.proto | 1 - .../service/ContextServiceServicerImpl.py | 2 +- src/device/service/DeviceService.py | 1 - .../service/DeviceServiceServicerImpl.py | 20 +++---- src/device/service/OpenConfigServicer.py | 56 +++---------------- src/device/service/drivers/__init__.py | 8 +-- .../drivers/oc_driver/templates/Tools.py | 1 + 8 files changed, 26 insertions(+), 67 deletions(-) diff --git a/proto/context.proto b/proto/context.proto index a734b3a96..8a6b019dc 100644 --- a/proto/context.proto +++ b/proto/context.proto @@ -211,8 +211,8 @@ enum DeviceDriverEnum { DEVICEDRIVER_XR = 6; DEVICEDRIVER_IETF_L2VPN = 7; DEVICEDRIVER_GNMI_OPENCONFIG = 8; - DEVICEDRIVER_IETF_ACTN = 9; - DEVICEDRIVER_FLEXSCALE = 10; + DEVICEDRIVER_FLEXSCALE = 9; + DEVICEDRIVER_IETF_ACTN = 10; DEVICEDRIVER_OC = 11; } diff --git a/proto/openconfig_device.proto b/proto/openconfig_device.proto index c622c77e4..913ac247e 100644 --- a/proto/openconfig_device.proto +++ b/proto/openconfig_device.proto @@ -16,7 +16,6 @@ syntax = "proto3"; package openconfig_device; import "context.proto"; -import "monitoring.proto"; service OpenConfigService { rpc AddOpenConfigDevice (context.OpticalConfig) returns (context.OpticalConfigId) {} diff --git a/src/context/service/ContextServiceServicerImpl.py b/src/context/service/ContextServiceServicerImpl.py index de6b02a56..a102fa176 100644 --- a/src/context/service/ContextServiceServicerImpl.py +++ b/src/context/service/ContextServiceServicerImpl.py @@ -45,7 +45,7 @@ from .database.Slice import ( slice_delete, slice_get, slice_list_ids, slice_list_objs, slice_select, slice_set, slice_unset) from .database.Topology import ( topology_delete, topology_get, topology_get_details, topology_list_ids, topology_list_objs, topology_set) -from .database.OpticalConfig import (set_opticalconfig,select_opticalconfig,get_opticalconfig) +from .database.OpticalConfig import set_opticalconfig, select_opticalconfig, get_opticalconfig LOGGER = logging.getLogger(__name__) diff --git a/src/device/service/DeviceService.py b/src/device/service/DeviceService.py index 544f250f6..c7868e445 100644 --- a/src/device/service/DeviceService.py +++ b/src/device/service/DeviceService.py @@ -39,7 +39,6 @@ class DeviceService(GenericGrpcService): self.monitoring_loops.start() add_DeviceServiceServicer_to_server(self.device_servicer, self.server) add_OpenConfigServiceServicer_to_server(self.openconfig_device_servicer,self.server) - def stop(self): super().stop() diff --git a/src/device/service/DeviceServiceServicerImpl.py b/src/device/service/DeviceServiceServicerImpl.py index 6abb06dd0..76fb65454 100644 --- a/src/device/service/DeviceServiceServicerImpl.py +++ b/src/device/service/DeviceServiceServicerImpl.py @@ -20,7 +20,9 @@ from common.Settings import ENVVAR_SUFIX_SERVICE_HOST, get_env_var_name from common.method_wrappers.Decorator import MetricTypeEnum, MetricsPool, safe_and_metered_rpc_method from common.method_wrappers.ServiceExceptions import NotFoundException, OperationFailedException from common.proto.context_pb2 import ( - Device, DeviceConfig, DeviceDriverEnum, DeviceId, DeviceOperationalStatusEnum, Empty, Link,OpticalConfig,OpticalConfigId) + Device, DeviceConfig, DeviceDriverEnum, DeviceId, DeviceOperationalStatusEnum, Empty, Link, + OpticalConfig, OpticalConfigId +) from common.proto.device_pb2 import MonitoringSettings from common.proto.device_pb2_grpc import DeviceServiceServicer from common.tools.context_queries.Device import get_device @@ -54,15 +56,14 @@ class DeviceServiceServicerImpl(DeviceServiceServicer): @safe_and_metered_rpc_method(METRICS_POOL, LOGGER) def AddDevice(self, request : Device, context : grpc.ServicerContext) -> DeviceId: - t0 = time.time() device_uuid = request.device_id.device_uuid.uuid connection_config_rules = check_connect_rules(request.device_config) - if (request.device_drivers[0]!= DeviceDriverEnum.DEVICEDRIVER_OC) : + if request.device_drivers[0] != DeviceDriverEnum.DEVICEDRIVER_OC: check_no_endpoints(request.device_endpoints) - + t1 = time.time() context_client = ContextClient() @@ -143,13 +144,12 @@ class DeviceServiceServicerImpl(DeviceServiceServicer): device.device_operational_status = DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_ENABLED # temporary line - if (request.device_drivers[0]== DeviceDriverEnum.DEVICEDRIVER_OC and len(request.device_endpoints)>0): - - for endpoint in request.device_endpoints: - #endpoint.endpoint_id.device_id.CopyFrom(device.device_id) - pass + if request.device_drivers[0] == DeviceDriverEnum.DEVICEDRIVER_OC and len(request.device_endpoints) > 0: + #for endpoint in request.device_endpoints: + # #endpoint.endpoint_id.device_id.CopyFrom(device.device_id) + # pass device.device_endpoints.extend(request.device_endpoints) - + device_id = context_client.SetDevice(device) t10 = time.time() diff --git a/src/device/service/OpenConfigServicer.py b/src/device/service/OpenConfigServicer.py index fc4e75e67..1060449f1 100644 --- a/src/device/service/OpenConfigServicer.py +++ b/src/device/service/OpenConfigServicer.py @@ -12,16 +12,12 @@ # See the License for the specific language governing permissions and # limitations under the License. -import grpc, logging, os, time,json -from typing import Dict -from prometheus_client import Histogram -from common.Constants import ServiceNameEnum -from common.Settings import ENVVAR_SUFIX_SERVICE_HOST, get_env_var_name -from common.method_wrappers.Decorator import MetricTypeEnum, MetricsPool, safe_and_metered_rpc_method -from common.method_wrappers.ServiceExceptions import NotFoundException, OperationFailedException +import grpc, logging, json +from common.method_wrappers.Decorator import MetricsPool, safe_and_metered_rpc_method +from common.method_wrappers.ServiceExceptions import NotFoundException from common.proto.context_pb2 import ( - Device, DeviceConfig, DeviceDriverEnum, DeviceId, DeviceOperationalStatusEnum, Empty, Link,OpticalConfig,OpticalConfigId ,OpticalConfig,OpticalConfigList) -from common.proto.device_pb2 import MonitoringSettings + Device, DeviceId, DeviceOperationalStatusEnum, Empty, OpticalConfig, OpticalConfig +) from common.proto.device_pb2_grpc import DeviceServiceServicer from common.tools.context_queries.Device import get_device from common.tools.mutex_queues.MutexQueues import MutexQueues @@ -29,13 +25,8 @@ from context.client.ContextClient import ContextClient from .driver_api._Driver import _Driver from .driver_api.DriverInstanceCache import DriverInstanceCache, get_driver from .monitoring.MonitoringLoops import MonitoringLoops -from .drivers.oc_driver.OCDriver import OCDriver -from .ErrorMessages import ERROR_MISSING_DRIVER, ERROR_MISSING_KPI from .Tools import extract_resources -from .Tools import ( - check_connect_rules, check_no_endpoints, compute_rules_to_add_delete, configure_rules, deconfigure_rules, - get_device_controller_uuid, populate_config_rules, populate_endpoint_monitoring_resources, populate_endpoints, - populate_initial_config_rules, subscribe_kpi, unsubscribe_kpi, update_endpoints) +from .Tools import check_no_endpoints LOGGER = logging.getLogger(__name__) @@ -52,12 +43,10 @@ class OpenConfigServicer(DeviceServiceServicer): self.monitoring_loops = monitoring_loops self.mutex_queues = MutexQueues() LOGGER.debug('Servicer Created') - + @safe_and_metered_rpc_method(METRICS_POOL, LOGGER) def AddOpenConfigDevice(self, request : OpticalConfig, context : grpc.ServicerContext) -> DeviceId: - device_uuid = request.device_id.device_uuid.uuid - check_no_endpoints(request.device_endpoints) context_client = ContextClient() @@ -78,56 +67,29 @@ class OpenConfigServicer(DeviceServiceServicer): # update device_uuid to honor UUID provided by Context device_uuid = device.device_id.device_uuid.uuid - - - self.mutex_queues.wait_my_turn(device_uuid) - try: - device_id = context_client.SetDevice(device) except Exception as error : LOGGER.debug("error %s",error) - - - - #modified Andrea @safe_and_metered_rpc_method(METRICS_POOL, LOGGER) - def ConfigureOpticalDevice (self, request : OpticalConfig, context:grpc.ServicerContext) -> Empty: - + def ConfigureOpticalDevice (self, request : OpticalConfig, context : grpc.ServicerContext) -> Empty: device_uuid = request.opticalconfig_id.opticalconfig_uuid - resources=[] - result=None - config =json.loads(request.config) - - - try: - context_client = ContextClient() - device = get_device( context_client, device_uuid, rw_copy=True, include_endpoints=True, include_components=False, include_config_rules=False) - if device is None: - raise NotFoundException('Device', device_uuid, extra_details='loading in ConfigureDevice') resources,conditions=extract_resources(config=config,device=device) driver : _Driver = get_driver(self.driver_instance_cache, device) - result = driver.SetConfig(resources=resources,conditions=conditions) - #todo - #add a control with the NETCONF get + #TODO: add a control with the NETCONF get #driver.GetConfig(resource_keys=filter_fields) - except Exception as e: LOGGER.info("error in configuring %s",e) - - - return Empty() - \ No newline at end of file diff --git a/src/device/service/drivers/__init__.py b/src/device/service/drivers/__init__.py index 4c0a89ebd..1e8cff605 100644 --- a/src/device/service/drivers/__init__.py +++ b/src/device/service/drivers/__init__.py @@ -167,19 +167,17 @@ if LOAD_ALL_DEVICE_DRIVERS: FilterFieldEnum.DRIVER: DeviceDriverEnum.DEVICEDRIVER_FLEXSCALE, } ])) + if LOAD_ALL_DEVICE_DRIVERS: from .oc_driver.OCDriver import OCDriver # pylint: disable=wrong-import-position DRIVERS.append( (OCDriver, [ - { # Real Packet Router, specifying OpenConfig Driver => use OpenConfigDriver - FilterFieldEnum.DEVICE_TYPE:[ - + FilterFieldEnum.DEVICE_TYPE: [ DeviceTypeEnum.OPTICAL_ROADM, DeviceTypeEnum.OPTICAL_TRANSPONDER - - ], + ], FilterFieldEnum.DRIVER : DeviceDriverEnum.DEVICEDRIVER_OC, } ])) diff --git a/src/device/service/drivers/oc_driver/templates/Tools.py b/src/device/service/drivers/oc_driver/templates/Tools.py index 1af7b9b7f..909bdd83b 100644 --- a/src/device/service/drivers/oc_driver/templates/Tools.py +++ b/src/device/service/drivers/oc_driver/templates/Tools.py @@ -11,6 +11,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. + import re,logging import json import lxml.etree as ET -- GitLab