azext_iot/deviceupdate/commands_instance.py (111 lines of code) (raw):

# coding=utf-8 # -------------------------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. # -------------------------------------------------------------------------------------------- from knack.log import get_logger from azext_iot.common.utility import handle_service_exception from azext_iot.deviceupdate.providers.base import ( DeviceUpdateMgmtModels, DeviceUpdateInstanceManager, parse_account_rg, AzureError, ) from typing import Optional, List, Union logger = get_logger(__name__) def create_instance( cmd, name: str, instance_name: str, iothub_resource_ids: List[str], diagnostics: Optional[bool] = None, storage_resource_id: Optional[str] = None, tags: Optional[dict] = None, resource_group_name: Optional[str] = None, ): instance_manager = DeviceUpdateInstanceManager(cmd=cmd) target_container = instance_manager.find_account(target_name=name, target_rg=resource_group_name) # @digimaun - the location of an instance must be the same as the account container. location = target_container.account.location instance = DeviceUpdateMgmtModels.Instance( location=location, tags=tags, iot_hubs=instance_manager.assemble_iothub_resources(iothub_resource_ids), enable_diagnostics=diagnostics, ) if storage_resource_id: instance.diagnostic_storage_properties = instance_manager.assemble_diagnostic_storage(storage_resource_id) try: return instance_manager.mgmt_client.instances.begin_create( resource_group_name=target_container.resource_group, account_name=target_container.account.name, instance_name=instance_name, instance=instance, ) except AzureError as e: handle_service_exception(e) def update_instance(cmd, parameters: DeviceUpdateMgmtModels.Instance): from azext_iot.deviceupdate.common import ADUInstanceDiagnosticStorageAuthType instance_manager = DeviceUpdateInstanceManager(cmd=cmd) storage_properties: Union[ DeviceUpdateMgmtModels.DiagnosticStorageProperties, dict ] = parameters.diagnostic_storage_properties if storage_properties: # Storage properties can be a dict or DeviceUpdateMgmtModels.DiagnosticStorageProperties # depending on how the CLI core generic update helpers are used i.e. --set with an existing object vs new. if isinstance(storage_properties, dict): authentication_type = storage_properties.get("authenticationType") resource_id = storage_properties.get("resourceId") connection_string = storage_properties.get("connectionString") else: authentication_type = storage_properties.authentication_type resource_id = storage_properties.resource_id connection_string = storage_properties.connection_string if not authentication_type: authentication_type = ADUInstanceDiagnosticStorageAuthType.KEYBASED.value if ( authentication_type == ADUInstanceDiagnosticStorageAuthType.KEYBASED.value and resource_id and not connection_string ): parameters.diagnostic_storage_properties = instance_manager.assemble_diagnostic_storage(resource_id) try: return instance_manager.mgmt_client.instances.begin_create( resource_group_name=parse_account_rg(parameters.id), account_name=parameters.account_name, instance_name=parameters.name, instance=parameters, ) except AzureError as e: handle_service_exception(e) def list_instances(cmd, name: str, resource_group_name: Optional[str] = None): instance_manager = DeviceUpdateInstanceManager(cmd=cmd) target_container = instance_manager.find_account(target_name=name, target_rg=resource_group_name) try: return instance_manager.mgmt_client.instances.list_by_account( resource_group_name=target_container.resource_group, account_name=target_container.account.name, ) except AzureError as e: handle_service_exception(e) def show_instance(cmd, name: str, instance_name: str, resource_group_name: Optional[str] = None): instance_manager = DeviceUpdateInstanceManager(cmd=cmd) target_container = instance_manager.find_account(target_name=name, target_rg=resource_group_name) try: return instance_manager.mgmt_client.instances.get( resource_group_name=target_container.resource_group, account_name=target_container.account.name, instance_name=instance_name, ) except AzureError as e: handle_service_exception(e) def delete_instance(cmd, name: str, instance_name: str, resource_group_name: Optional[str] = None): instance_manager = DeviceUpdateInstanceManager(cmd=cmd) target_container = instance_manager.find_account(target_name=name, target_rg=resource_group_name) try: return instance_manager.mgmt_client.instances.begin_delete( resource_group_name=target_container.resource_group, account_name=target_container.account.name, instance_name=instance_name, ) except AzureError as e: handle_service_exception(e) def wait_on_instance(cmd, name: str, instance_name: str, resource_group_name: Optional[str] = None): return show_instance( cmd=cmd, name=name, instance_name=instance_name, resource_group_name=resource_group_name, )