From 1dcddb31b53700dd9b91fb27ac6e29d509e1eaab Mon Sep 17 00:00:00 2001 From: william051200 Date: Tue, 30 Dec 2025 12:02:15 +0800 Subject: [PATCH 1/3] Migrated create_managed_disk --- .../cli/command_modules/vm/_validators.py | 37 ++++++++++++++--- .../azure/cli/command_modules/vm/custom.py | 40 ++++++++++++++----- 2 files changed, 63 insertions(+), 14 deletions(-) diff --git a/src/azure-cli/azure/cli/command_modules/vm/_validators.py b/src/azure-cli/azure/cli/command_modules/vm/_validators.py index eac634252f6..fb46b50dd77 100644 --- a/src/azure-cli/azure/cli/command_modules/vm/_validators.py +++ b/src/azure-cli/azure/cli/command_modules/vm/_validators.py @@ -1981,11 +1981,38 @@ def _validate_gallery_image_reference(cmd, namespace): 'format, please refer to the help sample'.format(gallery_image_reference)) +def _validate_gallery_image_reference_by_aaz(namespace): + is_validate = 'gallery_image_reference' in namespace and namespace.gallery_image_reference is not None + + if not is_validate: + return + + from azure.cli.command_modules.vm._image_builder import GalleryImageReferenceType + from ._vm_utils import is_compute_gallery_image_id, is_community_gallery_image_id, \ + is_shared_gallery_image_id + + gallery_image_reference = namespace.gallery_image_reference + if is_compute_gallery_image_id(gallery_image_reference): + namespace.gallery_image_reference_type = GalleryImageReferenceType.COMPUTE.backend_key + return + if is_community_gallery_image_id(gallery_image_reference): + namespace.gallery_image_reference_type = GalleryImageReferenceType.COMMUNITY.backend_key + return + if is_shared_gallery_image_id(gallery_image_reference): + namespace.gallery_image_reference_type = GalleryImageReferenceType.SHARED.backend_key + return + + from azure.cli.core.parser import InvalidArgumentValueError + raise InvalidArgumentValueError('usage error: {} is an invalid gallery image reference, please provide valid ' + 'compute, shared or community gallery image version. For details about valid ' + 'format, please refer to the help sample'.format(gallery_image_reference)) + + def process_disk_create_namespace(cmd, namespace): from azure.core.exceptions import HttpResponseError validate_tags(namespace) validate_edge_zone(cmd, namespace) - _validate_gallery_image_reference(cmd, namespace) + _validate_gallery_image_reference_by_aaz(namespace) _validate_security_data_uri(namespace) _validate_upload_type(cmd, namespace) _validate_secure_vm_disk_encryption_set(namespace) @@ -2029,10 +2056,10 @@ def _validate_upload_type(cmd, namespace): if namespace.upload_type == 'UploadWithSecurityData': - if not cmd.supported_api_version(min_api='2021-08-01', operation_group='disks'): - raise ArgumentUsageError( - "'UploadWithSecurityData' is not supported in the current profile. " - "Please upgrade your profile with 'az cloud set --profile newerProfile' and try again") + # if not cmd.supported_api_version(min_api='2021-08-01', operation_group='disks'): + # raise ArgumentUsageError( + # "'UploadWithSecurityData' is not supported in the current profile. " + # "Please upgrade your profile with 'az cloud set --profile newerProfile' and try again") if not namespace.security_type: raise RequiredArgumentMissingError( diff --git a/src/azure-cli/azure/cli/command_modules/vm/custom.py b/src/azure-cli/azure/cli/command_modules/vm/custom.py index 28ed17b1169..f30878b1a0b 100644 --- a/src/azure-cli/azure/cli/command_modules/vm/custom.py +++ b/src/azure-cli/azure/cli/command_modules/vm/custom.py @@ -550,19 +550,41 @@ def create_managed_disk(cmd, resource_group_name, disk_name, location=None, # p 'usage error: --upload-size-bytes is required to create a disk for upload') if disk_encryption_set is not None and not is_valid_resource_id(disk_encryption_set): - disk_encryption_set = resource_id( - subscription=get_subscription_id(cmd.cli_ctx), resource_group=resource_group_name, - namespace='Microsoft.Compute', type='diskEncryptionSets', name=disk_encryption_set) + from .aaz.latest.disk_encryption_set import Show as DiskEncryptionSetShow + disk_encryption_set = DiskEncryptionSetShow(cli_ctx=cmd.cli_ctx)(command_args={ + 'resource_group': resource_group_name, + 'disk_encryption_set_name': disk_encryption_set + }) + + if disk_encryption_set: + disk_encryption_set = disk_encryption_set['id'] + else: + disk_encryption_set = None if disk_access is not None and not is_valid_resource_id(disk_access): - disk_access = resource_id( - subscription=get_subscription_id(cmd.cli_ctx), resource_group=resource_group_name, - namespace='Microsoft.Compute', type='diskAccesses', name=disk_access) + from .aaz.latest.disk_access import Show as DiskAccessShow + disk_access = DiskAccessShow(cli_ctx=cmd.cli_ctx)(command_args={ + 'resource_group': resource_group_name, + 'disk_access_name': disk_access + }) + + if disk_access: + disk_access = disk_access['id'] + else: + disk_access = None if secure_vm_disk_encryption_set is not None and not is_valid_resource_id(secure_vm_disk_encryption_set): - secure_vm_disk_encryption_set = resource_id( - subscription=get_subscription_id(cmd.cli_ctx), resource_group=resource_group_name, - namespace='Microsoft.Compute', type='diskEncryptionSets', name=secure_vm_disk_encryption_set) + from .aaz.latest.disk_encryption_set import Show as DiskEncryptionSetShow + secure_vm_disk_encryption_set = DiskEncryptionSetShow(cli_ctx=cmd.cli_ctx)(command_args={ + 'resource_group': resource_group_name, + 'disk_encryption_set_name': secure_vm_disk_encryption_set + }) + + + if secure_vm_disk_encryption_set: + secure_vm_disk_encryption_set = secure_vm_disk_encryption_set['id'] + else: + secure_vm_disk_encryption_set = None encryption = None if disk_encryption_set or encryption_type: From fba0f900418b9480b01955133efc574ec182136a Mon Sep 17 00:00:00 2001 From: william051200 Date: Tue, 30 Dec 2025 13:53:22 +0800 Subject: [PATCH 2/3] Migrated disk update --- .../azure/cli/command_modules/vm/commands.py | 2 +- .../azure/cli/command_modules/vm/custom.py | 1 - .../cli/command_modules/vm/operations/disk.py | 27 ++++++++++++++----- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/azure-cli/azure/cli/command_modules/vm/commands.py b/src/azure-cli/azure/cli/command_modules/vm/commands.py index 00b5f2900d1..31bc204f494 100644 --- a/src/azure-cli/azure/cli/command_modules/vm/commands.py +++ b/src/azure-cli/azure/cli/command_modules/vm/commands.py @@ -208,7 +208,7 @@ def load_command_table(self, _): from .operations.ppg import PPGShow self.command_table["ppg show"] = PPGShow(loader=self) - with self.command_group('disk', compute_disk_sdk, operation_group='disks') as g: + with self.command_group('disk', operation_group='disks') as g: g.custom_command('create', 'create_managed_disk', supports_no_wait=True, table_transformer=transform_disk_create_table_output, validator=process_disk_create_namespace) from .operations.disk import DiskUpdate, DiskGrantAccess self.command_table["disk grant-access"] = DiskGrantAccess(loader=self) diff --git a/src/azure-cli/azure/cli/command_modules/vm/custom.py b/src/azure-cli/azure/cli/command_modules/vm/custom.py index f30878b1a0b..2ffc033d2c5 100644 --- a/src/azure-cli/azure/cli/command_modules/vm/custom.py +++ b/src/azure-cli/azure/cli/command_modules/vm/custom.py @@ -580,7 +580,6 @@ def create_managed_disk(cmd, resource_group_name, disk_name, location=None, # p 'disk_encryption_set_name': secure_vm_disk_encryption_set }) - if secure_vm_disk_encryption_set: secure_vm_disk_encryption_set = secure_vm_disk_encryption_set['id'] else: diff --git a/src/azure-cli/azure/cli/command_modules/vm/operations/disk.py b/src/azure-cli/azure/cli/command_modules/vm/operations/disk.py index 336994b1392..6be8643ba1d 100644 --- a/src/azure-cli/azure/cli/command_modules/vm/operations/disk.py +++ b/src/azure-cli/azure/cli/command_modules/vm/operations/disk.py @@ -8,6 +8,8 @@ from azure.cli.core.aaz import has_value, register_command, register_command_group, AAZCommandGroup from ..aaz.latest.disk import Update as _DiskUpdate, GrantAccess as _DiskGrantAccess, Show, UpdatePatch as _UpdatePatch +from ..aaz.latest.disk_encryption_set import Show as DiskEncryptionSetShow +from ..aaz.latest.disk_access import Show as DiskAccessShow logger = get_logger(__name__) @@ -45,9 +47,15 @@ def pre_instance_update(self, instance): disk_encryption_set = args.disk_encryption_set if not is_valid_resource_id(disk_encryption_set.to_serialized_data()): - disk_encryption_set = resource_id( - subscription=get_subscription_id(self.cli_ctx), resource_group=args.resource_group, - namespace='Microsoft.Compute', type='diskEncryptionSets', name=disk_encryption_set) + disk_encryption_set = DiskEncryptionSetShow(cli_ctx=self.cli_ctx)(command_args={ + 'resource_group': args.resource_group, + 'disk_encryption_set_name': disk_encryption_set + }) + + if disk_encryption_set: + disk_encryption_set = disk_encryption_set['id'] + else: + disk_encryption_set = None instance.properties.encryption.disk_encryption_set_id = disk_encryption_set @@ -58,9 +66,16 @@ def pre_instance_update(self, instance): if has_value(args.disk_access): disk_access = args.disk_access if not is_valid_resource_id(disk_access.to_serialized_data()): - disk_access = resource_id( - subscription=get_subscription_id(self.cli_ctx), resource_group=args.resource_group, - namespace='Microsoft.Compute', type='diskAccesses', name=disk_access) + disk_access = DiskAccessShow(cli_ctx=self.cli_ctx)(command_args={ + 'resource_group': args.resource_group, + 'disk_access_name': disk_access + }) + + if disk_access: + disk_access = disk_access['id'] + else: + disk_access = None + instance.properties.disk_access_id = disk_access From 0ef305413a922336e4cb43abc2ca2681a8082a27 Mon Sep 17 00:00:00 2001 From: william051200 Date: Tue, 30 Dec 2025 15:13:32 +0800 Subject: [PATCH 3/3] Added handling and removed unused comments --- .../cli/command_modules/vm/_validators.py | 6 --- .../azure/cli/command_modules/vm/custom.py | 54 +++++++++++-------- .../cli/command_modules/vm/operations/disk.py | 41 ++++++++------ 3 files changed, 57 insertions(+), 44 deletions(-) diff --git a/src/azure-cli/azure/cli/command_modules/vm/_validators.py b/src/azure-cli/azure/cli/command_modules/vm/_validators.py index fb46b50dd77..3647fe50953 100644 --- a/src/azure-cli/azure/cli/command_modules/vm/_validators.py +++ b/src/azure-cli/azure/cli/command_modules/vm/_validators.py @@ -2055,12 +2055,6 @@ def _validate_upload_type(cmd, namespace): namespace.upload_type = 'Upload' if namespace.upload_type == 'UploadWithSecurityData': - - # if not cmd.supported_api_version(min_api='2021-08-01', operation_group='disks'): - # raise ArgumentUsageError( - # "'UploadWithSecurityData' is not supported in the current profile. " - # "Please upgrade your profile with 'az cloud set --profile newerProfile' and try again") - if not namespace.security_type: raise RequiredArgumentMissingError( "Please specify --security-type when the value of --upload-type is 'UploadWithSecurityData'") diff --git a/src/azure-cli/azure/cli/command_modules/vm/custom.py b/src/azure-cli/azure/cli/command_modules/vm/custom.py index 2ffc033d2c5..94fb44a7d76 100644 --- a/src/azure-cli/azure/cli/command_modules/vm/custom.py +++ b/src/azure-cli/azure/cli/command_modules/vm/custom.py @@ -551,38 +551,50 @@ def create_managed_disk(cmd, resource_group_name, disk_name, location=None, # p if disk_encryption_set is not None and not is_valid_resource_id(disk_encryption_set): from .aaz.latest.disk_encryption_set import Show as DiskEncryptionSetShow - disk_encryption_set = DiskEncryptionSetShow(cli_ctx=cmd.cli_ctx)(command_args={ - 'resource_group': resource_group_name, - 'disk_encryption_set_name': disk_encryption_set - }) + from azure.core.exceptions import HttpResponseError + try: + disk_encryption_set = DiskEncryptionSetShow(cli_ctx=cmd.cli_ctx)(command_args={ + 'resource_group': resource_group_name, + 'disk_encryption_set_name': disk_encryption_set + }) - if disk_encryption_set: - disk_encryption_set = disk_encryption_set['id'] - else: + if disk_encryption_set: + disk_encryption_set = disk_encryption_set['id'] + else: + disk_encryption_set = None + except HttpResponseError: disk_encryption_set = None if disk_access is not None and not is_valid_resource_id(disk_access): from .aaz.latest.disk_access import Show as DiskAccessShow - disk_access = DiskAccessShow(cli_ctx=cmd.cli_ctx)(command_args={ - 'resource_group': resource_group_name, - 'disk_access_name': disk_access - }) + from azure.core.exceptions import HttpResponseError + try: + disk_access = DiskAccessShow(cli_ctx=cmd.cli_ctx)(command_args={ + 'resource_group': resource_group_name, + 'disk_access_name': disk_access + }) - if disk_access: - disk_access = disk_access['id'] - else: + if disk_access: + disk_access = disk_access['id'] + else: + disk_access = None + except HttpResponseError: disk_access = None if secure_vm_disk_encryption_set is not None and not is_valid_resource_id(secure_vm_disk_encryption_set): from .aaz.latest.disk_encryption_set import Show as DiskEncryptionSetShow - secure_vm_disk_encryption_set = DiskEncryptionSetShow(cli_ctx=cmd.cli_ctx)(command_args={ - 'resource_group': resource_group_name, - 'disk_encryption_set_name': secure_vm_disk_encryption_set - }) + from azure.core.exceptions import HttpResponseError + try: + secure_vm_disk_encryption_set = DiskEncryptionSetShow(cli_ctx=cmd.cli_ctx)(command_args={ + 'resource_group': resource_group_name, + 'disk_encryption_set_name': secure_vm_disk_encryption_set + }) - if secure_vm_disk_encryption_set: - secure_vm_disk_encryption_set = secure_vm_disk_encryption_set['id'] - else: + if secure_vm_disk_encryption_set: + secure_vm_disk_encryption_set = secure_vm_disk_encryption_set['id'] + else: + secure_vm_disk_encryption_set = None + except HttpResponseError: secure_vm_disk_encryption_set = None encryption = None diff --git a/src/azure-cli/azure/cli/command_modules/vm/operations/disk.py b/src/azure-cli/azure/cli/command_modules/vm/operations/disk.py index 6be8643ba1d..8e31902cdf8 100644 --- a/src/azure-cli/azure/cli/command_modules/vm/operations/disk.py +++ b/src/azure-cli/azure/cli/command_modules/vm/operations/disk.py @@ -10,6 +10,7 @@ from ..aaz.latest.disk import Update as _DiskUpdate, GrantAccess as _DiskGrantAccess, Show, UpdatePatch as _UpdatePatch from ..aaz.latest.disk_encryption_set import Show as DiskEncryptionSetShow from ..aaz.latest.disk_access import Show as DiskAccessShow +from azure.core.exceptions import HttpResponseError logger = get_logger(__name__) @@ -47,14 +48,17 @@ def pre_instance_update(self, instance): disk_encryption_set = args.disk_encryption_set if not is_valid_resource_id(disk_encryption_set.to_serialized_data()): - disk_encryption_set = DiskEncryptionSetShow(cli_ctx=self.cli_ctx)(command_args={ - 'resource_group': args.resource_group, - 'disk_encryption_set_name': disk_encryption_set - }) - - if disk_encryption_set: - disk_encryption_set = disk_encryption_set['id'] - else: + try: + disk_encryption_set = DiskEncryptionSetShow(cli_ctx=self.cli_ctx)(command_args={ + 'resource_group': args.resource_group, + 'disk_encryption_set_name': disk_encryption_set + }) + + if disk_encryption_set: + disk_encryption_set = disk_encryption_set['id'] + else: + disk_encryption_set = None + except HttpResponseError: disk_encryption_set = None instance.properties.encryption.disk_encryption_set_id = disk_encryption_set @@ -66,16 +70,19 @@ def pre_instance_update(self, instance): if has_value(args.disk_access): disk_access = args.disk_access if not is_valid_resource_id(disk_access.to_serialized_data()): - disk_access = DiskAccessShow(cli_ctx=self.cli_ctx)(command_args={ - 'resource_group': args.resource_group, - 'disk_access_name': disk_access - }) - - if disk_access: - disk_access = disk_access['id'] - else: + try: + disk_access = DiskAccessShow(cli_ctx=self.cli_ctx)(command_args={ + 'resource_group': args.resource_group, + 'disk_access_name': disk_access + }) + + if disk_access: + disk_access = disk_access['id'] + else: + disk_access = None + except HttpResponseError: disk_access = None - + instance.properties.disk_access_id = disk_access