diff --git a/src/device/service/DeviceServiceServicerImpl.py b/src/device/service/DeviceServiceServicerImpl.py index 628b0884fccf36a905d4d2067486e84270e27aaf..6674ef13427fcaf3a9b274f268323a541d9c9851 100644 --- a/src/device/service/DeviceServiceServicerImpl.py +++ b/src/device/service/DeviceServiceServicerImpl.py @@ -43,8 +43,7 @@ class DeviceServiceServicerImpl(DeviceServiceServicer): @safe_and_metered_rpc_method(METRICS_POOL, LOGGER) def AddDevice(self, request : Device, context : grpc.ServicerContext) -> DeviceId: - device_id = request.device_id - device_uuid = device_id.device_uuid.uuid + device_uuid = request.device_id.device_uuid.uuid connection_config_rules = check_connect_rules(request.device_config) check_no_endpoints(request.device_endpoints) @@ -52,9 +51,18 @@ class DeviceServiceServicerImpl(DeviceServiceServicer): context_client = ContextClient() device = get_device(context_client, device_uuid, rw_copy=True) if device is None: - # not in context, create from request + # not in context, create blank one to get UUID, and populate it below device = Device() - device.CopyFrom(request) + device.device_id.CopyFrom(request.device_id) # pylint: disable=no-member + device.name = request.name + device.device_type = request.device_type + device.device_operational_status = DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_UNDEFINED + device.device_drivers.extend(request.device_drivers) # pylint: disable=no-member + device_id = context_client.SetDevice(device) + device = get_device(context_client, device_id.device_uuid.uuid, rw_copy=True) + + # 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: @@ -70,6 +78,8 @@ class DeviceServiceServicerImpl(DeviceServiceServicer): # created from request, populate config rules using driver errors.extend(populate_config_rules(device, driver)) + # TODO: populate components + if len(errors) > 0: for error in errors: LOGGER.error(error) raise OperationFailedException('AddDevice', extra_details=errors)