Skip to content

Commit 61c5fec

Browse files
authored
[Compute] az vm disk attach: Add new parameter --new-names-of-source-snapshots-or-disks to support setting the name of create new disk from a snapshot or another disk (#32172)
1 parent 0dc0e66 commit 61c5fec

File tree

5 files changed

+1326
-1179
lines changed

5 files changed

+1326
-1179
lines changed

src/azure-cli/azure/cli/command_modules/vm/_params.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -548,6 +548,8 @@ def load_arguments(self, _):
548548
c.argument('disk_ids', nargs='+', min_api='2024-03-01', help='The disk IDs of the managed disk (space-delimited).')
549549
c.argument('source_snapshots_or_disks', options_list=['--source-snapshots-or-disks', '--source-resource'], nargs='+', min_api='2024-11-01', help='Create a data disk from a snapshot or another disk. Can use the ID of a disk or snapshot.')
550550
c.argument('source_disk_restore_point', options_list=['--source-disk-restore-point', '--source-disk-rp'], nargs='+', min_api='2024-11-01', help='create a data disk from a disk restore point. Can use the ID of a disk restore point.')
551+
c.argument('new_names_of_source_snapshots_or_disks', options_list=['--new-names-of-source-snapshots-or-disks', '--new-names-of-sr'], nargs='+', min_api='2024-11-01', help='The name of create new data disk from a snapshot or another disk.')
552+
c.argument('new_names_of_source_disk_restore_point', options_list=['--new-names-of-source-disk-restore-point', '--new-names-of-rp'], nargs='+', min_api='2024-11-01', help='The name of create new data disk from a disk restore point.')
551553

552554
with self.argument_context('vm disk detach') as c:
553555
c.argument('disk_name', arg_type=name_arg_type, help='The data disk name.')

src/azure-cli/azure/cli/command_modules/vm/_validators.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1892,6 +1892,21 @@ def process_vm_disk_attach_namespace(cmd, namespace):
18921892
raise RequiredArgumentMissingError("Please use at least one of --name, --disks, --disk-ids,"
18931893
" --source-snapshots-or-disks and --source-disk-restore-point")
18941894

1895+
if namespace.new_names_of_source_snapshots_or_disks and not namespace.source_snapshots_or_disks:
1896+
raise RequiredArgumentMissingError("Please use --source-snapshots-or-disks when using"
1897+
" --new-names-of-source-snapshots-or-disks")
1898+
if namespace.new_names_of_source_disk_restore_point and not namespace.source_disk_restore_point:
1899+
raise RequiredArgumentMissingError("Please use --source-disk-restore-point when using"
1900+
" --new-names-of-source-disk-restore-point")
1901+
if namespace.new_names_of_source_snapshots_or_disks and \
1902+
(len(namespace.new_names_of_source_snapshots_or_disks) != len(namespace.source_snapshots_or_disks)):
1903+
raise ArgumentUsageError("The number of --new-names-of-source-snapshots-or-disks must be the same as the number"
1904+
" of --source-snapshots-or-disks")
1905+
if namespace.new_names_of_source_disk_restore_point and \
1906+
(len(namespace.new_names_of_source_disk_restore_point) != len(namespace.source_disk_restore_point)):
1907+
raise ArgumentUsageError("The number of --new-names-of-source-disk-restore-point must be the same as the number"
1908+
" of --source-disk-restore-point")
1909+
18951910
if namespace.disk and namespace.disks:
18961911
raise MutuallyExclusiveArgumentError("You can only specify one of --name and --disks")
18971912

src/azure-cli/azure/cli/command_modules/vm/custom.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2124,7 +2124,8 @@ def show_default_diagnostics_configuration(is_windows_os=False):
21242124
# region VirtualMachines Disks (Managed)
21252125
def attach_managed_data_disk(cmd, resource_group_name, vm_name, disk=None, ids=None, disks=None, new=False, sku=None,
21262126
size_gb=None, lun=None, caching=None, enable_write_accelerator=False, disk_ids=None,
2127-
source_snapshots_or_disks=None, source_disk_restore_point=None):
2127+
source_snapshots_or_disks=None, source_disk_restore_point=None,
2128+
new_names_of_source_snapshots_or_disks=None, new_names_of_source_disk_restore_point=None):
21282129
# attach multiple managed disks using disk attach API
21292130
vm = get_vm_to_update(cmd, resource_group_name, vm_name)
21302131
if not new and not sku and not size_gb and disk_ids is not None:
@@ -2182,14 +2183,17 @@ def attach_managed_data_disk(cmd, resource_group_name, vm_name, disk=None, ids=N
21822183
vm.storage_profile.data_disks.append(data_disk)
21832184
disk_lun = _get_disk_lun(vm.storage_profile.data_disks)
21842185
if source_snapshots_or_disks is not None:
2185-
for disk_item in source_snapshots_or_disks:
2186+
if new_names_of_source_snapshots_or_disks is None:
2187+
new_names_of_source_snapshots_or_disks = [None] * len(source_snapshots_or_disks)
2188+
for disk_id, disk_name in zip(source_snapshots_or_disks, new_names_of_source_snapshots_or_disks):
21862189
disk = {
2190+
'name': disk_name,
21872191
'create_option': 'Copy',
21882192
'caching': caching,
21892193
'lun': disk_lun,
21902194
'writeAcceleratorEnabled': enable_write_accelerator,
21912195
"sourceResource": {
2192-
"id": disk_item
2196+
"id": disk_id
21932197
}
21942198
}
21952199
if size_gb is not None:
@@ -2205,14 +2209,17 @@ def attach_managed_data_disk(cmd, resource_group_name, vm_name, disk=None, ids=N
22052209
disk_lun += 1
22062210
vm.storage_profile.data_disks.append(disk)
22072211
if source_disk_restore_point is not None:
2208-
for disk_item in source_disk_restore_point:
2212+
if new_names_of_source_disk_restore_point is None:
2213+
new_names_of_source_disk_restore_point = [None] * len(source_disk_restore_point)
2214+
for disk_id, disk_name in zip(source_disk_restore_point, new_names_of_source_disk_restore_point):
22092215
disk = {
2216+
'name': disk_name,
22102217
'create_option': 'Restore',
22112218
'caching': caching,
22122219
'lun': disk_lun,
22132220
'writeAcceleratorEnabled': enable_write_accelerator,
22142221
"sourceResource": {
2215-
"id": disk_item
2222+
"id": disk_id
22162223
}
22172224
}
22182225
if size_gb is not None:

0 commit comments

Comments
 (0)