Skip to content

Commit f305565

Browse files
authored
[Compute] az vmss deallocate: Add --hibernate parameter to support hibernating a VM while deallocating (#27106)
1 parent bb79ee2 commit f305565

5 files changed

Lines changed: 3395 additions & 1735 deletions

File tree

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -692,6 +692,9 @@ def load_arguments(self, _):
692692
for dest in scaleset_name_aliases:
693693
c.argument(dest, vmss_name_type, id_part=None) # due to instance-ids parameter
694694

695+
with self.argument_context('vmss deallocate', operation_group='virtual_machine_scale_sets') as c:
696+
c.argument('hibernate', arg_type=get_three_state_flag(), help='Hibernate a virtual machine from the VM scale set. Available for VMSS with Flexible OrchestrationMode only.', min_api='2023-03-01')
697+
695698
with self.argument_context('vmss reimage') as c:
696699
c.argument('instance_ids', nargs='+',
697700
help='Space-separated list of VM instance ID. If missing, reimage all instances.',

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

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3655,16 +3655,22 @@ def _build_identities_info_from_system_user_assigned(cmd, mi_system_assigned, mi
36553655
return identity_types, user_assigned_identities
36563656

36573657

3658-
def deallocate_vmss(cmd, resource_group_name, vm_scale_set_name, instance_ids=None, no_wait=False):
3658+
def deallocate_vmss(cmd, resource_group_name, vm_scale_set_name, instance_ids=None, no_wait=False, hibernate=None):
36593659
client = _compute_client_factory(cmd.cli_ctx)
3660-
if instance_ids and len(instance_ids) == 1:
3660+
# This is a walkaround because the REST service of `VirtualMachineScaleSetVMs#begin_deallocate`
3661+
# does not accept `hibernate` at present
3662+
if instance_ids and len(instance_ids) == 1 and hibernate is None:
36613663
return sdk_no_wait(no_wait, client.virtual_machine_scale_set_vms.begin_deallocate,
36623664
resource_group_name, vm_scale_set_name, instance_ids[0])
36633665

36643666
VirtualMachineScaleSetVMInstanceIDs = cmd.get_models('VirtualMachineScaleSetVMInstanceIDs')
36653667
vm_instance_i_ds = VirtualMachineScaleSetVMInstanceIDs(instance_ids=instance_ids)
3666-
return sdk_no_wait(no_wait, client.virtual_machine_scale_sets.begin_deallocate,
3667-
resource_group_name, vm_scale_set_name, vm_instance_i_ds)
3668+
if hibernate is not None:
3669+
return sdk_no_wait(no_wait, client.virtual_machine_scale_sets.begin_deallocate,
3670+
resource_group_name, vm_scale_set_name, vm_instance_i_ds, hibernate=hibernate)
3671+
else:
3672+
return sdk_no_wait(no_wait, client.virtual_machine_scale_sets.begin_deallocate,
3673+
resource_group_name, vm_scale_set_name, vm_instance_i_ds)
36683674

36693675

36703676
def delete_vmss_instances(cmd, resource_group_name, vm_scale_set_name, instance_ids, no_wait=False):

0 commit comments

Comments
 (0)