Skip to content

[Change Safety] Enable additional AutoRest modules - #30117

Open
YangAn-microsoft wants to merge 3 commits into
Azure:mainfrom
YangAn-microsoft:feature/change-safety-additional-autorest-modules
Open

[Change Safety] Enable additional AutoRest modules#30117
YangAn-microsoft wants to merge 3 commits into
Azure:mainfrom
YangAn-microsoft:feature/change-safety-additional-autorest-modules

Conversation

@YangAn-microsoft

@YangAn-microsoft YangAn-microsoft commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

🤖 PR Validation — 🔄 Running

Tests
🔄 230/230

Summary

Enables Change Safety (-AcquirePolicyToken and -ChangeReference) for ten additional AutoRest-based Azure PowerShell projects:

  • Az.ContainerInstance
  • Az.ContainerRegistry
  • Az.EventGrid
  • Az.EventHub
  • Az.Kusto
  • Az.ManagedServiceIdentity
  • Az.NetworkSecurityPerimeter
  • Az.ServiceBus
  • Az.PostgreSqlFlexibleServer
  • Az.DataCollectionRule (part of Az.Monitor)

SDK-based projects already inherit Change Safety through the shared SDK infrastructure. These AutoRest projects require an explicit enable-change-safety: true opt-in.

What's included

  1. Enables Change Safety in each AutoRest project (README.md, or tspconfig.yaml for the TypeSpec-based Az.PostgreSqlFlexibleServer).
  2. Adds dynamic-parameter forwarding to 40 custom write wrappers (across Az.ContainerInstance, Az.EventHub, Az.Kusto, Az.NetworkSecurityPerimeter, Az.ServiceBus) so their generated private cmdlets' Change Safety parameters reach the public commands. Az.ContainerRegistry, Az.EventGrid, Az.ManagedServiceIdentity, Az.PostgreSqlFlexibleServer, and Az.DataCollectionRule have no custom write wrappers, so their generated cmdlets expose the Change Safety parameters directly.
  3. Updates each generation ID to trigger archive-bot regeneration.
  4. Adds module changelog entries.

As in #29999, this contribution is source-only; generated content is intentionally omitted and will be produced by the archive bot.

Validation

  • Regenerated all ten projects (eight with @autorest/powershell@4.0.758, plus Az.PostgreSqlFlexibleServer via TypeSpec and Az.DataCollectionRule via AutoRest through the repository's standard build pipeline).
  • Verified every generated project contains Change Safety-enabled write cmdlets, including 76 write implementations / 24 public exports for Az.PostgreSqlFlexibleServer and 21 write implementations / 10 public exports for Az.DataCollectionRule.
  • Built all ten generated modules successfully with 0 warnings/errors.
  • Verified all 40 custom write wrappers produce public exports with dynamicparam forwarding.
  • Parsed all 40 edited custom PowerShell scripts successfully.
  • Validated all ten generate-info.json files and confirmed no generated/** files are included.

Live Testing Evidence

Local live testing was performed against real Azure resources (tenant 4f00b3b6-2940-4f2c-b037-94637c180d30, subscription f758ac53-3e63-4317-a956-0997793808d7) using locally regenerated and built modules from this branch, to confirm both dynamic-parameter-forwarding patterns used in this PR work end-to-end. Test resources were deleted immediately after each run, and no generated/** output from local testing is included in this PR.

Pattern 1 - fully generated write cmdlet, no custom wrapper
Modules: Az.ContainerRegistry, Az.EventGrid, Az.ManagedServiceIdentity, Az.PostgreSqlFlexibleServer, Az.DataCollectionRule

Tested with Az.ManagedServiceIdentity:

  • New-AzUserAssignedIdentity -AcquirePolicyToken created a real user-assigned identity (200 OK), verified with Get-AzUserAssignedIdentity, then deleted with Remove-AzUserAssignedIdentity -AcquirePolicyToken.
  • -ChangeReference was confirmed to reach real Azure Change Safety policy validation: pointing it at a non-existent Change Record failed with ExternalEndpointInvocationFailure / "could not be found", proving the reference is sent to and evaluated by the service rather than only bound locally.
  • Creating a real Change Record (New-AzChangeSafetyChangeRecord) to complete this path failed with InvalidTenantId: Tenant ... is not authorized for this resource provider - an environment/tenant-onboarding constraint unrelated to this PR.

Pattern 2 - custom wrapper forwarding dynamic parameters to the generated cmdlet
Modules: Az.ContainerInstance, Az.EventHub, Az.Kusto, Az.NetworkSecurityPerimeter, Az.ServiceBus

Tested with Az.EventHub:

  • New-AzEventHubNamespace -AcquirePolicyToken created a real EventHub namespace, verified with Get-AzEventHubNamespace, then deleted with Remove-AzEventHubNamespace -AcquirePolicyToken.
  • Confirms the custom wrapper's dynamicparam block correctly reflects IDynamicParameters from the wrapped generated cmdlet, and that the outer AutoRest-generated proxy correctly forwards it through to the public command.

Both patterns bind, forward, and reach the real Azure Change Safety pipeline successfully.

Copilot AI lite review requested due to automatic review settings September 8, 2026 05:22
@azure-pipelines

Copy link
Copy Markdown
Contributor
Azure Pipelines:
Successfully started running 2 pipeline(s).
There may be pipelines that require an authorized user to comment /azp run to run.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

A custom script contains non-breaking space (U+00A0) characters in executable code, which should be normalized to regular spaces to avoid invisible-character maintenance issues.

Pull request overview

This pull request opts additional AutoRest-based Az modules into “Change Safety” and updates their custom cmdlet wrappers so the generated cmdlets’ Change Safety dynamic parameters are surfaced through the public-facing commands.

Changes:

  • Enabled Change Safety in each affected AutoRest README.md (enable-change-safety: true).
  • Added dynamicparam {} forwarding to custom wrapper scripts so generated cmdlets’ dynamic parameters (e.g., -AcquirePolicyToken, -ChangeReference) flow through.
  • Updated generate-info.json generation IDs and added user-facing ChangeLog.md entries.
File summaries
File Description
src/ContainerInstance/ContainerInstance/ChangeLog.md Changelog entry announcing Change Safety support.
src/ContainerInstance/ContainerInstance.Autorest/README.md Opt-in Change Safety for generated ContainerInstance cmdlets.
src/ContainerInstance/ContainerInstance.Autorest/generate-info.json Bump generation ID to trigger regeneration.
src/ContainerInstance/ContainerInstance.Autorest/custom/Invoke-AzContainerInstanceCommand.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/ContainerInstance/ContainerInstance.Autorest/custom/New-AzContainerGroup.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/ContainerRegistry/ContainerRegistry/ChangeLog.md Changelog entry for extending Change Safety to generated cmdlets.
src/ContainerRegistry/ContainerRegistry.Autorest/README.md Opt-in Change Safety for generated ContainerRegistry cmdlets.
src/ContainerRegistry/ContainerRegistry.Autorest/generate-info.json Bump generation ID to trigger regeneration.
src/EventGrid/EventGrid/ChangeLog.md Changelog entry announcing Change Safety support.
src/EventGrid/EventGrid.Autorest/README.md Opt-in Change Safety for generated EventGrid cmdlets.
src/EventGrid/EventGrid.Autorest/generate-info.json Bump generation ID to trigger regeneration.
src/EventHub/EventHub/ChangeLog.md Changelog entry for extending Change Safety to generated cmdlets.
src/EventHub/EventHub.Autorest/README.md Opt-in Change Safety for generated EventHub cmdlets.
src/EventHub/EventHub.Autorest/generate-info.json Bump generation ID to trigger regeneration.
src/EventHub/EventHub.Autorest/custom/Approve-AzEventHubPrivateEndpointConnection.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/EventHub/EventHub.Autorest/custom/Deny-AzEventHubPrivateEndpointConnection.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/EventHub/EventHub.Autorest/custom/New-AzEventHubAuthorizationRule.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/EventHub/EventHub.Autorest/custom/New-AzEventHubKey.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/EventHub/EventHub.Autorest/custom/New-AzEventHubNamespace.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/EventHub/EventHub.Autorest/custom/Remove-AzEventHubAuthorizationRule.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/EventHub/EventHub.Autorest/custom/Set-AzEventHub.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/EventHub/EventHub.Autorest/custom/Set-AzEventHubApplicationGroup.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/EventHub/EventHub.Autorest/custom/Set-AzEventHubAuthorizationRule.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/EventHub/EventHub.Autorest/custom/Set-AzEventHubCluster.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/EventHub/EventHub.Autorest/custom/Set-AzEventHubConsumerGroup.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/EventHub/EventHub.Autorest/custom/Set-AzEventHubGeoDRConfigurationBreakPair.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/EventHub/EventHub.Autorest/custom/Set-AzEventHubGeoDRConfigurationFailOver.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/EventHub/EventHub.Autorest/custom/Set-AzEventHubNamespace.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/EventHub/EventHub.Autorest/custom/Set-AzEventHubNetworkRuleSet.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/EventHub/EventHub.Autorest/custom/Start-AzEventHubNamespaceFailOver.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/Kusto/Kusto/ChangeLog.md Changelog entry announcing Change Safety support.
src/Kusto/Kusto.Autorest/README.md Opt-in Change Safety for generated Kusto cmdlets.
src/Kusto/Kusto.Autorest/generate-info.json Bump generation ID to trigger regeneration.
src/Kusto/Kusto.Autorest/custom/New-AzKustoDatabase.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/Kusto/Kusto.Autorest/custom/Update-AzKustoDatabase.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/ManagedServiceIdentity/ManagedServiceIdentity/ChangeLog.md Changelog entry announcing Change Safety support.
src/ManagedServiceIdentity/ManagedServiceIdentity.Autorest/README.md Opt-in Change Safety for generated ManagedServiceIdentity cmdlets.
src/ManagedServiceIdentity/ManagedServiceIdentity.Autorest/generate-info.json Bump generation ID to trigger regeneration.
src/Network/Network/ChangeLog.md Changelog entry for extending Change Safety to generated cmdlets.
src/Network/NetworkSecurityPerimeter.Autorest/README.md Opt-in Change Safety for generated NetworkSecurityPerimeter cmdlets.
src/Network/NetworkSecurityPerimeter.Autorest/generate-info.json Bump generation ID to trigger regeneration.
src/Network/NetworkSecurityPerimeter.Autorest/custom/Update-AzNetworkSecurityPerimeterAccessRule.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/Network/NetworkSecurityPerimeter.Autorest/custom/Update-AzNetworkSecurityPerimeterAssociation.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/Network/NetworkSecurityPerimeter.Autorest/custom/Update-AzNetworkSecurityPerimeterLink.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/Network/NetworkSecurityPerimeter.Autorest/custom/Update-AzNetworkSecurityPerimeterLoggingConfiguration.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/ServiceBus/ServiceBus/ChangeLog.md Changelog entry for extending Change Safety to generated cmdlets.
src/ServiceBus/ServiceBus.Autorest/README.md Opt-in Change Safety for generated ServiceBus cmdlets.
src/ServiceBus/ServiceBus.Autorest/generate-info.json Bump generation ID to trigger regeneration.
src/ServiceBus/ServiceBus.Autorest/custom/Approve-AzServiceBusPrivateEndpointConnection.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/ServiceBus/ServiceBus.Autorest/custom/Deny-AzServiceBusPrivateEndpointConnection.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/ServiceBus/ServiceBus.Autorest/custom/New-AzServiceBusAuthorizationRule.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/ServiceBus/ServiceBus.Autorest/custom/New-AzServiceBusKey.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/ServiceBus/ServiceBus.Autorest/custom/New-AzServiceBusNamespace.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/ServiceBus/ServiceBus.Autorest/custom/Remove-AzServiceBusAuthorizationRule.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/ServiceBus/ServiceBus.Autorest/custom/Set-AzServiceBusAuthorizationRule.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/ServiceBus/ServiceBus.Autorest/custom/Set-AzServiceBusGeoDRConfigurationBreakPair.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/ServiceBus/ServiceBus.Autorest/custom/Set-AzServiceBusGeoDRConfigurationFailOver.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/ServiceBus/ServiceBus.Autorest/custom/Set-AzServiceBusNamespace.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/ServiceBus/ServiceBus.Autorest/custom/Set-AzServiceBusNetworkRuleSet.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/ServiceBus/ServiceBus.Autorest/custom/Set-AzServiceBusQueue.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/ServiceBus/ServiceBus.Autorest/custom/Set-AzServiceBusRule.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/ServiceBus/ServiceBus.Autorest/custom/Set-AzServiceBusSubscription.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/ServiceBus/ServiceBus.Autorest/custom/Set-AzServiceBusTopic.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
src/ServiceBus/ServiceBus.Autorest/custom/Start-AzServiceBusNamespaceFailOver.ps1 Forward Change Safety dynamic parameters to wrapped generated cmdlet.
Review details

Suppressed comments (1)

src/ContainerInstance/ContainerInstance.Autorest/custom/Invoke-AzContainerInstanceCommand.ps1:151

  • These lines contain non-breaking space (U+00A0) characters around keywords (process, try, catch) and before the splatted @PSBoundParameters. Invisible Unicode whitespace is easy to miss in reviews and can cause editing, linting, and copy/paste issues; please replace with regular ASCII spaces.
    process {
      try {
        Az.ContainerInstance.internal\Invoke-AzContainerInstanceCommand @PSBoundParameters
      } catch {
        throw
  • Files reviewed: 64/64 changed files
  • Comments generated: 0
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@a0x1ab

Copy link
Copy Markdown
Member

/azp run

@azure-pipelines

Copy link
Copy Markdown
Contributor
Azure Pipelines:
Successfully started running 3 pipeline(s).

Copilot AI review requested due to automatic review settings September 8, 2026 06:05

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

A custom wrapper script contains non-breaking spaces (U+00A0) in process/try/catch lines, which should be normalized to avoid parsing/tooling issues.

Review details

Suppressed comments (1)

Previously missed (1) — in code that hasn't changed since the last review.

src/ContainerInstance/ContainerInstance.Autorest/custom/Invoke-AzContainerInstanceCommand.ps1:150

  • The process, try, catch, and invocation lines contain non-breaking spaces (U+00A0) instead of normal spaces. This can cause hard-to-diagnose parsing/tooling issues (e.g., in editors/linters) and should be normalized to plain ASCII whitespace.
    process {
      try {
        Az.ContainerInstance.internal\Invoke-AzContainerInstanceCommand @PSBoundParameters
      } catch {
  • Files reviewed: 64/64 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

@a0x1ab

Copy link
Copy Markdown
Member

/azp run

@azure-pipelines

Copy link
Copy Markdown
Contributor
Azure Pipelines:
Successfully started running 3 pipeline(s).

Copilot AI review requested due to automatic review settings September 9, 2026 06:56

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The PR description/scope doesn’t match the set of modules actually updated (e.g., includes PostgreSqlFlexibleServer and Monitor/DataCollectionRule changes beyond the eight listed).

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review details
  • Files reviewed: 70/70 changed files
  • Comments generated: 1
  • Review effort level: Lite

@a0x1ab

Copy link
Copy Markdown
Member

/azp run

@azure-pipelines

Copy link
Copy Markdown
Contributor
Azure Pipelines:
Successfully started running 3 pipeline(s).

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The diff enables Change Safety for modules beyond the eight listed in the PR description, so scope/description should be reconciled before approval.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review details

Suppressed comments (1)

src/PostgreSqlFlexibleServer/PostgreSqlFlexibleServer.Autorest/tspconfig.yaml:13

  • The PR description lists eight AutoRest projects being opted into Change Safety, but this change also enables Change Safety for Az.PostgreSqlFlexibleServer. Please clarify whether this module is intentionally included (update PR description and ensure any needed wrapper forwarding is present), or revert this opt-in to keep the PR focused.
  • Files reviewed: 70/70 changed files
  • Comments generated: 1
  • Review effort level: Lite

Comment thread src/Monitor/DataCollectionRule.Autorest/README.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants