Skip to content

Commit 8d51e56

Browse files
author
Henry Dai
committed
Update CLI to rename changeRecords for 2026-01-01-repview
1 parent 7f127b9 commit 8d51e56

26 files changed

Lines changed: 1860 additions & 222 deletions

File tree

src/azure-changesafety/README.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,14 @@ az changesafety changerecord show # Display details for a ChangeRecord resour
1919
Run `az changesafety changerecord -h` to see full parameter details and examples.
2020

2121
## Examples
22-
Create a ChangeRecord for a manual touch operation (e.g., VM maintenance):
22+
Create a ChangeRecord for a manual touch operation (e.g., Deletes a traffic manager profile):
2323
```bash
2424
az changesafety changerecord create \
2525
-g MyResourceGroup \
2626
-n changerecord-vm-maintenance \
2727
--change-type ManualTouch \
2828
--rollout-type Normal \
29-
--targets "resourceId=/subscriptions/<subId>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/myVm,operation=PATCH" \
30-
--stagemap-name myStageMap
29+
--targets "subscriptionId=<subId>,operation=DELETES" \
3130
```
3231

3332
Create a ChangeRecord for an app deployment with a StageMap reference:

src/azure-changesafety/azext_changesafety/aaz/latest/change_safety/__cmd_group.py renamed to src/azure-changesafety/azext_changesafety/aaz/latest/changesafety/__cmd_group.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"changesafety",
1616
)
1717
class __CMDGroup(AAZCommandGroup):
18-
"""Manage Change Safety
18+
"""Manage Changesafety
1919
"""
2020
pass
2121

src/azure-changesafety/azext_changesafety/aaz/latest/change_safety/__init__.py renamed to src/azure-changesafety/azext_changesafety/aaz/latest/changesafety/__init__.py

File renamed without changes.

src/azure-changesafety/azext_changesafety/aaz/latest/change_safety/change_state/__cmd_group.py renamed to src/azure-changesafety/azext_changesafety/aaz/latest/changesafety/changerecord/__cmd_group.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212

1313

1414
@register_command_group(
15-
"changesafety changestate",
15+
"changesafety changerecord",
1616
)
1717
class __CMDGroup(AAZCommandGroup):
18-
"""Manage Change State
18+
"""Manage Change Record
1919
"""
2020
pass
2121

src/azure-changesafety/azext_changesafety/aaz/latest/change_safety/stage_progression/__init__.py renamed to src/azure-changesafety/azext_changesafety/aaz/latest/changesafety/changerecord/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,6 @@
1111
from .__cmd_group import *
1212
from ._create import *
1313
from ._delete import *
14+
from ._list import *
1415
from ._show import *
1516
from ._update import *

src/azure-changesafety/azext_changesafety/aaz/latest/change_safety/change_state/_create.py renamed to src/azure-changesafety/azext_changesafety/aaz/latest/changesafety/changerecord/_create.py

Lines changed: 55 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,17 @@
1212

1313

1414
@register_command(
15-
"changesafety changestate create",
15+
"changesafety changerecord create",
1616
)
1717
class Create(AAZCommand):
1818
"""Create a ChangeRecord
1919
"""
2020

2121
_aaz_info = {
22-
"version": "2025-09-01-preview",
22+
"version": "2026-01-01-preview",
2323
"resources": [
24-
["mgmt-plane", "/subscriptions/{}/providers/Microsoft.ChangeSafety/changestates/{}", "2025-09-01-preview"],
25-
["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/Microsoft.ChangeSafety/changestates/{}", "2025-09-01-preview"],
24+
["mgmt-plane", "/subscriptions/{}/providers/microsoft.changesafety/changerecords/{}", "2026-01-01-preview"],
25+
["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.changesafety/changerecords/{}", "2026-01-01-preview"],
2626
]
2727
}
2828

@@ -42,7 +42,7 @@ def _build_arguments_schema(cls, *args, **kwargs):
4242
# define Arg Group ""
4343

4444
_args_schema = cls._args_schema
45-
_args_schema.change_state_name = AAZStrArg(
45+
_args_schema.change_record_name = AAZStrArg(
4646
options=["-n", "--name", "--change-record-name"],
4747
help="The name of the ChangeRecord resource.",
4848
required=True,
@@ -79,6 +79,11 @@ def _build_arguments_schema(cls, *args, **kwargs):
7979
protocol="iso",
8080
),
8181
)
82+
_args_schema.change_definition = AAZObjectArg(
83+
options=["--change-definition"],
84+
arg_group="Properties",
85+
help="Change request body and/or resource selection criteria used to identify the targeted resources.",
86+
)
8287
_args_schema.change_type = AAZStrArg(
8388
options=["--change-type"],
8489
arg_group="Properties",
@@ -133,6 +138,25 @@ def _build_arguments_schema(cls, *args, **kwargs):
133138
help="Reference to the StageMap, defining progression.",
134139
)
135140

141+
change_definition = cls._args_schema.change_definition
142+
change_definition.details = AAZObjectArg(
143+
options=["details"],
144+
help="Free form object containing additional details for the change definition.",
145+
required=True,
146+
blank={},
147+
)
148+
change_definition.kind = AAZStrArg(
149+
options=["kind"],
150+
help="Kind of the change definition.",
151+
required=True,
152+
enum={"ApiOperations": "ApiOperations", "Targets": "Targets"},
153+
)
154+
change_definition.name = AAZStrArg(
155+
options=["name"],
156+
help="Name of the change definition.",
157+
required=True,
158+
)
159+
136160
links = cls._args_schema.links
137161
links.Element = AAZObjectArg()
138162

@@ -254,12 +278,12 @@ def _build_arguments_schema(cls, *args, **kwargs):
254278

255279
def _execute_operations(self):
256280
self.pre_operations()
257-
condition_0 = has_value(self.ctx.args.change_state_name) and has_value(self.ctx.subscription_id) and has_value(self.ctx.args.resource_group) is not True
258-
condition_1 = has_value(self.ctx.args.change_state_name) and has_value(self.ctx.args.resource_group) and has_value(self.ctx.subscription_id)
281+
condition_0 = has_value(self.ctx.args.change_record_name) and has_value(self.ctx.subscription_id) and has_value(self.ctx.args.resource_group) is not True
282+
condition_1 = has_value(self.ctx.args.change_record_name) and has_value(self.ctx.args.resource_group) and has_value(self.ctx.subscription_id)
259283
if condition_0:
260-
self.ChangeStatesCreateOrUpdateAtSubscriptionLevel(ctx=self.ctx)()
284+
self.ChangeRecordsCreateOrUpdateAtSubscriptionLevel(ctx=self.ctx)()
261285
if condition_1:
262-
self.ChangeStatesCreateOrUpdate(ctx=self.ctx)()
286+
self.ChangeRecordsCreateOrUpdate(ctx=self.ctx)()
263287
self.post_operations()
264288

265289
@register_callback
@@ -274,7 +298,7 @@ def _output(self, *args, **kwargs):
274298
result = self.deserialize_output(self.ctx.vars.instance, client_flatten=True)
275299
return result
276300

277-
class ChangeStatesCreateOrUpdateAtSubscriptionLevel(AAZHttpOperation):
301+
class ChangeRecordsCreateOrUpdateAtSubscriptionLevel(AAZHttpOperation):
278302
CLIENT_TYPE = "MgmtClient"
279303

280304
def __call__(self, *args, **kwargs):
@@ -288,7 +312,7 @@ def __call__(self, *args, **kwargs):
288312
@property
289313
def url(self):
290314
return self.client.format_url(
291-
"/subscriptions/{subscriptionId}/providers/Microsoft.ChangeSafety/changeStates/{changeStateName}",
315+
"/subscriptions/{subscriptionId}/providers/Microsoft.ChangeSafety/changeRecords/{changeRecordName}",
292316
**self.url_parameters
293317
)
294318

@@ -304,7 +328,7 @@ def error_format(self):
304328
def url_parameters(self):
305329
parameters = {
306330
**self.serialize_url_param(
307-
"changeStateName", self.ctx.args.change_state_name,
331+
"changeRecordName", self.ctx.args.change_record_name,
308332
required=True,
309333
),
310334
**self.serialize_url_param(
@@ -318,7 +342,7 @@ def url_parameters(self):
318342
def query_parameters(self):
319343
parameters = {
320344
**self.serialize_query_param(
321-
"api-version", "2025-09-01-preview",
345+
"api-version", "2026-01-01-preview",
322346
required=True,
323347
),
324348
}
@@ -350,6 +374,7 @@ def content(self):
350374
properties.set_prop("additionalData", AAZObjectType, ".additional_data")
351375
properties.set_prop("anticipatedEndTime", AAZStrType, ".anticipated_end_time", typ_kwargs={"flags": {"required": True}})
352376
properties.set_prop("anticipatedStartTime", AAZStrType, ".anticipated_start_time", typ_kwargs={"flags": {"required": True}})
377+
properties.set_prop("changeDefinition", AAZObjectType, ".change_definition", typ_kwargs={"flags": {"required": True}})
353378
properties.set_prop("changeType", AAZStrType, ".change_type", typ_kwargs={"flags": {"required": True}})
354379
properties.set_prop("comments", AAZStrType, ".comments")
355380
properties.set_prop("description", AAZStrType, ".description")
@@ -360,6 +385,12 @@ def content(self):
360385
properties.set_prop("rolloutType", AAZStrType, ".rollout_type", typ_kwargs={"flags": {"required": True}})
361386
properties.set_prop("stageMap", AAZObjectType, ".stage_map")
362387

388+
change_definition = _builder.get(".properties.changeDefinition")
389+
if change_definition is not None:
390+
change_definition.set_prop("details", AAZObjectType, ".details", typ_kwargs={"flags": {"required": True}})
391+
change_definition.set_prop("kind", AAZStrType, ".kind", typ_kwargs={"flags": {"required": True}})
392+
change_definition.set_prop("name", AAZStrType, ".name", typ_kwargs={"flags": {"required": True}})
393+
363394
links = _builder.get(".properties.links")
364395
if links is not None:
365396
links.set_elements(AAZObjectType, ".")
@@ -646,7 +677,7 @@ def _build_schema_on_200_201(cls):
646677

647678
return cls._schema_on_200_201
648679

649-
class ChangeStatesCreateOrUpdate(AAZHttpOperation):
680+
class ChangeRecordsCreateOrUpdate(AAZHttpOperation):
650681
CLIENT_TYPE = "MgmtClient"
651682

652683
def __call__(self, *args, **kwargs):
@@ -660,7 +691,7 @@ def __call__(self, *args, **kwargs):
660691
@property
661692
def url(self):
662693
return self.client.format_url(
663-
"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ChangeSafety/changeStates/{changeStateName}",
694+
"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ChangeSafety/changeRecords/{changeRecordName}",
664695
**self.url_parameters
665696
)
666697

@@ -676,7 +707,7 @@ def error_format(self):
676707
def url_parameters(self):
677708
parameters = {
678709
**self.serialize_url_param(
679-
"changeStateName", self.ctx.args.change_state_name,
710+
"changeRecordName", self.ctx.args.change_record_name,
680711
required=True,
681712
),
682713
**self.serialize_url_param(
@@ -694,7 +725,7 @@ def url_parameters(self):
694725
def query_parameters(self):
695726
parameters = {
696727
**self.serialize_query_param(
697-
"api-version", "2025-09-01-preview",
728+
"api-version", "2026-01-01-preview",
698729
required=True,
699730
),
700731
}
@@ -726,6 +757,7 @@ def content(self):
726757
properties.set_prop("additionalData", AAZObjectType, ".additional_data")
727758
properties.set_prop("anticipatedEndTime", AAZStrType, ".anticipated_end_time", typ_kwargs={"flags": {"required": True}})
728759
properties.set_prop("anticipatedStartTime", AAZStrType, ".anticipated_start_time", typ_kwargs={"flags": {"required": True}})
760+
properties.set_prop("changeDefinition", AAZObjectType, ".change_definition", typ_kwargs={"flags": {"required": True}})
729761
properties.set_prop("changeType", AAZStrType, ".change_type", typ_kwargs={"flags": {"required": True}})
730762
properties.set_prop("comments", AAZStrType, ".comments")
731763
properties.set_prop("description", AAZStrType, ".description")
@@ -736,6 +768,12 @@ def content(self):
736768
properties.set_prop("rolloutType", AAZStrType, ".rollout_type", typ_kwargs={"flags": {"required": True}})
737769
properties.set_prop("stageMap", AAZObjectType, ".stage_map")
738770

771+
change_definition = _builder.get(".properties.changeDefinition")
772+
if change_definition is not None:
773+
change_definition.set_prop("details", AAZObjectType, ".details", typ_kwargs={"flags": {"required": True}})
774+
change_definition.set_prop("kind", AAZStrType, ".kind", typ_kwargs={"flags": {"required": True}})
775+
change_definition.set_prop("name", AAZStrType, ".name", typ_kwargs={"flags": {"required": True}})
776+
739777
links = _builder.get(".properties.links")
740778
if links is not None:
741779
links.set_elements(AAZObjectType, ".")

src/azure-changesafety/azext_changesafety/aaz/latest/change_safety/change_state/_delete.py renamed to src/azure-changesafety/azext_changesafety/aaz/latest/changesafety/changerecord/_delete.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,18 @@
1212

1313

1414
@register_command(
15-
"changesafety changestate delete",
15+
"changesafety changerecord delete",
1616
confirmation="Are you sure you want to perform this operation?",
1717
)
1818
class Delete(AAZCommand):
1919
"""Delete a ChangeRecord
2020
"""
2121

2222
_aaz_info = {
23-
"version": "2025-09-01-preview",
23+
"version": "2026-01-01-preview",
2424
"resources": [
25-
["mgmt-plane", "/subscriptions/{}/providers/Microsoft.ChangeSafety/changestates/{}", "2025-09-01-preview"],
26-
["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/Microsoft.ChangeSafety/changestates/{}", "2025-09-01-preview"],
25+
["mgmt-plane", "/subscriptions/{}/providers/microsoft.changesafety/changerecords/{}", "2026-01-01-preview"],
26+
["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.changesafety/changerecords/{}", "2026-01-01-preview"],
2727
]
2828
}
2929

@@ -42,7 +42,7 @@ def _build_arguments_schema(cls, *args, **kwargs):
4242
# define Arg Group ""
4343

4444
_args_schema = cls._args_schema
45-
_args_schema.change_state_name = AAZStrArg(
45+
_args_schema.change_record_name = AAZStrArg(
4646
options=["-n", "--name", "--change-record-name"],
4747
help="The name of the ChangeRecord resource.",
4848
required=True,
@@ -58,12 +58,12 @@ def _build_arguments_schema(cls, *args, **kwargs):
5858

5959
def _execute_operations(self):
6060
self.pre_operations()
61-
condition_0 = has_value(self.ctx.args.change_state_name) and has_value(self.ctx.subscription_id) and has_value(self.ctx.args.resource_group) is not True
62-
condition_1 = has_value(self.ctx.args.change_state_name) and has_value(self.ctx.args.resource_group) and has_value(self.ctx.subscription_id)
61+
condition_0 = has_value(self.ctx.args.change_record_name) and has_value(self.ctx.subscription_id) and has_value(self.ctx.args.resource_group) is not True
62+
condition_1 = has_value(self.ctx.args.change_record_name) and has_value(self.ctx.args.resource_group) and has_value(self.ctx.subscription_id)
6363
if condition_0:
64-
yield self.ChangeStatesDeleteAtSubscriptionLevel(ctx=self.ctx)()
64+
yield self.ChangeRecordsDeleteAtSubscriptionLevel(ctx=self.ctx)()
6565
if condition_1:
66-
yield self.ChangeStatesDelete(ctx=self.ctx)()
66+
yield self.ChangeRecordsDelete(ctx=self.ctx)()
6767
self.post_operations()
6868

6969
@register_callback
@@ -74,7 +74,7 @@ def pre_operations(self):
7474
def post_operations(self):
7575
pass
7676

77-
class ChangeStatesDeleteAtSubscriptionLevel(AAZHttpOperation):
77+
class ChangeRecordsDeleteAtSubscriptionLevel(AAZHttpOperation):
7878
CLIENT_TYPE = "MgmtClient"
7979

8080
def __call__(self, *args, **kwargs):
@@ -113,7 +113,7 @@ def __call__(self, *args, **kwargs):
113113
@property
114114
def url(self):
115115
return self.client.format_url(
116-
"/subscriptions/{subscriptionId}/providers/Microsoft.ChangeSafety/changeStates/{changeStateName}",
116+
"/subscriptions/{subscriptionId}/providers/Microsoft.ChangeSafety/changeRecords/{changeRecordName}",
117117
**self.url_parameters
118118
)
119119

@@ -129,7 +129,7 @@ def error_format(self):
129129
def url_parameters(self):
130130
parameters = {
131131
**self.serialize_url_param(
132-
"changeStateName", self.ctx.args.change_state_name,
132+
"changeRecordName", self.ctx.args.change_record_name,
133133
required=True,
134134
),
135135
**self.serialize_url_param(
@@ -143,7 +143,7 @@ def url_parameters(self):
143143
def query_parameters(self):
144144
parameters = {
145145
**self.serialize_query_param(
146-
"api-version", "2025-09-01-preview",
146+
"api-version", "2026-01-01-preview",
147147
required=True,
148148
),
149149
}
@@ -155,7 +155,7 @@ def on_204(self, session):
155155
def on_200_201(self, session):
156156
pass
157157

158-
class ChangeStatesDelete(AAZHttpOperation):
158+
class ChangeRecordsDelete(AAZHttpOperation):
159159
CLIENT_TYPE = "MgmtClient"
160160

161161
def __call__(self, *args, **kwargs):
@@ -194,7 +194,7 @@ def __call__(self, *args, **kwargs):
194194
@property
195195
def url(self):
196196
return self.client.format_url(
197-
"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ChangeSafety/changeStates/{changeStateName}",
197+
"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ChangeSafety/changeRecords/{changeRecordName}",
198198
**self.url_parameters
199199
)
200200

@@ -210,7 +210,7 @@ def error_format(self):
210210
def url_parameters(self):
211211
parameters = {
212212
**self.serialize_url_param(
213-
"changeStateName", self.ctx.args.change_state_name,
213+
"changeRecordName", self.ctx.args.change_record_name,
214214
required=True,
215215
),
216216
**self.serialize_url_param(
@@ -228,7 +228,7 @@ def url_parameters(self):
228228
def query_parameters(self):
229229
parameters = {
230230
**self.serialize_query_param(
231-
"api-version", "2025-09-01-preview",
231+
"api-version", "2026-01-01-preview",
232232
required=True,
233233
),
234234
}

0 commit comments

Comments
 (0)