From 85bfdacbabcc26d7c2b83085e7606f2a8128d813 Mon Sep 17 00:00:00 2001 From: william051200 Date: Thu, 26 Feb 2026 15:50:41 +0800 Subject: [PATCH 1/5] Migrate vmss disk attach --- .../azure/cli/command_modules/vm/custom.py | 67 ++++++++++++------- 1 file changed, 44 insertions(+), 23 deletions(-) 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 9577f66cc88..dd07b8a5327 100644 --- a/src/azure-cli/azure/cli/command_modules/vm/custom.py +++ b/src/azure-cli/azure/cli/command_modules/vm/custom.py @@ -5087,40 +5087,61 @@ def attach_managed_data_disk_to_vmss(cmd, resource_group_name, vmss_name, size_g caching=None, disk=None, sku=None): def _init_data_disk(storage_profile, lun, existing_disk=None): - data_disks = storage_profile.data_disks or [] + from ._vm_utils import DiskCreateOptionTypes + data_disks = storage_profile.get('dataDisks', []) if lun is None: - lun = _get_disk_lun(data_disks) + lun = _get_disk_lun_by_aaz(data_disks) if existing_disk is None: - data_disk = DataDisk(lun=lun, create_option=DiskCreateOptionTypes.empty, disk_size_gb=size_gb, - caching=caching, managed_disk=ManagedDiskParameters(storage_account_type=sku)) + data_disk = { + 'caching': caching, + 'create_option': DiskCreateOptionTypes.EMPTY.value, + 'disk_size_gb': size_gb, + 'lun': lun, + 'managed_disk': { + 'storage_account_type': sku + } + } else: - data_disk = DataDisk(lun=lun, create_option=DiskCreateOptionTypes.attach, caching=caching, - managed_disk=ManagedDiskParameters(id=existing_disk, storage_account_type=sku)) + data_disk = { + 'caching': caching, + 'create_option': DiskCreateOptionTypes.ATTACH.value, + 'lun': lun, + 'managed_disk': { + 'id': existing_disk, + 'storage_account_type': sku + } + } data_disks.append(data_disk) - storage_profile.data_disks = data_disks - - DiskCreateOptionTypes, ManagedDiskParameters = cmd.get_models( - 'DiskCreateOptionTypes', 'ManagedDiskParameters') - if disk is None: - DataDisk = cmd.get_models('VirtualMachineScaleSetDataDisk') - else: - DataDisk = cmd.get_models('DataDisk') + storage_profile['dataDisks'] = data_disks - client = _compute_client_factory(cmd.cli_ctx) if instance_id is None: - vmss = client.virtual_machine_scale_sets.get(resource_group_name, vmss_name) + from .operations.vmss import VMSSCreate, convert_show_result_to_snake_case + vmss = get_vmss_by_aaz(cmd, resource_group_name, vmss_name) # Avoid unnecessary permission error - vmss.virtual_machine_profile.storage_profile.image_reference = None + vmss['virtualMachineProfile']['storageProfile']['imageReference'] = None # pylint: disable=no-member - _init_data_disk(vmss.virtual_machine_profile.storage_profile, lun) - return client.virtual_machine_scale_sets.begin_create_or_update(resource_group_name, vmss_name, vmss) + _init_data_disk(vmss['virtualMachineProfile']['storageProfile'], lun) + vmss = convert_show_result_to_snake_case(vmss) + vmss['resource_group'] = resource_group_name + vmss['vm_scale_set_name'] = vmss_name + return VMSSCreate(cli_ctx=cmd.cli_ctx)(command_args=vmss) - vmss_vm = client.virtual_machine_scale_set_vms.get(resource_group_name, vmss_name, instance_id) + from .operations.vmss_vms import VMSSVMSShow, VMSSVMSCreate, convert_show_result_to_snake_case + command_args = { + 'resource_group': resource_group_name, + 'vm_scale_set_name': vmss_name, + 'instance_id': instance_id + } + vmss_vm = VMSSVMSShow(cli_ctx=cmd.cli_ctx)(command_args=command_args) # Avoid unnecessary permission error - vmss_vm.storage_profile.image_reference = None - _init_data_disk(vmss_vm.storage_profile, lun, disk) - return client.virtual_machine_scale_set_vms.begin_update(resource_group_name, vmss_name, instance_id, vmss_vm) + vmss_vm['storageProfile']['imageReference'] = None + _init_data_disk(vmss_vm['storageProfile'], lun, disk) + vmss_vm = convert_show_result_to_snake_case(vmss_vm) + vmss_vm['resource_group'] = resource_group_name + vmss_vm['vm_scale_set_name'] = vmss_name + vmss_vm['instance_id'] = instance_id + return VMSSVMSCreate(cli_ctx=cmd.cli_ctx)(command_args=vmss_vm) def detach_disk_from_vmss(cmd, resource_group_name, vmss_name, lun, instance_id=None): From 5f279aaed6c9893ebe9c64b570ffb5025ab8144a Mon Sep 17 00:00:00 2001 From: william051200 Date: Thu, 26 Feb 2026 15:59:12 +0800 Subject: [PATCH 2/5] Migrate vmss disk detach --- .../azure/cli/command_modules/vm/commands.py | 2 +- .../azure/cli/command_modules/vm/custom.py | 38 +++++++++++++------ 2 files changed, 27 insertions(+), 13 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 cc60cf53afc..5fe96dbde7b 100644 --- a/src/azure-cli/azure/cli/command_modules/vm/commands.py +++ b/src/azure-cli/azure/cli/command_modules/vm/commands.py @@ -435,7 +435,7 @@ def load_command_table(self, _): g.custom_command('set', 'set_vmss_diagnostics_extension') g.custom_command('get-default-config', 'show_default_diagnostics_configuration') - with self.command_group('vmss disk', compute_vmss_sdk, min_api='2017-03-30') as g: + with self.command_group('vmss disk') as g: g.custom_command('attach', 'attach_managed_data_disk_to_vmss') g.custom_command('detach', 'detach_disk_from_vmss') 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 dd07b8a5327..0662ce08604 100644 --- a/src/azure-cli/azure/cli/command_modules/vm/custom.py +++ b/src/azure-cli/azure/cli/command_modules/vm/custom.py @@ -5145,31 +5145,45 @@ def _init_data_disk(storage_profile, lun, existing_disk=None): def detach_disk_from_vmss(cmd, resource_group_name, vmss_name, lun, instance_id=None): - client = _compute_client_factory(cmd.cli_ctx) + from .operations.vmss import VMSSCreate, convert_show_result_to_snake_case as VMSSConvert + from .operations.vmss_vms import VMSSVMSShow, VMSSVMSCreate, convert_show_result_to_snake_case as VMSSVMSConvert if instance_id is None: - vmss = client.virtual_machine_scale_sets.get(resource_group_name, vmss_name) + vmss = get_vmss_by_aaz(cmd, resource_group_name, vmss_name) # Avoid unnecessary permission error - vmss.virtual_machine_profile.storage_profile.image_reference = None + vmss['virtualMachineProfile']['storageProfile']['imageReference'] = None # pylint: disable=no-member - data_disks = vmss.virtual_machine_profile.storage_profile.data_disks + data_disks = vmss.get('virtualMachineProfile', {}).get('storageProfile', {}).get('dataDisks', []) else: - vmss_vm = client.virtual_machine_scale_set_vms.get(resource_group_name, vmss_name, instance_id) + command_args = { + 'resource_group': resource_group_name, + 'vm_scale_set_name': vmss_name, + 'instance_id': instance_id + } + vmss_vm = VMSSVMSShow(cli_ctx=cmd.cli_ctx)(command_args=command_args) # Avoid unnecessary permission error - vmss_vm.storage_profile.image_reference = None - data_disks = vmss_vm.storage_profile.data_disks + vmss_vm['storageProfile']['imageReference'] = None + data_disks = vmss_vm.get('storageProfile', {}).get('dataDisks', []) if not data_disks: raise CLIError("Data disk doesn't exist") - leftovers = [d for d in data_disks if d.lun != lun] + leftovers = [d for d in data_disks if d['lun'] != lun] if len(data_disks) == len(leftovers): raise CLIError("Could not find the data disk with lun '{}'".format(lun)) if instance_id is None: - vmss.virtual_machine_profile.storage_profile.data_disks = leftovers - return client.virtual_machine_scale_sets.begin_create_or_update(resource_group_name, vmss_name, vmss) - vmss_vm.storage_profile.data_disks = leftovers - return client.virtual_machine_scale_set_vms.begin_update(resource_group_name, vmss_name, instance_id, vmss_vm) + vmss['virtualMachineProfile']['storageProfile']['dataDisks'] = leftovers + vmss = VMSSConvert(vmss) + vmss['resource_group'] = resource_group_name + vmss['vm_scale_set_name'] = vmss_name + return VMSSCreate(cli_ctx=cmd.cli_ctx)(command_args=vmss) + + vmss_vm['storageProfile']['dataDisks'] = leftovers + vmss_vm = VMSSVMSConvert(vmss_vm) + vmss_vm['resource_group'] = resource_group_name + vmss_vm['vm_scale_set_name'] = vmss_name + vmss_vm['instance_id'] = instance_id + return VMSSVMSCreate(cli_ctx=cmd.cli_ctx)(command_args=vmss_vm) # endregion From 32b4e1c4d10e073b1b7f193990189c862fb14342 Mon Sep 17 00:00:00 2001 From: william051200 Date: Fri, 27 Feb 2026 09:25:00 +0800 Subject: [PATCH 3/5] Update test case recording --- .../latest/recordings/test_vmss_create_options.yaml | 12 ++++++------ .../recordings/test_vmss_ultra_ssd_storage_sku.yaml | 6 +++--- .../recordings/test_vmss_update_instance_disks.yaml | 12 ++++++------ 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/azure-cli/azure/cli/command_modules/vm/tests/latest/recordings/test_vmss_create_options.yaml b/src/azure-cli/azure/cli/command_modules/vm/tests/latest/recordings/test_vmss_create_options.yaml index ebf0e0c6405..6545dcf92d8 100644 --- a/src/azure-cli/azure/cli/command_modules/vm/tests/latest/recordings/test_vmss_create_options.yaml +++ b/src/azure-cli/azure/cli/command_modules/vm/tests/latest/recordings/test_vmss_create_options.yaml @@ -5177,7 +5177,7 @@ interactions: User-Agent: - AZURECLI/2.63.0 azsdk-python-core/1.28.0 Python/3.10.11 (Windows-10-10.0.22631-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vrfvmss?api-version=2024-11-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vrfvmss?api-version=2025-04-01 response: body: string: "{\r\n \"name\": \"vrfvmss\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vrfvmss\"\ @@ -5284,7 +5284,7 @@ interactions: User-Agent: - AZURECLI/2.63.0 azsdk-python-core/1.28.0 Python/3.10.11 (Windows-10-10.0.22631-SP0) method: PUT - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vrfvmss?api-version=2024-11-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vrfvmss?api-version=2025-04-01 response: body: string: "{\r\n \"name\": \"vrfvmss\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vrfvmss\"\ @@ -5481,7 +5481,7 @@ interactions: User-Agent: - AZURECLI/2.63.0 azsdk-python-core/1.28.0 Python/3.10.11 (Windows-10-10.0.22631-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vrfvmss?api-version=2024-11-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vrfvmss?api-version=2025-04-01 response: body: string: "{\r\n \"name\": \"vrfvmss\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vrfvmss\"\ @@ -5659,7 +5659,7 @@ interactions: User-Agent: - AZURECLI/2.63.0 azsdk-python-core/1.28.0 Python/3.10.11 (Windows-10-10.0.22631-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vrfvmss?api-version=2024-11-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vrfvmss?api-version=2025-04-01 response: body: string: "{\r\n \"name\": \"vrfvmss\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vrfvmss\"\ @@ -5770,7 +5770,7 @@ interactions: User-Agent: - AZURECLI/2.63.0 azsdk-python-core/1.28.0 Python/3.10.11 (Windows-10-10.0.22631-SP0) method: PUT - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vrfvmss?api-version=2024-11-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vrfvmss?api-version=2025-04-01 response: body: string: "{\r\n \"name\": \"vrfvmss\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vrfvmss\"\ @@ -5963,7 +5963,7 @@ interactions: User-Agent: - AZURECLI/2.63.0 azsdk-python-core/1.28.0 Python/3.10.11 (Windows-10-10.0.22631-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vrfvmss?api-version=2024-11-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vrfvmss?api-version=2025-04-01 response: body: string: "{\r\n \"name\": \"vrfvmss\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vrfvmss\"\ diff --git a/src/azure-cli/azure/cli/command_modules/vm/tests/latest/recordings/test_vmss_ultra_ssd_storage_sku.yaml b/src/azure-cli/azure/cli/command_modules/vm/tests/latest/recordings/test_vmss_ultra_ssd_storage_sku.yaml index e380f685146..0509811220a 100644 --- a/src/azure-cli/azure/cli/command_modules/vm/tests/latest/recordings/test_vmss_ultra_ssd_storage_sku.yaml +++ b/src/azure-cli/azure/cli/command_modules/vm/tests/latest/recordings/test_vmss_ultra_ssd_storage_sku.yaml @@ -1417,7 +1417,7 @@ interactions: User-Agent: - AZURECLI/2.71.0 azsdk-python-core/1.31.0 Python/3.10.11 (Windows-10-10.0.26100-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli-test-ultrassd000001/providers/Microsoft.Compute/virtualMachineScaleSets/vm-ultrassd2?api-version=2024-11-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli-test-ultrassd000001/providers/Microsoft.Compute/virtualMachineScaleSets/vm-ultrassd2?api-version=2025-04-01 response: body: string: "{\r\n \"name\": \"vm-ultrassd2\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli-test-ultrassd000001/providers/Microsoft.Compute/virtualMachineScaleSets/vm-ultrassd2\",\r\n @@ -1515,7 +1515,7 @@ interactions: User-Agent: - AZURECLI/2.71.0 azsdk-python-core/1.31.0 Python/3.10.11 (Windows-10-10.0.26100-SP0) method: PUT - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli-test-ultrassd000001/providers/Microsoft.Compute/virtualMachineScaleSets/vm-ultrassd2?api-version=2024-11-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli-test-ultrassd000001/providers/Microsoft.Compute/virtualMachineScaleSets/vm-ultrassd2?api-version=2025-04-01 response: body: string: "{\r\n \"name\": \"vm-ultrassd2\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli-test-ultrassd000001/providers/Microsoft.Compute/virtualMachineScaleSets/vm-ultrassd2\",\r\n @@ -1661,7 +1661,7 @@ interactions: User-Agent: - AZURECLI/2.71.0 azsdk-python-core/1.31.0 Python/3.10.11 (Windows-10-10.0.26100-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli-test-ultrassd000001/providers/Microsoft.Compute/virtualMachineScaleSets/vm-ultrassd2?api-version=2024-11-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli-test-ultrassd000001/providers/Microsoft.Compute/virtualMachineScaleSets/vm-ultrassd2?api-version=2025-04-01 response: body: string: "{\r\n \"name\": \"vm-ultrassd2\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli-test-ultrassd000001/providers/Microsoft.Compute/virtualMachineScaleSets/vm-ultrassd2\",\r\n diff --git a/src/azure-cli/azure/cli/command_modules/vm/tests/latest/recordings/test_vmss_update_instance_disks.yaml b/src/azure-cli/azure/cli/command_modules/vm/tests/latest/recordings/test_vmss_update_instance_disks.yaml index 62705e6e572..1645fe1f689 100644 --- a/src/azure-cli/azure/cli/command_modules/vm/tests/latest/recordings/test_vmss_update_instance_disks.yaml +++ b/src/azure-cli/azure/cli/command_modules/vm/tests/latest/recordings/test_vmss_update_instance_disks.yaml @@ -1037,7 +1037,7 @@ interactions: User-Agent: - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.10.11 (Windows-10-10.0.26100-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vmss000002/virtualMachines/1?api-version=2024-11-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vmss000002/virtualMachines/1?api-version=2025-04-01 response: body: string: "{\r\n \"name\": \"vmss000002_1\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vmss000002/virtualMachines/1\",\r\n @@ -1140,7 +1140,7 @@ interactions: User-Agent: - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.10.11 (Windows-10-10.0.26100-SP0) method: PUT - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vmss000002/virtualMachines/1?api-version=2024-11-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vmss000002/virtualMachines/1?api-version=2025-04-01 response: body: string: "{\r\n \"name\": \"vmss000002_1\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vmss000002/virtualMachines/1\",\r\n @@ -1392,7 +1392,7 @@ interactions: User-Agent: - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.10.11 (Windows-10-10.0.26100-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vmss000002/virtualMachines/1?api-version=2024-11-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vmss000002/virtualMachines/1?api-version=2025-04-01 response: body: string: "{\r\n \"name\": \"vmss000002_1\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vmss000002/virtualMachines/1\",\r\n @@ -1591,7 +1591,7 @@ interactions: User-Agent: - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.10.11 (Windows-10-10.0.26100-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vmss000002/virtualMachines/1?api-version=2024-11-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vmss000002/virtualMachines/1?api-version=2025-04-01 response: body: string: "{\r\n \"name\": \"vmss000002_1\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vmss000002/virtualMachines/1\",\r\n @@ -1698,7 +1698,7 @@ interactions: User-Agent: - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.10.11 (Windows-10-10.0.26100-SP0) method: PUT - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vmss000002/virtualMachines/1?api-version=2024-11-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vmss000002/virtualMachines/1?api-version=2025-04-01 response: body: string: "{\r\n \"name\": \"vmss000002_1\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vmss000002/virtualMachines/1\",\r\n @@ -1950,7 +1950,7 @@ interactions: User-Agent: - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.10.11 (Windows-10-10.0.26100-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vmss000002/virtualMachines/1?api-version=2024-11-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vmss000002/virtualMachines/1?api-version=2025-04-01 response: body: string: "{\r\n \"name\": \"vmss000002_1\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_vmss_create_options000001/providers/Microsoft.Compute/virtualMachineScaleSets/vmss000002/virtualMachines/1\",\r\n From c5c8c0eceb20510371a903078138f9730b628ec8 Mon Sep 17 00:00:00 2001 From: william051200 Date: Wed, 11 Mar 2026 08:46:46 +0800 Subject: [PATCH 4/5] Add handling --- src/azure-cli/azure/cli/command_modules/vm/custom.py | 6 ++++++ 1 file changed, 6 insertions(+) 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 0662ce08604..5853e4dcc50 100644 --- a/src/azure-cli/azure/cli/command_modules/vm/custom.py +++ b/src/azure-cli/azure/cli/command_modules/vm/custom.py @@ -5119,6 +5119,10 @@ def _init_data_disk(storage_profile, lun, existing_disk=None): from .operations.vmss import VMSSCreate, convert_show_result_to_snake_case vmss = get_vmss_by_aaz(cmd, resource_group_name, vmss_name) # Avoid unnecessary permission error + if 'virtualMachineProfile' not in vmss: + vmss['virtualMachineProfile'] = {} + if 'storageProfile' not in vmss['virtualMachineProfile']: + vmss['virtualMachineProfile']['storageProfile'] = {} vmss['virtualMachineProfile']['storageProfile']['imageReference'] = None # pylint: disable=no-member _init_data_disk(vmss['virtualMachineProfile']['storageProfile'], lun) @@ -5135,6 +5139,8 @@ def _init_data_disk(storage_profile, lun, existing_disk=None): } vmss_vm = VMSSVMSShow(cli_ctx=cmd.cli_ctx)(command_args=command_args) # Avoid unnecessary permission error + if 'storageProfile' not in vmss_vm: + vmss_vm['storageProfile'] = {} vmss_vm['storageProfile']['imageReference'] = None _init_data_disk(vmss_vm['storageProfile'], lun, disk) vmss_vm = convert_show_result_to_snake_case(vmss_vm) From ddf547d1dd32fd187cd105b1744b2e7ab8371dd2 Mon Sep 17 00:00:00 2001 From: william051200 Date: Fri, 20 Mar 2026 13:44:41 +0800 Subject: [PATCH 5/5] Fix code --- .../azure/cli/command_modules/vm/custom.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) 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 18cef30b905..b4a4389e486 100644 --- a/src/azure-cli/azure/cli/command_modules/vm/custom.py +++ b/src/azure-cli/azure/cli/command_modules/vm/custom.py @@ -5181,21 +5181,21 @@ def _init_data_disk(storage_profile, lun, existing_disk=None): if existing_disk is None: data_disk = { 'caching': caching, - 'create_option': DiskCreateOptionTypes.EMPTY.value, - 'disk_size_gb': size_gb, + 'createOption': DiskCreateOptionTypes.EMPTY.value, + 'diskSizeGB': size_gb, 'lun': lun, - 'managed_disk': { - 'storage_account_type': sku + 'managedDisk': { + 'storageAccountType': sku } } else: data_disk = { 'caching': caching, - 'create_option': DiskCreateOptionTypes.ATTACH.value, + 'createOption': DiskCreateOptionTypes.ATTACH.value, 'lun': lun, - 'managed_disk': { + 'managedDisk': { 'id': existing_disk, - 'storage_account_type': sku + 'storageAccountType': sku } }