Skip to content

Commit 2f02ad0

Browse files
[Network] az network virtual-appliance reimage: Allow reimage of virtual machines associated with a network virtual appliance (#30680)
* reimage api az cli changes * version update * reverted change * adding test for reimage api * adding test recording for reimage api * added alias to that parameter
1 parent 05a5d8f commit 2f02ad0

File tree

4 files changed

+62586
-0
lines changed

4 files changed

+62586
-0
lines changed

src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/virtual_appliance/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,4 @@
1616
from ._show import *
1717
from ._update import *
1818
from ._wait import *
19+
from ._reimage import *
Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,220 @@
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+
@register_command(
15+
"network virtual-appliance reimage",
16+
)
17+
class Reimage(AAZCommand):
18+
"""Reimages one VM belonging to the specified Network Virtual Appliance.
19+
20+
:example: Reimages Specific NetworkVirtualAppliance VMs in VM Scale Set
21+
az network virtual-appliance reimage--resource-group rg1 --network-virtual-appliance-name nvaName --subscription subscriptionId --instance-ids 0
22+
"""
23+
24+
_aaz_info = {
25+
"version": "2024-07-01",
26+
"resources": [
27+
["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.network/networkvirtualappliances/{}/reimage", "2024-07-01"],
28+
]
29+
}
30+
31+
AZ_SUPPORT_NO_WAIT = True
32+
33+
def _handler(self, command_args):
34+
super()._handler(command_args)
35+
return self.build_lro_poller(self._execute_operations, self._output)
36+
37+
_args_schema = None
38+
39+
@classmethod
40+
def _build_arguments_schema(cls, *args, **kwargs):
41+
if cls._args_schema is not None:
42+
return cls._args_schema
43+
cls._args_schema = super()._build_arguments_schema(*args, **kwargs)
44+
45+
# define Arg Group ""
46+
47+
_args_schema = cls._args_schema
48+
_args_schema.network_virtual_appliance_name = AAZStrArg(
49+
options=["-n", "--name", "--network-virtual-appliance-name"],
50+
help="The name of Network Virtual Appliance.",
51+
required=True,
52+
id_part="name",
53+
fmt=AAZStrArgFormat(
54+
pattern="^[A-Za-z0-9_]+",
55+
),
56+
)
57+
_args_schema.resource_group = AAZResourceGroupNameArg(
58+
required=True,
59+
)
60+
61+
# define Arg Group "NetworkVirtualApplianceInstanceIds"
62+
63+
_args_schema = cls._args_schema
64+
_args_schema.instance_ids = AAZListArg(
65+
options=["--instance-ids"],
66+
arg_group="NetworkVirtualApplianceInstanceIds",
67+
help="The network virtual appliance instance ids. Omitting the network virtual appliance instance ids will result in the operation being performed on all virtual machines belonging to the network virtual appliance.",
68+
)
69+
70+
instance_ids = cls._args_schema.instance_ids
71+
instance_ids.Element = AAZStrArg()
72+
return cls._args_schema
73+
74+
def _execute_operations(self):
75+
self.pre_operations()
76+
yield self.NetworkVirtualAppliancesReimage(ctx=self.ctx)()
77+
self.post_operations()
78+
79+
@register_callback
80+
def pre_operations(self):
81+
pass
82+
83+
@register_callback
84+
def post_operations(self):
85+
pass
86+
87+
def _output(self, *args, **kwargs):
88+
result = self.deserialize_output(self.ctx.vars.instance, client_flatten=True)
89+
return result
90+
91+
class NetworkVirtualAppliancesReimage(AAZHttpOperation):
92+
CLIENT_TYPE = "MgmtClient"
93+
94+
def __call__(self, *args, **kwargs):
95+
request = self.make_request()
96+
session = self.client.send_request(request=request, stream=False, **kwargs)
97+
if session.http_response.status_code in [202]:
98+
return self.client.build_lro_polling(
99+
self.ctx.args.no_wait,
100+
session,
101+
self.on_200,
102+
self.on_error,
103+
lro_options={"final-state-via": "location"},
104+
path_format_arguments=self.url_parameters,
105+
)
106+
if session.http_response.status_code in [200]:
107+
return self.client.build_lro_polling(
108+
self.ctx.args.no_wait,
109+
session,
110+
self.on_200,
111+
self.on_error,
112+
lro_options={"final-state-via": "location"},
113+
path_format_arguments=self.url_parameters,
114+
)
115+
116+
return self.on_error(session.http_response)
117+
118+
@property
119+
def url(self):
120+
return self.client.format_url(
121+
"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkVirtualAppliances/{networkVirtualApplianceName}/reimage",
122+
**self.url_parameters
123+
)
124+
125+
@property
126+
def method(self):
127+
return "POST"
128+
129+
@property
130+
def error_format(self):
131+
return "ODataV4Format"
132+
133+
@property
134+
def url_parameters(self):
135+
parameters = {
136+
**self.serialize_url_param(
137+
"networkVirtualApplianceName", self.ctx.args.network_virtual_appliance_name,
138+
required=True,
139+
),
140+
**self.serialize_url_param(
141+
"resourceGroupName", self.ctx.args.resource_group,
142+
required=True,
143+
),
144+
**self.serialize_url_param(
145+
"subscriptionId", self.ctx.subscription_id,
146+
required=True,
147+
),
148+
}
149+
return parameters
150+
151+
@property
152+
def query_parameters(self):
153+
parameters = {
154+
**self.serialize_query_param(
155+
"api-version", "2024-07-01",
156+
required=True,
157+
),
158+
}
159+
return parameters
160+
161+
@property
162+
def header_parameters(self):
163+
parameters = {
164+
**self.serialize_header_param(
165+
"Content-Type", "application/json",
166+
),
167+
**self.serialize_header_param(
168+
"Accept", "application/json",
169+
),
170+
}
171+
return parameters
172+
173+
@property
174+
def content(self):
175+
_content_value, _builder = self.new_content_builder(
176+
self.ctx.args,
177+
typ=AAZObjectType,
178+
typ_kwargs={"flags": {"client_flatten": True}}
179+
)
180+
_builder.set_prop("instanceIds", AAZListType, ".instance_ids")
181+
182+
instance_ids = _builder.get(".instanceIds")
183+
if instance_ids is not None:
184+
instance_ids.set_elements(AAZStrType, ".")
185+
186+
return self.serialize_content(_content_value)
187+
188+
def on_200(self, session):
189+
data = self.deserialize_http_content(session)
190+
self.ctx.set_var(
191+
"instance",
192+
data,
193+
schema_builder=self._build_schema_on_200
194+
)
195+
196+
_schema_on_200 = None
197+
198+
@classmethod
199+
def _build_schema_on_200(cls):
200+
if cls._schema_on_200 is not None:
201+
return cls._schema_on_200
202+
203+
cls._schema_on_200 = AAZObjectType()
204+
205+
_schema_on_200 = cls._schema_on_200
206+
_schema_on_200.instance_ids = AAZListType(
207+
serialized_name="instanceIds",
208+
)
209+
210+
instance_ids = cls._schema_on_200.instance_ids
211+
instance_ids.Element = AAZStrType()
212+
213+
return cls._schema_on_200
214+
215+
216+
class _ReimageHelper:
217+
"""Helper class for Reimage"""
218+
219+
220+
__all__ = ["Reimage"]

0 commit comments

Comments
 (0)