Skip to content

Commit e97546d

Browse files
{Compute} az vmss restart: Migrate command to aaz-based implementation (#32794)
1 parent 2a8d47c commit e97546d

4 files changed

Lines changed: 192 additions & 8 deletions

File tree

src/azure-cli/azure/cli/command_modules/vm/aaz/latest/vmss/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from ._list_skus import *
2121
from ._patch import *
2222
from ._perform_maintenance import *
23+
from ._restart import *
2324
from ._reimage import *
2425
from ._reimageall import *
2526
from ._show import *
Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,180 @@
1+
# --------------------------------------------------------------------------------------------
2+
# Copyright (c) Microsoft Corporation. All rights reserved.
3+
# Licensed under the MIT License. See License.txt in the project root for license information.
4+
#
5+
# Code generated by aaz-dev-tools
6+
# --------------------------------------------------------------------------------------------
7+
8+
# pylint: skip-file
9+
# flake8: noqa
10+
11+
from azure.cli.core.aaz import *
12+
13+
14+
class Restart(AAZCommand):
15+
"""Restarts one or more virtual machines in a VM scale set.
16+
"""
17+
18+
_aaz_info = {
19+
"version": "2024-11-01",
20+
"resources": [
21+
["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.compute/virtualmachinescalesets/{}/restart", "2024-11-01"],
22+
]
23+
}
24+
25+
AZ_SUPPORT_NO_WAIT = True
26+
27+
def _handler(self, command_args):
28+
super()._handler(command_args)
29+
return self.build_lro_poller(self._execute_operations, None)
30+
31+
_args_schema = None
32+
33+
@classmethod
34+
def _build_arguments_schema(cls, *args, **kwargs):
35+
if cls._args_schema is not None:
36+
return cls._args_schema
37+
cls._args_schema = super()._build_arguments_schema(*args, **kwargs)
38+
39+
# define Arg Group ""
40+
41+
_args_schema = cls._args_schema
42+
_args_schema.resource_group = AAZResourceGroupNameArg(
43+
required=True,
44+
)
45+
_args_schema.vm_scale_set_name = AAZStrArg(
46+
options=["--vm-scale-set-name"],
47+
help="The name of the VM scale set.",
48+
required=True,
49+
id_part="name",
50+
)
51+
52+
# define Arg Group "VmInstanceIDs"
53+
54+
_args_schema = cls._args_schema
55+
_args_schema.instance_ids = AAZListArg(
56+
options=["--instance-ids"],
57+
arg_group="VmInstanceIDs",
58+
help="The virtual machine scale set instance ids. Omitting the virtual machine scale set instance ids will result in the operation being performed on all virtual machines in the virtual machine scale set.",
59+
)
60+
61+
instance_ids = cls._args_schema.instance_ids
62+
instance_ids.Element = AAZStrArg()
63+
return cls._args_schema
64+
65+
def _execute_operations(self):
66+
self.pre_operations()
67+
yield self.VirtualMachineScaleSetsRestart(ctx=self.ctx)()
68+
self.post_operations()
69+
70+
@register_callback
71+
def pre_operations(self):
72+
pass
73+
74+
@register_callback
75+
def post_operations(self):
76+
pass
77+
78+
class VirtualMachineScaleSetsRestart(AAZHttpOperation):
79+
CLIENT_TYPE = "MgmtClient"
80+
81+
def __call__(self, *args, **kwargs):
82+
request = self.make_request()
83+
session = self.client.send_request(request=request, stream=False, **kwargs)
84+
if session.http_response.status_code in [202]:
85+
return self.client.build_lro_polling(
86+
self.ctx.args.no_wait,
87+
session,
88+
self.on_200,
89+
self.on_error,
90+
lro_options={"final-state-via": "location"},
91+
path_format_arguments=self.url_parameters,
92+
)
93+
if session.http_response.status_code in [200]:
94+
return self.client.build_lro_polling(
95+
self.ctx.args.no_wait,
96+
session,
97+
self.on_200,
98+
self.on_error,
99+
lro_options={"final-state-via": "location"},
100+
path_format_arguments=self.url_parameters,
101+
)
102+
103+
return self.on_error(session.http_response)
104+
105+
@property
106+
def url(self):
107+
return self.client.format_url(
108+
"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/restart",
109+
**self.url_parameters
110+
)
111+
112+
@property
113+
def method(self):
114+
return "POST"
115+
116+
@property
117+
def error_format(self):
118+
return "ODataV4Format"
119+
120+
@property
121+
def url_parameters(self):
122+
parameters = {
123+
**self.serialize_url_param(
124+
"resourceGroupName", self.ctx.args.resource_group,
125+
required=True,
126+
),
127+
**self.serialize_url_param(
128+
"subscriptionId", self.ctx.subscription_id,
129+
required=True,
130+
),
131+
**self.serialize_url_param(
132+
"vmScaleSetName", self.ctx.args.vm_scale_set_name,
133+
required=True,
134+
),
135+
}
136+
return parameters
137+
138+
@property
139+
def query_parameters(self):
140+
parameters = {
141+
**self.serialize_query_param(
142+
"api-version", "2024-11-01",
143+
required=True,
144+
),
145+
}
146+
return parameters
147+
148+
@property
149+
def header_parameters(self):
150+
parameters = {
151+
**self.serialize_header_param(
152+
"Content-Type", "application/json",
153+
),
154+
}
155+
return parameters
156+
157+
@property
158+
def content(self):
159+
_content_value, _builder = self.new_content_builder(
160+
self.ctx.args,
161+
typ=AAZObjectType,
162+
typ_kwargs={"flags": {"client_flatten": True}}
163+
)
164+
_builder.set_prop("instanceIds", AAZListType, ".instance_ids")
165+
166+
instance_ids = _builder.get(".instanceIds")
167+
if instance_ids is not None:
168+
instance_ids.set_elements(AAZStrType, ".")
169+
170+
return self.serialize_content(_content_value)
171+
172+
def on_200(self, session):
173+
pass
174+
175+
176+
class _RestartHelper:
177+
"""Helper class for Restart"""
178+
179+
180+
__all__ = ["Restart"]

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -403,10 +403,11 @@ def load_command_table(self, _):
403403
g.custom_command('identity remove', 'remove_vmss_identity', validator=process_remove_identity_namespace, is_preview=True)
404404
g.custom_show_command('identity show', 'show_vmss_identity')
405405
g.custom_command('deallocate', 'deallocate_vmss', supports_no_wait=True)
406-
g.custom_command('reimage', 'reimage_vmss', supports_no_wait=True)
407406
g.custom_command('list-instance-connection-info', 'list_vmss_instance_connection_info')
408407
g.custom_command('list-instance-public-ips', 'list_vmss_instance_public_ips')
409408
g.custom_command('list-instances', 'get_instances_list')
409+
g.custom_command('reimage', 'reimage_vmss', supports_no_wait=True)
410+
g.custom_command('restart', 'restart_vmss', supports_no_wait=True)
410411

411412
with self.command_group('vmss application', operation_group='virtual_machine_scale_sets') as g:
412413
g.custom_command('set', 'set_vmss_applications', validator=process_set_applications_namespace)
@@ -415,7 +416,6 @@ def load_command_table(self, _):
415416
with self.command_group('vmss', compute_vmss_sdk, operation_group='virtual_machine_scale_sets') as g:
416417
g.custom_command('create', 'create_vmss', transform=DeploymentOutputLongRunningOperation(self.cli_ctx, 'Starting vmss create'), supports_no_wait=True, table_transformer=deployment_validate_table_format, validator=process_vmss_create_namespace, exception_handler=handle_template_based_exception)
417418
g.custom_command('get-instance-view', 'get_vmss_instance_view', table_transformer='{ProvisioningState:statuses[0].displayStatus, PowerState:statuses[1].displayStatus}')
418-
g.custom_command('restart', 'restart_vmss', supports_no_wait=True)
419419
g.custom_command('scale', 'scale_vmss', supports_no_wait=True)
420420
g.custom_show_command('show', 'get_vmss', table_transformer=get_vmss_table_output_transformer(self, False))
421421
g.custom_command('stop', 'stop_vmss', supports_no_wait=True, validator=process_vm_vmss_stop)

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

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4548,13 +4548,16 @@ def reimage_vmss(cmd, resource_group_name, vm_scale_set_name, instance_ids=None,
45484548

45494549

45504550
def restart_vmss(cmd, resource_group_name, vm_scale_set_name, instance_ids=None, no_wait=False):
4551-
client = _compute_client_factory(cmd.cli_ctx)
4552-
VirtualMachineScaleSetVMInstanceRequiredIDs = cmd.get_models('VirtualMachineScaleSetVMInstanceRequiredIDs')
4553-
if instance_ids is None:
4551+
from .aaz.latest.vmss import Restart as VmssRestart
4552+
if not instance_ids:
45544553
instance_ids = ['*']
4555-
instance_ids = VirtualMachineScaleSetVMInstanceRequiredIDs(instance_ids=instance_ids)
4556-
return sdk_no_wait(no_wait, client.virtual_machine_scale_sets.begin_restart, resource_group_name, vm_scale_set_name,
4557-
vm_instance_i_ds=instance_ids)
4554+
command_args = {
4555+
'resource_group': resource_group_name,
4556+
'vm_scale_set_name': vm_scale_set_name,
4557+
'instance_ids': instance_ids,
4558+
'no_wait': no_wait
4559+
}
4560+
return VmssRestart(cli_ctx=cmd.cli_ctx)(command_args=command_args)
45584561

45594562

45604563
# pylint: disable=inconsistent-return-statements

0 commit comments

Comments
 (0)