Skip to content
Snippets Groups Projects

Resolve: "(CNIT) Multi-Granular Optical Nodes and Optical Transpoders management"

Merged Lluis Gifre Renom requested to merge cnit_related_activity into develop
Compare and Show latest version
28 files
+ 206
2414
Compare changes
  • Side-by-side
  • Inline
Files
28
@@ -16,7 +16,8 @@ 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, DeviceId, DeviceOperationalStatusEnum, Empty, OpticalConfig, OpticalConfig,OpticalConfigList,EndPoint
Device, DeviceId, DeviceOperationalStatusEnum, Empty, OpticalConfig,
OpticalConfig, OpticalConfigList
)
from common.proto.device_pb2_grpc import DeviceServiceServicer
from common.tools.context_queries.Device import get_device
@@ -25,7 +26,7 @@ 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 .Tools import extract_resources , get_endpoint_matching
from .Tools import extract_resources
from .Tools import check_no_endpoints
LOGGER = logging.getLogger(__name__)
@@ -76,104 +77,84 @@ class OpenConfigServicer(DeviceServiceServicer):
@safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
def ConfigureOpticalDevice (self, request : OpticalConfig, context : grpc.ServicerContext) -> Empty:
device_uuid = request.device_id.device_uuid.uuid
resources:list[dict]=[]
is_all_good=True
config =json.loads(request.config)
results=None
resources : list[dict] = []
is_all_good = True
config = json.loads(request.config)
results = None
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)
resources, conditions = extract_resources(config=config, device=device)
driver : _Driver = get_driver(self.driver_instance_cache, device)
results = driver.SetConfig(resources=resources,conditions=conditions)
for result in results:
if not result :
is_all_good=False
is_all_good = False
if is_all_good:
#driver.GetConfig(resource_keys=[])
config = json.loads(request.config)
handled_flow=next((i for i in resources if i['resource_key']=='handled_flow'),None)
flow_handled=[ ]
if handled_flow is not None and len(handled_flow)>0:
config['flow_handled']=handled_flow['value']
handled_flow = next((i for i in resources if i['resource_key'] == 'handled_flow'), None)
if handled_flow is not None and len(handled_flow) > 0:
config['flow_handled'] = handled_flow['value']
request.config=json.dumps(config)
context_client.UpdateOpticalConfig(request)
context_client.close()
except Exception as e:
LOGGER.info("error in configuring %s",e)
LOGGER.info("error in configuring %s",e)
return Empty()
@safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
def GetDeviceConfiguration (self, request : OpticalConfigList, context : grpc.ServicerContext) -> Empty:
context_client = ContextClient()
for configs in request.opticalconfigs:
for configs in request.opticalconfigs:
device_uuid = configs.device_id.device_uuid.uuid
try:
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')
driver : _Driver = get_driver(self.driver_instance_cache, device)
results = driver.GetConfig(resource_keys=[])
for resource_data in results :
resource_key, resource_value = resource_data
if resource_key.startswith('/opticalconfigs/opticalconfig/'):
if 'opticalconfig' in resource_value:
context_client.SetOpticalConfig(resource_value['opticalconfig'])
context_client.SetOpticalConfig(resource_value['opticalconfig'])
#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)
LOGGER.info("error in configuring %s",e)
context_client.close()
return Empty()
@safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
def DisableOpticalDevice (self, request : OpticalConfig, context : grpc.ServicerContext) -> Empty:
roadm_configuration=None
roadm_configuration = None
device_uuid = request.device_id.device_uuid.uuid
resources:list[dict]=[]
is_all_good=True
config =json.loads(request.config)
resources : list[dict] = []
is_all_good = True
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)
resources, conditions = extract_resources(config=config, device=device)
driver : _Driver = get_driver(self.driver_instance_cache, device)
if 'edit_type' in conditions and conditions['edit_type'] == 'optical-band':
@@ -181,22 +162,17 @@ class OpenConfigServicer(DeviceServiceServicer):
for resource_data in roadm_configuration:
resource_key, resource_value = resource_data
if resource_key.startswith('/opticalconfigs/opticalconfig/'):
roadm_configuration=resource_value["opticalconfig"]
roadm_configuration=resource_value["opticalconfig"]
results = driver.DeleteConfig(resources=resources,conditions=conditions,optical_device_configuration=roadm_configuration)
for result in results:
if not result :
is_all_good=False
is_all_good = False
if is_all_good:
config = json.loads(request.config)
flow_handled=[ ]
if "new_config" in config :
context_client.DeleteOpticalChannel(request)
context_client.close()
context_client.DeleteOpticalChannel(request)
context_client.close()
except Exception as e:
LOGGER.info("error in Disable configuring %s",e)
LOGGER.info("error in Disable configuring %s",e)
return Empty()
\ No newline at end of file
Loading