Skip to content
Snippets Groups Projects
Commit 704eddbb authored by Mohammad Ismaeel's avatar Mohammad Ismaeel
Browse files

Optical configuration now will appear after update on the UI

parent 6022e03d
No related branches found
No related tags found
2 merge requests!294Release TeraFlowSDN 4.0,!284Resolve: "(CNIT) Multi-Granular Optical Nodes and Optical Transpoders management"
......@@ -13,7 +13,7 @@
// limitations under the License.
syntax = "proto3";
package openconfig_device;
package optical_device;
import "context.proto";
......@@ -21,4 +21,6 @@ service OpenConfigService {
rpc AddOpenConfigDevice (context.OpticalConfig) returns (context.OpticalConfigId) {}
rpc ConfigureOpticalDevice(context.OpticalConfig) returns (context.Empty ) {}
rpc DisableOpticalDevice(context.OpticalConfig) returns (context.Empty ) {}
rpc GetDeviceConfiguration(context.OpticalConfigList) returns (context.Empty) {}
}
......@@ -15,12 +15,12 @@
import grpc, logging
from common.Constants import ServiceNameEnum
from common.Settings import get_service_host, get_service_port_grpc
from common.proto.context_pb2 import Device, DeviceConfig, DeviceId, Empty,OpticalConfig,OpticalConfigId
from common.proto.context_pb2 import Device, DeviceConfig, DeviceId, Empty,OpticalConfig,OpticalConfigId ,OpticalConfigList
from common.proto.device_pb2 import MonitoringSettings
from common.proto.device_pb2_grpc import DeviceServiceStub
from common.tools.client.RetryDecorator import retry, delay_exponential
from common.tools.grpc.Tools import grpc_message_to_json_string
from common.proto.openconfig_device_pb2_grpc import OpenConfigServiceStub
from common.proto.optical_device_pb2_grpc import OpenConfigServiceStub
LOGGER = logging.getLogger(__name__)
MAX_RETRIES = 15
DELAY_FUNCTION = delay_exponential(initial=0.01, increment=2.0, maximum=5.0)
......@@ -89,8 +89,16 @@ class DeviceClient:
LOGGER.debug('ConfigureOpticalDevice result: {:s}'.format(grpc_message_to_json_string(response)))
return response
def GetDeviceConfiguration(self, request : OpticalConfigList) -> Empty:
LOGGER.debug('ConfigureOpticalDevice request: {:s}'.format(grpc_message_to_json_string(request)))
response = self.openconfig_stub.GetDeviceConfiguration(request)
LOGGER.debug('ConfigureOpticalDevice result: {:s}'.format(grpc_message_to_json_string(response)))
return response
def DisableOpticalDevice(self, request : OpticalConfig) -> Empty:
LOGGER.debug('DisableOpticalDevice request: {:s}'.format(grpc_message_to_json_string(request)))
response = self.openconfig_stub.DisableOpticalDevice(request)
LOGGER.debug('DisableOpticalDevice result: {:s}'.format(grpc_message_to_json_string(response)))
return response
......@@ -16,7 +16,7 @@ import os
from common.Constants import ServiceNameEnum
from common.Settings import get_service_port_grpc
from common.proto.device_pb2_grpc import add_DeviceServiceServicer_to_server
from common.proto.openconfig_device_pb2_grpc import add_OpenConfigServiceServicer_to_server
from common.proto.optical_device_pb2_grpc import add_OpenConfigServiceServicer_to_server
from common.tools.service.GenericGrpcService import GenericGrpcService
from device.Config import LOAD_ALL_DEVICE_DRIVERS
from .driver_api.DriverInstanceCache import DriverInstanceCache
......
......@@ -16,7 +16,7 @@ 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
Device, DeviceId, DeviceOperationalStatusEnum, Empty, OpticalConfig, OpticalConfig,OpticalConfigList
)
from common.proto.device_pb2_grpc import DeviceServiceServicer
from common.tools.context_queries.Device import get_device
......@@ -105,6 +105,42 @@ class OpenConfigServicer(DeviceServiceServicer):
return Empty()
@safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
def GetDeviceConfiguration (self, request : OpticalConfigList, context : grpc.ServicerContext) -> Empty:
for configs in request.opticalconfigs:
device_uuid = configs.device_id.device_uuid.uuid
LOGGER.info(f" Get DeviceConfigure {device_uuid}")
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')
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'])
#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()
@safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
def DisableOpticalDevice (self, request : OpticalConfig, context : grpc.ServicerContext) -> Empty:
......
......@@ -14,16 +14,22 @@
from flask import current_app, render_template, Blueprint, flash, session, redirect, url_for
from common.proto.context_pb2 import Empty, OpticalLink, LinkId, OpticalLinkList
from common.proto.context_pb2 import Empty, OpticalLink, LinkId, OpticalLinkList ,OpticalConfigList
from common.tools.context_queries.EndPoint import get_endpoint_names
from common.tools.context_queries.Link import get_link
from common.tools.context_queries.Topology import get_topology
from context.client.ContextClient import ContextClient
from device.client.DeviceClient import DeviceClient
base_optical = Blueprint('base_optical', __name__, url_prefix='/base_optical')
device_client = DeviceClient()
context_client = ContextClient()
@base_optical.get('/')
def home():
context_client.connect()
opticalConfig_list:OpticalConfigList = context_client.GetOpticalConfig(Empty())
context_client.close()
device_client.connect()
device_client.GetDeviceConfiguration(opticalConfig_list)
device_client.close()
return render_template("base_optical/home.html")
\ No newline at end of file
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