Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
06f5f1e
Add stub code
Oct 27, 2025
74a3d0f
Fix parsing
Oct 29, 2025
b80cda8
Fix parsing
Oct 29, 2025
add68de
Fix displaying
Oct 29, 2025
1f12482
Merge remote-tracking branch 'other-repo/henrydai/ImplementCRUDforCha…
Oct 30, 2025
aeb58e6
Fix commands
Oct 30, 2025
1636d5d
Add tests
Oct 30, 2025
b9696af
Merge remote-tracking branch 'other-repo/henrydai/ImplementCRUDforCha…
Oct 30, 2025
b26a3b2
Fix style
Oct 30, 2025
1a9b886
Merge remote-tracking branch 'other-repo/henrydai/ImplementCRUDforCha…
Oct 30, 2025
ea95cc0
Rename cli extension module name
Nov 3, 2025
6e4bdaa
Merge remote-tracking branch 'other-repo/henrydai/ImplementCRUDforCha…
Nov 3, 2025
bdeffae
Fix linter
Nov 3, 2025
c50dfe8
Merge remote-tracking branch 'other-repo/henrydai/ImplementCRUDforCha…
Nov 3, 2025
78286dd
Fix linter
Nov 3, 2025
421d339
Merge remote-tracking branch 'other-repo/henrydai/ImplementCRUDforCha…
Nov 3, 2025
56b725b
Fix linter
Nov 3, 2025
d03e382
Merge remote-tracking branch 'other-repo/henrydai/ImplementCRUDforCha…
Nov 3, 2025
964371c
Fix module name
Nov 3, 2025
34d2514
Merge remote-tracking branch 'other-repo/henrydai/ImplementCRUDforCha…
Nov 3, 2025
3f5b4d7
add test scenarios
Nov 4, 2025
f0d9bdc
Merge remote-tracking branch 'other-repo/henrydai/ImplementCRUDforCha…
Nov 4, 2025
1578369
Fix style
Nov 4, 2025
7274b10
Merge remote-tracking branch 'other-repo/henrydai/ImplementCRUDforCha…
Nov 4, 2025
6c8d92c
Add service name
Nov 4, 2025
ee776c6
Add stageprogression and stagemap
Nov 25, 2025
aa3b9bd
Merge remote-tracking branch 'other-repo/henrydai/ImplementCRUDforCha…
Dec 4, 2025
8dd8743
Update alias
Dec 11, 2025
d02017a
Update ChangeRecord name
Dec 11, 2025
871d9b4
Merge remote-tracking branch 'other-repo/henrydai/ImplementCRUDforCha…
Dec 11, 2025
bf2565b
Address comments
Dec 19, 2025
e52f0b2
Merge remote-tracking branch 'other-repo/henrydai/ImplementCRUDforCha…
Dec 19, 2025
0201ab5
Update comments
Jan 26, 2026
74531c8
Update CLI to rename changeRecords for 2026-01-01-repview
Jan 30, 2026
094e6bf
Update CLI to rename changeRecords for 2026-01-01-repview
Jan 30, 2026
8abf613
Fix custom
Jan 31, 2026
e067473
Merge remote-tracking branch 'other-repo/feature/changesafety-api-202…
Jan 31, 2026
6dc6162
Fix issues
Jan 31, 2026
46f52a7
Merge remote-tracking branch 'other-repo/feature/changesafety-api-202…
Jan 31, 2026
2d96cae
fix stageMap parameters
Jan 31, 2026
0b2a75d
Merge remote-tracking branch 'other-repo/feature/changesafety-api-202…
Jan 31, 2026
589a9ca
Update changesafety docs, help text, and test recording
Mar 26, 2026
2bbf4b8
Merge remote-tracking branch 'other-repo/feature/changesafety-api-202…
Mar 26, 2026
fece976
Merge branch 'main' of https://github.com/henryzdai/azure-cli-extensi…
Mar 26, 2026
59b29a0
Address PR review: add stageprogression help docs, stagevariables exa…
Apr 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions src/azure-changesafety/HISTORY.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
.. :changelog:

Release History
===============

1.0.0b1
++++++
* Initial release.
* Manage ChangeRecord, StageMap, and StageProgression resources (API version ``2026-01-01-preview``).
* Custom ``--targets`` parsing with key=value shorthand (e.g., ``resourceId=...,operation=DELETE``).
* ``--stagemap-name`` shortcut to reference a StageMap by name.
* Default scheduling: ``anticipatedStartTime`` defaults to now, ``anticipatedEndTime`` to +8 hours.
* Supports ``--acquire-policy-token`` and ``--change-reference`` for guarded resource operations.
117 changes: 117 additions & 0 deletions src/azure-changesafety/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
# Azure CLI Change Safety Extension
Azure CLI extension for managing Change Safety resources. This includes `ChangeRecord`, `StageMap`, and `StageProgression` resources for coordinating, tracking, and safely deploying changes across your Azure environment.

## Installation
```bash
az extension add --source <path-to-extension-dist> --yes
# or install the latest published build
az extension add --name azure-changesafety
```

## Commands

### ChangeRecord
```bash
az changesafety changerecord create # Create a ChangeRecord for one or more targets.
az changesafety changerecord update # Update metadata, rollout settings, or scheduling.
az changesafety changerecord delete # Delete a ChangeRecord resource.
az changesafety changerecord show # Display details for a ChangeRecord resource.
az changesafety changerecord list # List ChangeRecord resources.
```

### StageMap
```bash
az changesafety stagemap create # Create a StageMap defining rollout stages.
az changesafety stagemap update # Update StageMap stages.
az changesafety stagemap delete # Delete a StageMap resource.
az changesafety stagemap show # Display details for a StageMap resource.
az changesafety stagemap list # List StageMap resources.
```

### StageProgression
```bash
az changesafety stageprogression create # Create a StageProgression to track stage execution.
az changesafety stageprogression update # Update StageProgression status or comments.
az changesafety stageprogression delete # Delete a StageProgression resource.
az changesafety stageprogression show # Display details for a StageProgression resource.
az changesafety stageprogression list # List StageProgression resources for a ChangeRecord.
```

Run `az changesafety -h` to see full command groups and examples.

## Examples

### StageMap Examples
Create a two-stage StageMap for rollout:
```bash
az changesafety stagemap create \
--stage-map-name rolloutStageMap \
--stages "[{name:Canary,sequence:1},{name:Production,sequence:2}]"
```

Create a StageMap with configurable parameters:
```bash
# Parameters use AAZ shorthand: paramName.{string|number|array|object}.property=value
# Use --parameters paramName.string="??" to explore available properties
az changesafety stagemap create \
--stage-map-name parameterized-rollout \
--stages "[{name:Canary,sequence:1},{name:Production,sequence:2}]" \
--parameters region.string.default-value=westus batchSize.number.default-value=10
```

### ChangeRecord Examples
Create a ChangeRecord for a manual touch operation (e.g., delete a Traffic Manager profile):
```bash
az changesafety changerecord create \
-g MyResourceGroup \
-n delete-trafficmanager \
--change-type ManualTouch \
--rollout-type Hotfix \
--targets "resourceId=/subscriptions/<subId>/resourceGroups/MyResourceGroup/providers/Microsoft.Network/trafficManagerProfiles/myProfile,operation=DELETE" \
--description "Delete Traffic Manager profile for maintenance"
```

Create a ChangeRecord for an app deployment with a StageMap reference:
```bash
az changesafety changerecord create \
-g MyResourceGroup \
-n changerecord-webapp-rollout \
--change-type AppDeployment \
--rollout-type Normal \
--targets "resourceId=/subscriptions/<subId>/resourceGroups/MyResourceGroup/providers/Microsoft.Web/sites/myApp,operation=PUT" \
--stagemap-name rolloutStageMap \
--links name=Runbook uri=https://contoso.com/runbook
```

> **Scope:** When `-g` is omitted, the ChangeRecord is created at subscription scope. Use `-g` to scope it to a specific resource group.

Update the ChangeRecord and add a comment:
```bash
az changesafety changerecord update \
-g MyResourceGroup \
-n changerecord-webapp-rollout \
--comments "Deployment validated in canary region"
```

### StageProgression Examples
Create a StageProgression for the Canary stage:
```bash
az changesafety stageprogression create \
--change-record-name changerecord-webapp-rollout \
-n canary-progression \
--stage-reference Canary \
--status InProgress
```

Update StageProgression to mark stage as completed:
```bash
az changesafety stageprogression update \
--change-record-name changerecord-webapp-rollout \
-n canary-progression \
--status Completed \
--comments "Canary validation passed"
```

## Additional Information
- View command documentation: `az changesafety -h`
- Remove the extension when no longer needed: `az extension remove --name azure-changesafety`
44 changes: 44 additions & 0 deletions src/azure-changesafety/azext_changesafety/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
#
# Code generated by aaz-dev-tools
# --------------------------------------------------------------------------------------------

from azure.cli.core import AzCommandsLoader
from azext_changesafety._help import helps # pylint: disable=unused-import
# Import custom to apply AZ_HELP patches for StageMap commands
from azext_changesafety import custom as _custom # pylint: disable=unused-import


class ChangeRecordCommandsLoader(AzCommandsLoader):

def __init__(self, cli_ctx=None):
from azure.cli.core.commands import CliCommandType
custom_command_type = CliCommandType(
operations_tmpl='azext_changesafety.custom#{}')
super().__init__(cli_ctx=cli_ctx,
custom_command_type=custom_command_type)

def load_command_table(self, args):
from azext_changesafety.commands import load_command_table
from azure.cli.core.aaz import load_aaz_command_table
try:
from . import aaz
except ImportError:
aaz = None
if aaz:
load_aaz_command_table(
loader=self,
aaz_pkg_name=aaz.__name__,
args=args
)
load_command_table(self, args)
return self.command_table

def load_arguments(self, command):
from azext_changesafety._params import load_arguments
load_arguments(self, command)


COMMAND_LOADER_CLS = ChangeRecordCommandsLoader
Loading
Loading