Repository navigation
Conversation
…enceManagement api-version 2026-10-01
|
Azure Pipelines: There may be pipelines that require an authorized user to comment /azp run to run. |
|
Thank you for your contribution krtcodee! We will review the pull request and get back to you soon. |
There was a problem hiding this comment.
🟡 Changes recommended
The command redacts the secret-marked downloadUrl during output deserialization, preventing users from receiving a usable report link even when the service succeeds.
1 open issue
What changed in this PR
Adds the GA resiliency 1.0.0 Azure CLI extension for managing Azure Resilience Management resources using API version 2026-10-01.
Changes:
- Introduces generated command groups for drills, recovery plans, goal assignments, usage plans, and operation status.
- Adds extension packaging, GA metadata, command documentation, and targeted linter exclusions.
- Adds scenario tests and recorded service responses.
| File | Description |
|---|---|
src/service_name.json |
Registers the Azure Resiliency service mapping. |
src/resiliency/setup.py |
Defines extension packaging and GA version. |
src/resiliency/setup.cfg |
Adds a setup configuration placeholder. |
src/resiliency/README.md |
Documents installation, usage, and commands. |
src/resiliency/linter_exclusions.yml |
Exempts two groups from wait-command requirements. |
src/resiliency/HISTORY.rst |
Records the initial release. |
src/resiliency/azext_resiliency/tests/latest/test_resiliency.py |
Adds usage-plan, enrollment, and list scenarios. |
src/resiliency/azext_resiliency/tests/latest/recordings/test_resiliency_recovery_plan_list.yaml |
Records recovery-plan list responses. |
src/resiliency/azext_resiliency/tests/latest/__init__.py |
Initializes the latest test package. |
src/resiliency/azext_resiliency/tests/__init__.py |
Initializes the test package. |
src/resiliency/azext_resiliency/custom.py |
Adds custom-command scaffolding. |
src/resiliency/azext_resiliency/commands.py |
Adds the custom command-table hook. |
src/resiliency/azext_resiliency/azext_metadata.json |
Declares GA status and minimum CLI version. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/usage_plan/enrollment/_list.py |
Lists enrollments with pagination. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/usage_plan/enrollment/_delete.py |
Deletes enrollments with asynchronous polling. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/usage_plan/enrollment/__init__.py |
Imports enrollment commands. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/usage_plan/enrollment/__cmd_group.py |
Registers the enrollment command group. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/usage_plan/_wait.py |
Waits for usage-plan conditions. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/usage_plan/_show.py |
Retrieves a usage plan. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/usage_plan/_delete.py |
Deletes a usage plan. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/usage_plan/__init__.py |
Imports usage-plan commands. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/usage_plan/__cmd_group.py |
Registers the usage-plan command group. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/unified_resilience_item/__init__.py |
Imports unified resilience item commands. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/unified_resilience_item/__cmd_group.py |
Registers the unified resilience item group. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/recovery_plan/recovery_resource/__init__.py |
Imports recovery-resource commands. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/recovery_plan/recovery_resource/__cmd_group.py |
Registers the recovery-resource group. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/recovery_plan/recovery_job/recovery_job_resource/__init__.py |
Imports recovery-job resource commands. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/recovery_plan/recovery_job/recovery_job_resource/__cmd_group.py |
Registers the recovery-job resource group. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/recovery_plan/recovery_job/_retry.py |
Retries failed recovery-job resources. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/recovery_plan/recovery_job/__init__.py |
Imports recovery-job commands. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/recovery_plan/recovery_job/__cmd_group.py |
Registers the recovery-job group. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/recovery_plan/identity/__init__.py |
Imports recovery-plan identity commands. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/recovery_plan/identity/__cmd_group.py |
Registers recovery-plan identity management. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/recovery_plan/_test_failover_cleanup.py |
Triggers test-failover cleanup. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/recovery_plan/_reprotect.py |
Triggers recovery-plan reprotection. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/recovery_plan/_finalize.py |
Finalizes recovery-plan configuration. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/recovery_plan/_failover_commit.py |
Commits recovery-plan failover. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/recovery_plan/_delete.py |
Deletes a recovery plan. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/recovery_plan/_check_readiness.py |
Triggers recovery readiness checks. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/recovery_plan/__init__.py |
Imports recovery-plan commands. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/recovery_plan/__cmd_group.py |
Registers the recovery-plan group. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/operation_status/_show.py |
Retrieves asynchronous operation status. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/operation_status/__init__.py |
Imports operation-status commands. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/operation_status/__cmd_group.py |
Registers the operation-status group. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/goal_assignment/goal_resource/_show.py |
Retrieves a goal resource. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/goal_assignment/goal_resource/_list.py |
Lists goal resources with pagination. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/goal_assignment/goal_resource/__init__.py |
Imports goal-resource commands. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/goal_assignment/goal_resource/__cmd_group.py |
Registers the goal-resource group. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/goal_assignment/_wait.py |
Waits for goal-assignment conditions. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/goal_assignment/_refresh_goal_resource.py |
Refreshes resources within a goal assignment. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/goal_assignment/_recommend_capacity.py |
Requests capacity recommendations. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/goal_assignment/_delete.py |
Deletes a goal assignment. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/goal_assignment/__init__.py |
Imports goal-assignment commands. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/goal_assignment/__cmd_group.py |
Registers the goal-assignment group. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/drill/identity/__init__.py |
Imports drill identity commands. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/drill/identity/__cmd_group.py |
Registers drill identity management. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/drill/drill_run/drill_run_resource/__init__.py |
Imports drill-run resource commands. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/drill/drill_run/drill_run_resource/__cmd_group.py |
Registers the drill-run resource group. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/drill/drill_run/_resume.py |
Resumes a paused drill-run workflow. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/drill/drill_run/_reprotect.py |
Triggers drill-run reprotection. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/drill/drill_run/_mark_as_complete.py |
Marks a drill-run stage complete. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/drill/drill_run/_list_report_download_url.py |
Retrieves a report download URL. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/drill/drill_run/_add_note.py |
Adds notes to a drill run. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/drill/drill_run/__init__.py |
Imports drill-run commands. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/drill/drill_run/__cmd_group.py |
Registers the drill-run group. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/drill/drill_resource/__init__.py |
Imports drill-resource commands. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/drill/drill_resource/__cmd_group.py |
Registers the drill-resource group. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/drill/_start.py |
Starts a drill instance. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/drill/_resync_readiness_check.py |
Triggers resource and permission drift checks. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/drill/_end.py |
Ends a drill with attestation details. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/drill/_delete.py |
Deletes a drill. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/drill/__init__.py |
Imports drill commands. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/drill/__cmd_group.py |
Registers the drill group. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/__init__.py |
Imports the root command group. |
src/resiliency/azext_resiliency/aaz/latest/resiliency/__cmd_group.py |
Registers az resiliency. |
src/resiliency/azext_resiliency/aaz/latest/__init__.py |
Initializes the latest generated package. |
src/resiliency/azext_resiliency/aaz/__init__.py |
Initializes the generated command package. |
src/resiliency/azext_resiliency/_params.py |
Adds the custom argument-loading hook. |
src/resiliency/azext_resiliency/_help.py |
Adds custom-help scaffolding. |
src/resiliency/azext_resiliency/__init__.py |
Connects generated commands to the extension loader. |
Review effort: Balanced
| pass | ||
|
|
||
| def _output(self, *args, **kwargs): | ||
| result = self.deserialize_output(self.ctx.vars.instance, client_flatten=True) |
|
/azp run |
|
Azure Pipelines: Successfully started running 2 pipeline(s). |
To addressTick each item as you address it.
Review detailsUpstream CISnapshot: 1 check passed; 0 failed; 0 pending. No outstanding human changes-requested reviews were returned. Test validation
Risk assessment100/100 · Critical The Critical rating is driven by security-sensitive behavior, public CLI behavior, dependency or supply chain and 2 additional signal(s).
Ask the Agent Tick a box to queue an action. Requires write access to this repository.
|
| self.greater_than('length(@)', 0), | ||
| ] | ||
| ) | ||
|
|
There was a problem hiding this comment.
This life cycle is missing update
There was a problem hiding this comment.
krtcodee there are a number of commands being added. please ensure we have lifecycle scenario tests for all of them to ensure we have sufficient coverage.
| TEST_RESOURCE_GROUP = 'cli-testing' | ||
| TEST_SERVICE_GROUP = 'azcmdlet-testing' | ||
| TEST_SUBSCRIPTION = '30233210-6bf4-4c4f-9e00-7cdcc1a176ec' |
There was a problem hiding this comment.
krtcodee These look like pre-existing resources. Please refer to https://github.com/Azure/azure-cli/blob/dev/doc/authoring_tests.md#automating-tests-for-azure-cli for guidance. We should ensure that scenario tests are self contained and replicable
…date to lifecycle - Create RG (policy-required tags), service group, usage plan and enrollment in-test with random names; no pre-existing resources - Enrollment lifecycle covers create/show/list/update/delete; usage plan lifecycle covers create/show/list/update/delete with post-delete checks - Drill/recovery-plan list run against the test service group, retrying while the service group's role assignment propagates - Scrub x-ms-operation-identifier (tenant/object IDs) from recordings; remove recordings for dropped tests - Re-recorded live; replay passes

Summary
New extension
resiliency1.0.0 (GA) providingaz resiliencycommands forMicrosoft.AzureResilienceManagementapi-version 2026-10-01 (stable).aaz-dev cli generate-by-swagger-tag(tagpackage-2026-10-01); 87 commands.Changes
src/resiliency/– new extension (generatedaaz/code,setup.py,HISTORY.rst,README.mdwith full command reference).VERSION = 1.0.0,Development Status :: 5 - Production/Stable,azext.isPreview: false.src/service_name.json– addedaz resiliency→ "Azure Resiliency".x-ms-examples(5 invalid swagger values corrected: drill-run stageFault→FaultInjection; unsupported--type/--user-assigned-identitiesreplaced by--user-assignedor removed).src/resiliency/linter_exclusions.yml– excludesrequire_wait_command_if_no_waitforresiliency drill drill-runandresiliency recovery-plan recovery-job: their POST actionsreturn no
provisioningState, so aaz-dev cannot generate awaitcommand for these groups.Testing
tests/latest/test_resiliency.py): usage-plan CRUD, enrollment CRUD, drill list, recovery-plan list – each with output assertions.azdev linter resiliency --min-severity medium: all rules pass.azdev style resiliency: pylint and flake8 pass.azdev linter EXT --src <branch> --tgt <merge-base> --rules missing_command_example): pass.