Add MultiCloud SKU support to ExpressRoute Circuit#29800
Open
mshrimankar10 wants to merge 4 commits into
Open
Conversation
| Thanks for your contribution! The pull request validation has started. Please revisit this comment for updated status. |
Contributor
There was a problem hiding this comment.
Pull request overview
This PR adds ExpressRoute “MultiCloud” circuit support to the Az.Network module by extending New-AzExpressRouteCircuit, updating the PowerShell output model, and introducing corresponding SDK model fields plus documentation and changelog updates.
Changes:
- Extended
New-AzExpressRouteCircuitto accept-SkuTier MultiCloudand added-PartnerAccountId/-ActivationKeywith MultiCloud-specific validation. - Extended
PSExpressRouteCircuitwithPartnerAccountId,ActivationKey, andResiliencyLeveloutput properties. - Updated Network SDK model (
ExpressRouteCircuitPropertiesFormat), help docs, and module changelog to reflect the new capability.
Reviewed changes
Copilot reviewed 3 out of 5 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| src/Network/Network/ExpressRouteCircuit/NewAzureExpressRouteCircuitCommand.cs | Adds MultiCloud tier support, new parameters, and validation logic in the circuit creation cmdlet. |
| src/Network/Network/Generated/Models/PSExpressRouteCircuit.cs | Extends the PowerShell output model with MultiCloud-related properties. |
| src/Network/Network.Management.Sdk/Generated/Models/ExpressRouteCircuitPropertiesFormat.cs | Adds SDK serialization fields for MultiCloud partner properties and resiliency level. |
| src/Network/Network/help/New-AzExpressRouteCircuit.md | Documents the new tier and parameters and adds MultiCloud usage examples. |
| src/Network/Network/ChangeLog.md | Adds an “Upcoming Release” entry describing the new MultiCloud support. |
| MNM.ExpressRouteCircuitSkuTier.Premium, | ||
| MNM.ExpressRouteCircuitSkuTier.Basic, | ||
| MNM.ExpressRouteCircuitSkuTier.Local, | ||
| MNM.ExpressRouteCircuitSkuTier.MultiCloud, |
Comment on lines
+181
to
+195
| if (string.Equals(this.SkuTier, "MultiCloud", StringComparison.OrdinalIgnoreCase)) | ||
| { | ||
| if (string.IsNullOrEmpty(this.PartnerAccountId) && string.IsNullOrEmpty(this.ActivationKey)) | ||
| { | ||
| throw new ArgumentException("For MultiCloud circuits, either PartnerAccountId or ActivationKey must be specified."); | ||
| } | ||
| if (!string.IsNullOrEmpty(this.PartnerAccountId) && !string.IsNullOrEmpty(this.ActivationKey)) | ||
| { | ||
| throw new ArgumentException("For MultiCloud circuits, only one of PartnerAccountId or ActivationKey can be specified, not both."); | ||
| } | ||
| if (!string.Equals(this.SkuFamily, "MeteredData", StringComparison.OrdinalIgnoreCase)) | ||
| { | ||
| throw new ArgumentException("For MultiCloud circuits, SkuFamily must be 'MeteredData'."); | ||
| } | ||
| } |
Comment on lines
200
to
+203
| circuit.Location = this.Location; | ||
| circuit.AuthorizationKey = this.AuthorizationKey; | ||
| circuit.PartnerAccountId = this.PartnerAccountId; | ||
| circuit.ActivationKey = this.ActivationKey; |
| public string ActivationKey { get; set; } | ||
|
|
||
| [Ps1Xml(Target = ViewControl.Table)] | ||
| public string ResiliencyLevel { get; set; } |
| { | ||
| base.Execute(); | ||
|
|
||
| if (string.Equals(this.SkuTier, "MultiCloud", StringComparison.OrdinalIgnoreCase)) |
added 2 commits
July 2, 2026 15:11
| MNM.ExpressRouteCircuitSkuTier.Premium, | ||
| MNM.ExpressRouteCircuitSkuTier.Basic, | ||
| MNM.ExpressRouteCircuitSkuTier.Local, | ||
| MNM.ExpressRouteCircuitSkuTier.MultiCloud, |
Comment on lines
+181
to
+195
| if (string.Equals(this.SkuTier, "MultiCloud", StringComparison.OrdinalIgnoreCase)) | ||
| { | ||
| if (string.IsNullOrEmpty(this.PartnerAccountId) && string.IsNullOrEmpty(this.ActivationKey)) | ||
| { | ||
| throw new ArgumentException("For MultiCloud circuits, either PartnerAccountId or ActivationKey must be specified."); | ||
| } | ||
| if (!string.IsNullOrEmpty(this.PartnerAccountId) && !string.IsNullOrEmpty(this.ActivationKey)) | ||
| { | ||
| throw new ArgumentException("For MultiCloud circuits, only one of PartnerAccountId or ActivationKey can be specified, not both."); | ||
| } | ||
| if (!string.Equals(this.SkuFamily, "MeteredData", StringComparison.OrdinalIgnoreCase)) | ||
| { | ||
| throw new ArgumentException("For MultiCloud circuits, SkuFamily must be 'MeteredData'."); | ||
| } | ||
| } |
Comment on lines
+183
to
+185
| if (string.IsNullOrEmpty(this.PartnerAccountId) && string.IsNullOrEmpty(this.ActivationKey)) | ||
| { | ||
| throw new ArgumentException("For MultiCloud circuits, either PartnerAccountId or ActivationKey must be specified."); |
Comment on lines
+36
to
+44
| ### Partner Provider | ||
| ``` | ||
| New-AzExpressRouteCircuit -Name <String> -ResourceGroupName <String> -Location <String> [-SkuTier <String>] | ||
| [-SkuFamily <String>] -ServiceProviderName <String> -PeeringLocation <String> -BandwidthInMbps <Int32> | ||
| [-PartnerAccountId <String>] [-ActivationKey <String>] [-Peering <PSPeering[]>] [-Authorization <PSExpressRouteCircuitAuthorization[]>] | ||
| [-AllowClassicOperations <Boolean>] [-Tag <Hashtable>] [-Force] [-AsJob] | ||
| [-DefaultProfile <IAzureContextContainer>] [-WhatIf] [-Confirm] | ||
| [<CommonParameters>] | ||
| ``` |
Comment on lines
+68
to
+71
| [Ps1Xml(Target = ViewControl.Table)] | ||
| public string PartnerAccountId { get; set; } | ||
|
|
||
| public string ActivationKey { get; set; } |
Comment on lines
+228
to
+232
| /// <summary> | ||
| /// Gets or sets account ID of the customer on the partner cloud provider (for MultiCloud circuits). | ||
| /// </summary> | ||
| [Newtonsoft.Json.JsonProperty(PropertyName = "partnerAccountId")] | ||
| public string PartnerAccountId {get; set; } |
VeryEarly
reviewed
Jul 8, 2026
| /// <param name="enableDirectPortRateLimit">Flag denoting rate-limiting status of the ExpressRoute direct-port circuit. | ||
| /// </param> | ||
| public ExpressRouteCircuitPropertiesFormat(bool? allowClassicOperations = default(bool?), string circuitProvisioningState = default(string), string serviceProviderProvisioningState = default(string), System.Collections.Generic.IList<ExpressRouteCircuitAuthorization> authorizations = default(System.Collections.Generic.IList<ExpressRouteCircuitAuthorization>), System.Collections.Generic.IList<ExpressRouteCircuitPeering> peerings = default(System.Collections.Generic.IList<ExpressRouteCircuitPeering>), string serviceKey = default(string), string serviceProviderNotes = default(string), ExpressRouteCircuitServiceProviderProperties serviceProviderProperties = default(ExpressRouteCircuitServiceProviderProperties), SubResource expressRoutePort = default(SubResource), double? bandwidthInGbps = default(double?), int? stag = default(int?), string provisioningState = default(string), string gatewayManagerEtag = default(string), bool? globalReachEnabled = default(bool?), string authorizationKey = default(string), string authorizationStatus = default(string), bool? enableDirectPortRateLimit = default(bool?)) | ||
|
|
Collaborator
There was a problem hiding this comment.
please do not manually update sdk, perform full generation instead
VeryEarly
reviewed
Jul 8, 2026
| [<CommonParameters>] | ||
| ``` | ||
|
|
||
| ### Partner Provider |
Collaborator
There was a problem hiding this comment.
new parameters are not introduced in a new parameter set, instead they are for all parameter sets. Please properly regenerate help markdowns
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
This PR adds support for ExpressRoute MultiCloud circuits, enabling Azure customers to establish private connectivity between Azure and partner cloud providers (e.g., AWS).
Design Review: Issue #1554
Swagger PR: PR #28799
Changes Made
Cmdlet Enhancement:
New-AzExpressRouteCircuitMultiCloudas a new accepted value for-SkuTierparameter-PartnerAccountIdparameter: Account ID on partner cloud provider (for AWS provisioning)-ActivationKeyparameter: Pre-provisioned activation key from partner cloud-SkuFamilymust beMeteredDatafor MultiCloud circuitsOutput Model:
PSExpressRouteCircuitPartnerAccountIdproperty (visible in table output)ActivationKeyproperty (hidden from table for security)ResiliencyLevelproperty (visible in table output)SDK Model:
ExpressRouteCircuitPropertiesFormatDocumentation: Updated help files with parameter descriptions and two new usage examples
Awaiting
⏳ SDK Regeneration: This PR requires the swagger PR to merge to
azure-rest-api-specsmain. Once merged:src/Network/Network.Management.Sdk/README.mdwith new commit SHAMultiCloudenum valueMandatory Checklist
Please choose the target release of Azure PowerShell. (⚠️ Target release is a different concept from API readiness. Please click below links for details.)
Check this box to confirm: I have read the Submitting Changes section of
CONTRIBUTING.mdand reviewed the following information:ChangeLog.mdfile(s) appropriatelysrc/{{SERVICE}}/{{SERVICE}}/ChangeLog.md.## Upcoming Releaseheader in the past tense.ChangeLog.mdif no new release is required, such as fixing test case only.