From 022e829d92d6a1d19e4601cc9dfe26c06e1dc6e7 Mon Sep 17 00:00:00 2001 From: Arthur Ma Date: Thu, 5 Feb 2026 19:49:54 +0800 Subject: [PATCH 1/3] Update client settings for releasing DeploymentStatkcs .Net SDK --- .../deploymentStacks/back-compat.tsp | 72 ++++++-- .../deploymentStacks/client.tsp | 157 +++++++++++++++++- .../2022-08-01-preview/deploymentStacks.json | 45 +++-- .../deploymentStacks/routeTypes.tsp | 18 -- .../deploymentStacks/routes-whatIf.tsp | 36 ++-- .../deploymentStacks/routes.tsp | 44 +++-- .../stable/2024-03-01/deploymentStacks.json | 52 ++++-- .../stable/2025-07-01/deploymentStacks.json | 87 +++++++--- .../deploymentStacks/tspconfig.yaml | 7 +- 9 files changed, 389 insertions(+), 129 deletions(-) diff --git a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/back-compat.tsp b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/back-compat.tsp index 5d5dcb14bceb..ff813982f302 100644 --- a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/back-compat.tsp +++ b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/back-compat.tsp @@ -35,18 +35,25 @@ namespace Microsoft.Resources.DeploymentStacks; // Client names and locations for ResourceGroup operations @@clientName(DeploymentStacksAtResourceGroup.get, "getAtResourceGroup"); -@@clientLocation(DeploymentStacksAtResourceGroup.get, "DeploymentStacks"); +@@clientLocation(DeploymentStacksAtResourceGroup.get, + "DeploymentStacks", + "!csharp" +); @@clientName(DeploymentStacksAtResourceGroup.list, "listAtResourceGroup"); -@@clientLocation(DeploymentStacksAtResourceGroup.list, "DeploymentStacks"); +@@clientLocation(DeploymentStacksAtResourceGroup.list, + "DeploymentStacks", + "!csharp" +); @@clientName(DeploymentStacksAtResourceGroup.validateStack, "validateStackAtResourceGroup" ); @@clientLocation(DeploymentStacksAtResourceGroup.validateStack, - "DeploymentStacks" + "DeploymentStacks", + "!csharp" ); @@clientName(DeploymentStacksAtResourceGroup.createOrUpdate, @@ -54,36 +61,48 @@ namespace Microsoft.Resources.DeploymentStacks; ); @@clientLocation(DeploymentStacksAtResourceGroup.createOrUpdate, - "DeploymentStacks" + "DeploymentStacks", + "!csharp" ); @@clientName(DeploymentStacksAtResourceGroup.delete, "deleteAtResourceGroup"); -@@clientLocation(DeploymentStacksAtResourceGroup.delete, "DeploymentStacks"); +@@clientLocation(DeploymentStacksAtResourceGroup.delete, + "DeploymentStacks", + "!csharp" +); @@clientName(DeploymentStacksAtResourceGroup.exportTemplate, "exportTemplateAtResourceGroup" ); @@clientLocation(DeploymentStacksAtResourceGroup.exportTemplate, - "DeploymentStacks" + "DeploymentStacks", + "!csharp" ); // Client names and locations for Subscription operations @@clientName(DeploymentStacksAtSubscription.get, "getAtSubscription"); -@@clientLocation(DeploymentStacksAtSubscription.get, "DeploymentStacks"); +@@clientLocation(DeploymentStacksAtSubscription.get, + "DeploymentStacks", + "!csharp" +); @@clientName(DeploymentStacksAtSubscription.list, "listAtSubscription"); -@@clientLocation(DeploymentStacksAtSubscription.list, "DeploymentStacks"); +@@clientLocation(DeploymentStacksAtSubscription.list, + "DeploymentStacks", + "!csharp" +); @@clientName(DeploymentStacksAtSubscription.validateStack, "validateStackAtSubscription" ); @@clientLocation(DeploymentStacksAtSubscription.validateStack, - "DeploymentStacks" + "DeploymentStacks", + "!csharp" ); @@clientName(DeploymentStacksAtSubscription.createOrUpdate, @@ -91,36 +110,48 @@ namespace Microsoft.Resources.DeploymentStacks; ); @@clientLocation(DeploymentStacksAtSubscription.createOrUpdate, - "DeploymentStacks" + "DeploymentStacks", + "!csharp" ); @@clientName(DeploymentStacksAtSubscription.delete, "deleteAtSubscription"); -@@clientLocation(DeploymentStacksAtSubscription.delete, "DeploymentStacks"); +@@clientLocation(DeploymentStacksAtSubscription.delete, + "DeploymentStacks", + "!csharp" +); @@clientName(DeploymentStacksAtSubscription.exportTemplate, "exportTemplateAtSubscription" ); @@clientLocation(DeploymentStacksAtSubscription.exportTemplate, - "DeploymentStacks" + "DeploymentStacks", + "!csharp" ); // Client names and locations for ManagementGroup operations @@clientName(DeploymentStacksAtManagementGroup.get, "getAtManagementGroup"); -@@clientLocation(DeploymentStacksAtManagementGroup.get, "DeploymentStacks"); +@@clientLocation(DeploymentStacksAtManagementGroup.get, + "DeploymentStacks", + "!csharp" +); @@clientName(DeploymentStacksAtManagementGroup.list, "listAtManagementGroup"); -@@clientLocation(DeploymentStacksAtManagementGroup.list, "DeploymentStacks"); +@@clientLocation(DeploymentStacksAtManagementGroup.list, + "DeploymentStacks", + "!csharp" +); @@clientName(DeploymentStacksAtManagementGroup.validateStack, "validateStackAtManagementGroup" ); @@clientLocation(DeploymentStacksAtManagementGroup.validateStack, - "DeploymentStacks" + "DeploymentStacks", + "!csharp" ); @@clientName(DeploymentStacksAtManagementGroup.createOrUpdate, @@ -128,19 +159,24 @@ namespace Microsoft.Resources.DeploymentStacks; ); @@clientLocation(DeploymentStacksAtManagementGroup.createOrUpdate, - "DeploymentStacks" + "DeploymentStacks", + "!csharp" ); @@clientName(DeploymentStacksAtManagementGroup.delete, "deleteAtManagementGroup" ); -@@clientLocation(DeploymentStacksAtManagementGroup.delete, "DeploymentStacks"); +@@clientLocation(DeploymentStacksAtManagementGroup.delete, + "DeploymentStacks", + "!csharp" +); @@clientName(DeploymentStacksAtManagementGroup.exportTemplate, "exportTemplateAtManagementGroup" ); @@clientLocation(DeploymentStacksAtManagementGroup.exportTemplate, - "DeploymentStacks" + "DeploymentStacks", + "!csharp" ); diff --git a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/client.tsp b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/client.tsp index ca6dbd0f8a0c..37dff61b24a1 100644 --- a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/client.tsp +++ b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/client.tsp @@ -2,13 +2,10 @@ import "./main.tsp"; import "@azure-tools/typespec-client-generator-core"; using Azure.ClientGenerator.Core; +using Azure.Core; +using Azure.ResourceManager; using Microsoft.Resources.DeploymentStacks; - -@@clientName(DeploymentParameter, "DeploymentParameterItem", "csharp"); // .NET SDK validation: cannot end in "Parameter" -@@clientName(DeploymentStackTemplateDefinition, - "DeploymentStackTemplateExportResult", - "csharp" -); // .NET SDK validation: cannot end in "Definition" +using TypeSpec.Versioning; @@alternateType(DeploymentStackProperties.template, unknown, "go"); @@alternateType(DeploymentStackProperties.outputs, unknown, "go"); @@ -19,3 +16,151 @@ using Microsoft.Resources.DeploymentStacks; @@alternateType(DeploymentStackProperties.template, unknown, "java"); @@alternateType(DeploymentStackProperties.outputs, unknown, "java"); @@alternateType(DeploymentStackTemplateDefinition.template, unknown, "java"); + +// CSharp SDK: Generate scoped resources, and make it backwards compatible with existing patterns +#suppress "@azure-tools/typespec-azure-resource-manager/missing-operations-endpoint" "Operations API defined separately - namespace is shared between multiple services." +namespace Microsoft.Resources.DeploymentStacks { + // DeploymentStacks + @@scope(DeploymentStacksAtResourceGroup.get, "!csharp"); + @@scope(DeploymentStacksAtResourceGroup.list, "!csharp"); + @@scope(DeploymentStacksAtResourceGroup.validateStack, "!csharp"); + @@scope(DeploymentStacksAtResourceGroup.createOrUpdate, "!csharp"); + @@scope(DeploymentStacksAtResourceGroup.exportTemplate, "!csharp"); + @@scope(DeploymentStacksAtResourceGroup.delete, "!csharp"); + @@scope(DeploymentStacksAtSubscription.get, "!csharp"); + @@scope(DeploymentStacksAtSubscription.list, "!csharp"); + @@scope(DeploymentStacksAtSubscription.validateStack, "!csharp"); + @@scope(DeploymentStacksAtSubscription.createOrUpdate, "!csharp"); + @@scope(DeploymentStacksAtSubscription.exportTemplate, "!csharp"); + @@scope(DeploymentStacksAtSubscription.delete, "!csharp"); + @@scope(DeploymentStacksAtManagementGroup.get, "!csharp"); + @@scope(DeploymentStacksAtManagementGroup.list, "!csharp"); + @@scope(DeploymentStacksAtManagementGroup.validateStack, "!csharp"); + @@scope(DeploymentStacksAtManagementGroup.createOrUpdate, "!csharp"); + @@scope(DeploymentStacksAtManagementGroup.exportTemplate, "!csharp"); + @@scope(DeploymentStacksAtManagementGroup.delete, "!csharp"); + + @@armResourceOperations(DeploymentStacksAtScope); + interface DeploymentStacksAtScope + extends DeploymentStackCommonOps< + Extension.ScopeParameter, + "DeploymentStack" + > {} + + @@scope(DeploymentStacksAtScope.get, "csharp"); + @@scope(DeploymentStacksAtScope.list, "csharp"); + @@scope(DeploymentStacksAtScope.validateStack, "csharp"); + @@scope(DeploymentStacksAtScope.createOrUpdate, "csharp"); + @@scope(DeploymentStacksAtScope.exportTemplate, "csharp"); + @@scope(DeploymentStacksAtScope.delete, "csharp"); + + // DeploymentStacksWhatIfResults + @@scope(DeploymentStacksWhatIfResultsAtResourceGroup.get, "!csharp"); + @@scope(DeploymentStacksWhatIfResultsAtResourceGroup.list, "!csharp"); + @@scope(DeploymentStacksWhatIfResultsAtResourceGroup.createOrUpdate, + "!csharp" + ); + @@scope(DeploymentStacksWhatIfResultsAtResourceGroup.delete, "!csharp"); + @@scope(DeploymentStacksWhatIfResultsAtResourceGroup.whatIf, "!csharp"); + @@scope(DeploymentStacksWhatIfResultsAtSubscription.get, "!csharp"); + @@scope(DeploymentStacksWhatIfResultsAtSubscription.list, "!csharp"); + @@scope(DeploymentStacksWhatIfResultsAtSubscription.createOrUpdate, + "!csharp" + ); + @@scope(DeploymentStacksWhatIfResultsAtSubscription.delete, "!csharp"); + @@scope(DeploymentStacksWhatIfResultsAtSubscription.whatIf, "!csharp"); + @@scope(DeploymentStacksWhatIfResultsAtManagementGroup.get, "!csharp"); + @@scope(DeploymentStacksWhatIfResultsAtManagementGroup.list, "!csharp"); + @@scope(DeploymentStacksWhatIfResultsAtManagementGroup.createOrUpdate, + "!csharp" + ); + @@scope(DeploymentStacksWhatIfResultsAtManagementGroup.delete, "!csharp"); + @@scope(DeploymentStacksWhatIfResultsAtManagementGroup.whatIf, "!csharp"); + + @@armResourceOperations(DeploymentStacksWhatIfAtScope); + @@added(DeploymentStacksWhatIfAtScope, Versions.v2025_07_01); + interface DeploymentStacksWhatIfAtScope + extends DeploymentStackWhatIfCommon< + Extension.ScopeParameter, + "deploymentStackWhatIfResult" + > {} + + @@scope(DeploymentStacksWhatIfAtScope.get, "csharp"); + @@scope(DeploymentStacksWhatIfAtScope.list, "csharp"); + @@scope(DeploymentStacksWhatIfAtScope.createOrUpdate, "csharp"); + @@scope(DeploymentStacksWhatIfAtScope.delete, "csharp"); + @@scope(DeploymentStacksWhatIfAtScope.whatIf, "csharp"); +} +@@clientName(DeploymentParameter, "DeploymentParameterItem", "csharp"); // .NET SDK validation: cannot end in "Parameter" +@@clientName(DeploymentStackTemplateDefinition, + "DeploymentStackTemplateExportResult", + "csharp" +); // .NET SDK validation: cannot end in "Definition" +@@clientName(DeploymentStacksWhatIfResult, + "DeploymentStackWhatIfResult", + "csharp" +); +@@clientName(DeploymentStacksWhatIfResultProperties, + "DeploymentStackWhatIfResultProperties", + "csharp" +); +@@alternateType(DeploymentStackProperties.duration, duration, "csharp"); +@@alternateType(DeploymentStackProperties.outputs, unknown, "csharp"); +@@alternateType(DeploymentStack.location, azureLocation, "csharp"); +@@alternateType(DeploymentStackSharedProperties.template, unknown, "csharp"); +@@alternateType(DeploymentStacksParametersLink.uri, url, "csharp"); +@@alternateType(DeploymentStacksTemplateLink.uri, url, "csharp"); +@@alternateType(ResourceReference.id, armResourceIdentifier, "csharp"); +@@alternateType(ResourceReference.type, armResourceType, "csharp"); +@@alternateType(ResourceReference.identifiers, armResourceIdentifier, "csharp"); +@@clientName(DeploymentStacksWhatIfResultProperties.deploymentStackLastModified, + "DeploymentStackLastModifiedOn", + "csharp" +); +@@alternateType(DeploymentStacksWhatIfResultProperties.deploymentStackResourceId, + armResourceIdentifier, + "csharp" +); +@@alternateType(KeyVaultReference.id, armResourceIdentifier, "csharp"); +@@alternateType(DeploymentStacksWhatIfResourceChange.resourceConfigurationChanges, + DeploymentStacksChangeDelta, + "csharp" +); +@@alternateType(DeploymentStackTemplateDefinition.template, unknown, "csharp"); +@@usage(DeploymentStackValidateProperties, + Usage.input | Usage.output, + "csharp" +); +@@usage(ManagedResourceReference, Usage.input | Usage.output, "csharp"); +@@usage(ResourceReference, Usage.input | Usage.output, "csharp"); +@@usage(ResourceReferenceExtended, Usage.input | Usage.output, "csharp"); +@@clientName(ValidationLevel, "DeploymentStackValidationLevel", "csharp"); +@@clientName(DenySettings, "DeploymentStackDenySettings", "csharp"); +@@clientName(DenySettingsMode, "DeploymentStackDenySettingsMode", "csharp"); +@@clientName(DenyStatusMode, "DeploymentStackDenyStatusMode", "csharp"); +@@clientName(Azure.ResourceManager.Foundations.ErrorAdditionalInfo, + "DeploymentStackAdditionalErrorInfo", + "csharp" +); +#suppress "@azure-tools/typespec-azure-core/no-legacy-usage" "update base model for SDK backward compatibility" +@@Azure.ClientGenerator.Core.Legacy.hierarchyBuilding(DeploymentStackValidateResult, + Azure.ResourceManager.Foundations.ProxyResource, + "csharp" +); + +// We add this model in this namespace in order to replace some models with this model via alternateType decorator +namespace Azure.ResourceManager.Models { + /** represents a reference to an existing resource by its id */ + model SubResource { + /** the id */ + id?: armResourceIdentifier; + } +} +@@alternateType(DeploymentStackProperties.deletedResources, + Azure.ResourceManager.Models.SubResource[], + "csharp" +); +@@alternateType(DeploymentStackProperties.detachedResources, + Azure.ResourceManager.Models.SubResource[], + "csharp" +); diff --git a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/preview/2022-08-01-preview/deploymentStacks.json b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/preview/2022-08-01-preview/deploymentStacks.json index 73db2269828b..832460646f6f 100644 --- a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/preview/2022-08-01-preview/deploymentStacks.json +++ b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/preview/2022-08-01-preview/deploymentStacks.json @@ -62,7 +62,12 @@ "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" }, { - "$ref": "#/parameters/ManagementGroupIdParameter" + "name": "managementGroupId", + "in": "path", + "description": "The management group ID.", + "required": true, + "type": "string", + "minLength": 1 } ], "responses": { @@ -101,7 +106,12 @@ "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" }, { - "$ref": "#/parameters/ManagementGroupIdParameter" + "name": "managementGroupId", + "in": "path", + "description": "The management group ID.", + "required": true, + "type": "string", + "minLength": 1 }, { "name": "deploymentStackName", @@ -145,7 +155,12 @@ "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" }, { - "$ref": "#/parameters/ManagementGroupIdParameter" + "name": "managementGroupId", + "in": "path", + "description": "The management group ID.", + "required": true, + "type": "string", + "minLength": 1 }, { "name": "deploymentStackName", @@ -219,7 +234,12 @@ "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" }, { - "$ref": "#/parameters/ManagementGroupIdParameter" + "name": "managementGroupId", + "in": "path", + "description": "The management group ID.", + "required": true, + "type": "string", + "minLength": 1 }, { "name": "deploymentStackName", @@ -292,7 +312,12 @@ "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" }, { - "$ref": "#/parameters/ManagementGroupIdParameter" + "name": "managementGroupId", + "in": "path", + "description": "The management group ID.", + "required": true, + "type": "string", + "minLength": 1 }, { "name": "deploymentStackName", @@ -1579,16 +1604,6 @@ }, "x-ms-parameter-location": "method", "x-ms-client-name": "unmanageActionResources" - }, - "ManagementGroupIdParameter": { - "name": "managementGroupId", - "in": "path", - "description": "The name of the management group. The name is case insensitive.", - "required": true, - "type": "string", - "minLength": 1, - "maxLength": 90, - "x-ms-parameter-location": "method" } } } diff --git a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/routeTypes.tsp b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/routeTypes.tsp index cc467b208630..91d85f465474 100644 --- a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/routeTypes.tsp +++ b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/routeTypes.tsp @@ -5,27 +5,9 @@ import "@typespec/rest"; import "./models.tsp"; using TypeSpec.Http; -using TypeSpec.Rest; namespace Microsoft.Resources.DeploymentStacks; -/** - * The management group name path parameter. - */ -model ManagementGroupIdParameter { - /** The name of the management group. The name is case insensitive. */ - @path - @minLength(1) - @maxLength(90) - @segment("providers/Microsoft.Management/managementGroups") - managementGroupId: string; -} - -model ManagementGroupIdBaseParameters - is Azure.ResourceManager.Foundations.TenantBaseParameters { - ...ManagementGroupIdParameter; -} - @doc("Resource validation failed.") // TODO: This property isn't being output in the open API definition. Not sure if it's obsolete now. It was explicitly set on the 400 responses to `false` and I believe it influences SDK code generation by returning a response vs throwing an exception. //@extension("x-ms-error-response", false) diff --git a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/routes-whatIf.tsp b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/routes-whatIf.tsp index b9e14c122d86..3318307305c5 100644 --- a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/routes-whatIf.tsp +++ b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/routes-whatIf.tsp @@ -15,40 +15,48 @@ namespace Microsoft.Resources.DeploymentStacks; // Interface for all what-if operations for deployment stacks. @added(Versions.v2025_07_01) -interface DeploymentStackWhatIfCommon { +interface DeploymentStackWhatIfCommon< + Scope extends Azure.ResourceManager.Foundations.SimpleResource, + ResourceName extends valueof string = "" +> { /** Gets the Deployment stack with the given name. */ - get is ArmResourceRead< + get is Extension.Read< + Scope, DeploymentStacksWhatIfResult, - BaseParameters = TBaseParams + OverrideResourceName = ResourceName >; /** Lists Deployment stacks at the specified scope. */ - list is ArmResourceListByParent< + list is Extension.ListByTarget< + Scope, DeploymentStacksWhatIfResult, - BaseParameters = TBaseParams + OverrideResourceName = ResourceName >; /** Creates or updates a Deployment stack at the specified scope. */ - createOrUpdate is ArmResourceCreateOrReplaceAsync< + createOrUpdate is Extension.CreateOrReplaceAsync< + Scope, DeploymentStacksWhatIfResult, - BaseParameters = TBaseParams + OverrideResourceName = ResourceName >; /** Deletes a Deployment stack by name at the specified scope. When operation completes, status code 200 returned without content. */ - delete is ArmResourceDeleteWithoutOkAsync< + delete is Extension.DeleteWithoutOkAsync< + Scope, DeploymentStacksWhatIfResult, - BaseParameters = TBaseParams, + OverrideResourceName = ResourceName, Parameters = ActionOnUnmanageDeleteParameters, Response = ArmDeletedResponse | ArmDeletedNoContentResponse >; /** Returns property-level changes that will be made by the deployment if executed. */ @action("whatIf") - whatIf is ArmResourceActionAsync< + whatIf is Extension.ActionAsync< + Scope, DeploymentStacksWhatIfResult, void, DeploymentStacksWhatIfResult, - BaseParameters = TBaseParams + OverrideResourceName = ResourceName >; } @@ -56,16 +64,16 @@ interface DeploymentStackWhatIfCommon {} + extends DeploymentStackWhatIfCommon {} @armResourceOperations @added(Versions.v2025_07_01) @tag("DeploymentStacksWhatIfResultsAtSubscription") interface DeploymentStacksWhatIfResultsAtSubscription - extends DeploymentStackWhatIfCommon {} + extends DeploymentStackWhatIfCommon {} @armResourceOperations @added(Versions.v2025_07_01) @tag("DeploymentStacksWhatIfResultsAtManagementGroup") interface DeploymentStacksWhatIfResultsAtManagementGroup - extends DeploymentStackWhatIfCommon {} + extends DeploymentStackWhatIfCommon> {} diff --git a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/routes.tsp b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/routes.tsp index 25f91205cdf2..575a9542a53d 100644 --- a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/routes.tsp +++ b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/routes.tsp @@ -16,64 +16,76 @@ namespace Microsoft.Resources.DeploymentStacks; // Interface for all stack operations with the scoping parameterized. // For some reason, the ArmResourceActionAsync type requires the base params extends this reflection model type. -interface DeploymentStackCommonOps { +interface DeploymentStackCommonOps< + Scope extends Azure.ResourceManager.Foundations.SimpleResource, + ResourceName extends valueof string = "" +> { /** Gets the Deployment stack with the given name. */ - get is ArmResourceRead; + get is Extension.Read< + Scope, + DeploymentStack, + OverrideResourceName = ResourceName + >; /** Lists Deployment stacks at the specified scope. */ - list is ArmResourceListByParent< + list is Extension.ListByTarget< + Scope, DeploymentStack, - BaseParameters = TBaseParams + OverrideResourceName = ResourceName >; /** Runs preflight validation on the Deployment stack template at the specified scope to verify its acceptance to Azure Resource Manager. */ #suppress "@azure-tools/typespec-azure-resource-manager/arm-post-operation-response-codes" "Back compat. There's a 400 response for validation failures." @added(Versions.v2024_03_01) @action("validate") - validateStack is ArmResourceActionAsync< + validateStack is Extension.ActionAsync< + Scope, DeploymentStack, DeploymentStack, - Response = DeploymentStackValidateResult, - BaseParameters = TBaseParams, + DeploymentStackValidateResult, + OverrideResourceName = ResourceName, Error = ErrorResponse | ValidationBadRequestResponse >; /** Creates or updates a Deployment stack at the specified scope. */ - createOrUpdate is ArmResourceCreateOrReplaceAsync< + createOrUpdate is Extension.CreateOrReplaceAsync< + Scope, DeploymentStack, - BaseParameters = TBaseParams + OverrideResourceName = ResourceName >; /** Deletes a Deployment stack by name at the specified scope. When operation completes, status code 200 returned without content. */ #suppress "@azure-tools/typespec-azure-resource-manager/arm-delete-operation-response-codes" "Back compat. Synchronous deletes are possible." - delete is ArmResourceDeleteWithoutOkAsync< + delete is Extension.DeleteWithoutOkAsync< + Scope, DeploymentStack, - BaseParameters = TBaseParams, + OverrideResourceName = ResourceName, Parameters = ActionOnUnmanageDeleteParameters, Response = ArmDeletedResponse | ArmDeleteAcceptedLroResponse | ArmDeletedNoContentResponse >; /** Exports the template used to create the Deployment stack at the specified scope. */ @action("exportTemplate") - exportTemplate is ArmResourceActionSync< + exportTemplate is Extension.ActionSync< + Scope, DeploymentStack, void, ArmResponse, - BaseParameters = TBaseParams + OverrideResourceName = ResourceName >; } @armResourceOperations @tag("DeploymentStacksAtResourceGroup") interface DeploymentStacksAtResourceGroup - extends DeploymentStackCommonOps {} + extends DeploymentStackCommonOps {} @armResourceOperations @tag("DeploymentStacksAtSubscription") interface DeploymentStacksAtSubscription - extends DeploymentStackCommonOps {} + extends DeploymentStackCommonOps {} @armResourceOperations @tag("DeploymentStacksAtManagementGroup") interface DeploymentStacksAtManagementGroup - extends DeploymentStackCommonOps {} + extends DeploymentStackCommonOps> {} diff --git a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/stable/2024-03-01/deploymentStacks.json b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/stable/2024-03-01/deploymentStacks.json index 9429220800d7..f9d7ae8a16ac 100644 --- a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/stable/2024-03-01/deploymentStacks.json +++ b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/stable/2024-03-01/deploymentStacks.json @@ -62,7 +62,12 @@ "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" }, { - "$ref": "#/parameters/ManagementGroupIdParameter" + "name": "managementGroupId", + "in": "path", + "description": "The management group ID.", + "required": true, + "type": "string", + "minLength": 1 } ], "responses": { @@ -101,7 +106,12 @@ "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" }, { - "$ref": "#/parameters/ManagementGroupIdParameter" + "name": "managementGroupId", + "in": "path", + "description": "The management group ID.", + "required": true, + "type": "string", + "minLength": 1 }, { "name": "deploymentStackName", @@ -145,7 +155,12 @@ "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" }, { - "$ref": "#/parameters/ManagementGroupIdParameter" + "name": "managementGroupId", + "in": "path", + "description": "The management group ID.", + "required": true, + "type": "string", + "minLength": 1 }, { "name": "deploymentStackName", @@ -219,7 +234,12 @@ "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" }, { - "$ref": "#/parameters/ManagementGroupIdParameter" + "name": "managementGroupId", + "in": "path", + "description": "The management group ID.", + "required": true, + "type": "string", + "minLength": 1 }, { "name": "deploymentStackName", @@ -295,7 +315,12 @@ "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" }, { - "$ref": "#/parameters/ManagementGroupIdParameter" + "name": "managementGroupId", + "in": "path", + "description": "The management group ID.", + "required": true, + "type": "string", + "minLength": 1 }, { "name": "deploymentStackName", @@ -341,7 +366,12 @@ "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" }, { - "$ref": "#/parameters/ManagementGroupIdParameter" + "name": "managementGroupId", + "in": "path", + "description": "The management group ID.", + "required": true, + "type": "string", + "minLength": 1 }, { "name": "deploymentStackName", @@ -1924,16 +1954,6 @@ }, "x-ms-parameter-location": "method", "x-ms-client-name": "unmanageActionResources" - }, - "ManagementGroupIdParameter": { - "name": "managementGroupId", - "in": "path", - "description": "The name of the management group. The name is case insensitive.", - "required": true, - "type": "string", - "minLength": 1, - "maxLength": 90, - "x-ms-parameter-location": "method" } } } diff --git a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/stable/2025-07-01/deploymentStacks.json b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/stable/2025-07-01/deploymentStacks.json index 5b118b8b948e..ee9a952d48c1 100644 --- a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/stable/2025-07-01/deploymentStacks.json +++ b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/stable/2025-07-01/deploymentStacks.json @@ -71,7 +71,12 @@ "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" }, { - "$ref": "#/parameters/ManagementGroupIdParameter" + "name": "managementGroupId", + "in": "path", + "description": "The management group ID.", + "required": true, + "type": "string", + "minLength": 1 } ], "responses": { @@ -110,7 +115,12 @@ "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" }, { - "$ref": "#/parameters/ManagementGroupIdParameter" + "name": "managementGroupId", + "in": "path", + "description": "The management group ID.", + "required": true, + "type": "string", + "minLength": 1 }, { "name": "deploymentStackName", @@ -154,7 +164,12 @@ "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" }, { - "$ref": "#/parameters/ManagementGroupIdParameter" + "name": "managementGroupId", + "in": "path", + "description": "The management group ID.", + "required": true, + "type": "string", + "minLength": 1 }, { "name": "deploymentStackName", @@ -228,7 +243,12 @@ "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" }, { - "$ref": "#/parameters/ManagementGroupIdParameter" + "name": "managementGroupId", + "in": "path", + "description": "The management group ID.", + "required": true, + "type": "string", + "minLength": 1 }, { "name": "deploymentStackName", @@ -307,7 +327,12 @@ "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" }, { - "$ref": "#/parameters/ManagementGroupIdParameter" + "name": "managementGroupId", + "in": "path", + "description": "The management group ID.", + "required": true, + "type": "string", + "minLength": 1 }, { "name": "deploymentStackName", @@ -353,7 +378,12 @@ "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" }, { - "$ref": "#/parameters/ManagementGroupIdParameter" + "name": "managementGroupId", + "in": "path", + "description": "The management group ID.", + "required": true, + "type": "string", + "minLength": 1 }, { "name": "deploymentStackName", @@ -432,7 +462,12 @@ "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" }, { - "$ref": "#/parameters/ManagementGroupIdParameter" + "name": "managementGroupId", + "in": "path", + "description": "The management group ID.", + "required": true, + "type": "string", + "minLength": 1 } ], "responses": { @@ -471,7 +506,12 @@ "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" }, { - "$ref": "#/parameters/ManagementGroupIdParameter" + "name": "managementGroupId", + "in": "path", + "description": "The management group ID.", + "required": true, + "type": "string", + "minLength": 1 }, { "name": "deploymentStacksWhatIfResultName", @@ -515,7 +555,12 @@ "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" }, { - "$ref": "#/parameters/ManagementGroupIdParameter" + "name": "managementGroupId", + "in": "path", + "description": "The management group ID.", + "required": true, + "type": "string", + "minLength": 1 }, { "name": "deploymentStacksWhatIfResultName", @@ -589,7 +634,12 @@ "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" }, { - "$ref": "#/parameters/ManagementGroupIdParameter" + "name": "managementGroupId", + "in": "path", + "description": "The management group ID.", + "required": true, + "type": "string", + "minLength": 1 }, { "name": "deploymentStacksWhatIfResultName", @@ -650,7 +700,12 @@ "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" }, { - "$ref": "#/parameters/ManagementGroupIdParameter" + "name": "managementGroupId", + "in": "path", + "description": "The management group ID.", + "required": true, + "type": "string", + "minLength": 1 }, { "name": "deploymentStacksWhatIfResultName", @@ -3753,16 +3808,6 @@ }, "x-ms-parameter-location": "method", "x-ms-client-name": "unmanageActionResourcesWithoutDeleteSupport" - }, - "ManagementGroupIdParameter": { - "name": "managementGroupId", - "in": "path", - "description": "The name of the management group. The name is case insensitive.", - "required": true, - "type": "string", - "minLength": 1, - "maxLength": 90, - "x-ms-parameter-location": "method" } } } diff --git a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/tspconfig.yaml b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/tspconfig.yaml index ddbb86ae993e..321058068d31 100644 --- a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/tspconfig.yaml +++ b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/tspconfig.yaml @@ -12,12 +12,9 @@ options: arm-types-dir: "{project-root}/../../../../common-types/resource-management" examples-dir: "{project-root}/examples" use-read-only-status-schema: true # https://azure.github.io/typespec-azure/docs/troubleshoot/status-read-only-error/ - "@azure-tools/typespec-csharp": - flavor: azure - emitter-output-dir: "{output-dir}/{service-dir}/{namespace}" - clear-output-folder: true - model-namespace: true + "@azure-typespec/http-client-csharp-mgmt": namespace: "Azure.ResourceManager.Resources.DeploymentStacks" + emitter-output-dir: "{output-dir}/{service-dir}/{namespace}" "@azure-tools/typespec-python": emitter-output-dir: "{output-dir}/{service-dir}/azure-mgmt-resource-deploymentstacks" namespace: "azure.mgmt.resource.deploymentstacks" From 3b6beff46b4db857ac7a11d67feb447b30c62679 Mon Sep 17 00:00:00 2001 From: Arthur Ma Date: Fri, 6 Feb 2026 00:01:52 +0800 Subject: [PATCH 2/3] update --- .../Microsoft.Resources/deploymentStacks/client.tsp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/client.tsp b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/client.tsp index 37dff61b24a1..31530804fddf 100644 --- a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/client.tsp +++ b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/client.tsp @@ -107,6 +107,7 @@ namespace Microsoft.Resources.DeploymentStacks { @@alternateType(DeploymentStackProperties.duration, duration, "csharp"); @@alternateType(DeploymentStackProperties.outputs, unknown, "csharp"); @@alternateType(DeploymentStack.location, azureLocation, "csharp"); +@@alternateType(DeploymentStacksWhatIfResult.location, azureLocation, "csharp"); @@alternateType(DeploymentStackSharedProperties.template, unknown, "csharp"); @@alternateType(DeploymentStacksParametersLink.uri, url, "csharp"); @@alternateType(DeploymentStacksTemplateLink.uri, url, "csharp"); @@ -142,6 +143,14 @@ namespace Microsoft.Resources.DeploymentStacks { "DeploymentStackAdditionalErrorInfo", "csharp" ); +@@clientName(DeploymentStacksDeleteDetachEnum, + "DeploymentStacksDeleteDetachMode", + "csharp" +); +@@clientName(DeploymentStacksResourcesWithoutDeleteSupportEnum, + "DeploymentStacksResourcesWithoutDeleteSupportMode", + "csharp" +); #suppress "@azure-tools/typespec-azure-core/no-legacy-usage" "update base model for SDK backward compatibility" @@Azure.ClientGenerator.Core.Legacy.hierarchyBuilding(DeploymentStackValidateResult, Azure.ResourceManager.Foundations.ProxyResource, From 846c59836b31534c716090681a023dd97d9ad85a Mon Sep 17 00:00:00 2001 From: Arthur Ma Date: Fri, 6 Feb 2026 01:14:09 +0800 Subject: [PATCH 3/3] Merge https://github.com/Azure/azure-rest-api-specs/pull/39987 --- .../deploymentStacks/client.tsp | 37 +--- .../deploymentStacks/models.tsp | 65 ++++-- .../2022-08-01-preview/deploymentStacks.json | 132 ++++++++---- .../stable/2024-03-01/deploymentStacks.json | 135 ++++++++---- .../stable/2025-07-01/deploymentStacks.json | 194 +++++++++++------- 5 files changed, 363 insertions(+), 200 deletions(-) diff --git a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/client.tsp b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/client.tsp index 31530804fddf..8c8da3594ca2 100644 --- a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/client.tsp +++ b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/client.tsp @@ -113,7 +113,7 @@ namespace Microsoft.Resources.DeploymentStacks { @@alternateType(DeploymentStacksTemplateLink.uri, url, "csharp"); @@alternateType(ResourceReference.id, armResourceIdentifier, "csharp"); @@alternateType(ResourceReference.type, armResourceType, "csharp"); -@@alternateType(ResourceReference.identifiers, armResourceIdentifier, "csharp"); +@@alternateType(ResourceReference.identifiers, unknown, "csharp"); @@clientName(DeploymentStacksWhatIfResultProperties.deploymentStackLastModified, "DeploymentStackLastModifiedOn", "csharp" @@ -133,8 +133,16 @@ namespace Microsoft.Resources.DeploymentStacks { "csharp" ); @@usage(ManagedResourceReference, Usage.input | Usage.output, "csharp"); -@@usage(ResourceReference, Usage.input | Usage.output, "csharp"); @@usage(ResourceReferenceExtended, Usage.input | Usage.output, "csharp"); +@@clientName(ResourceReference, "DeploymentStackResourceReference", "csharp"); +@@clientName(ManagedResourceReference, + "DeploymentStackManagedResourceReference", + "csharp" +); +@@clientName(ResourceReferenceExtended, + "DeploymentStackResourceReferenceExtended", + "csharp" +); @@clientName(ValidationLevel, "DeploymentStackValidationLevel", "csharp"); @@clientName(DenySettings, "DeploymentStackDenySettings", "csharp"); @@clientName(DenySettingsMode, "DeploymentStackDenySettingsMode", "csharp"); @@ -143,33 +151,8 @@ namespace Microsoft.Resources.DeploymentStacks { "DeploymentStackAdditionalErrorInfo", "csharp" ); -@@clientName(DeploymentStacksDeleteDetachEnum, - "DeploymentStacksDeleteDetachMode", - "csharp" -); -@@clientName(DeploymentStacksResourcesWithoutDeleteSupportEnum, - "DeploymentStacksResourcesWithoutDeleteSupportMode", - "csharp" -); #suppress "@azure-tools/typespec-azure-core/no-legacy-usage" "update base model for SDK backward compatibility" @@Azure.ClientGenerator.Core.Legacy.hierarchyBuilding(DeploymentStackValidateResult, Azure.ResourceManager.Foundations.ProxyResource, "csharp" ); - -// We add this model in this namespace in order to replace some models with this model via alternateType decorator -namespace Azure.ResourceManager.Models { - /** represents a reference to an existing resource by its id */ - model SubResource { - /** the id */ - id?: armResourceIdentifier; - } -} -@@alternateType(DeploymentStackProperties.deletedResources, - Azure.ResourceManager.Models.SubResource[], - "csharp" -); -@@alternateType(DeploymentStackProperties.detachedResources, - Azure.ResourceManager.Models.SubResource[], - "csharp" -); diff --git a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/models.tsp b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/models.tsp index 31093375cf6f..597e46169bbb 100644 --- a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/models.tsp +++ b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/models.tsp @@ -41,15 +41,41 @@ alias DeploymentStackNameParameter = ResourceNameParameter< @@doc(DeploymentStack.name, "Name of the deployment stack."); /** - * Specifies an action for a newly unmanaged resource. Delete will attempt to delete the resource from Azure. Detach will leave the resource in it's current state. + * Specifies an action for a newly unmanaged resource. */ -union DeploymentStacksDeleteDetachEnum { +union UnmanageActionResourceMode { string, - /** Delete the specified resources from Azure */ + /** Delete the resources from Azure */ Delete: "delete", - /** Keep the specified resources in Azure */ + /** Keep the resources in Azure */ + Detach: "detach", +} + +/** + * Specifies an action for a newly unmanaged resource group. + */ +union UnmanageActionResourceGroupMode { + string, + + /** Delete the resource groups from Azure. */ + Delete: "delete", + + /** Keep the resource groups in Azure. */ + Detach: "detach", +} + +/** + * Specifies an action for a newly unmanaged resource. + */ +union UnmanageActionManagementGroupMode { + string, + + /** Delete the management groups from Azure. */ + Delete: "delete", + + /** Keep the management groups in Azure. */ Detach: "detach", } @@ -57,13 +83,13 @@ union DeploymentStacksDeleteDetachEnum { * Specifies an action for resources that do not support deletion. */ @added(Versions.v2025_07_01) -union DeploymentStacksResourcesWithoutDeleteSupportEnum { +union ResourcesWithoutDeleteSupportAction { string, - /** Detach the specified resources from the deployment stack and continue */ + /** Detach the specified resources from the deployment stack and continue. */ Detach: "detach", - /** Fail the deployment stack if resources cannot be deleted */ + /** Fail the deployment stack if resources cannot be deleted. */ Fail: "fail", } @@ -216,26 +242,26 @@ model ActionOnUnmanageDeleteParameters { * Flag to indicate delete rather than detach for unmanaged resources. */ @query("unmanageAction.Resources") - unmanageActionResources?: DeploymentStacksDeleteDetachEnum; + unmanageActionResources?: UnmanageActionResourceMode; /** * Flag to indicate delete rather than detach for unmanaged resource groups. */ @query("unmanageAction.ResourceGroups") - unmanageActionResourceGroups?: DeploymentStacksDeleteDetachEnum; + unmanageActionResourceGroups?: UnmanageActionResourceGroupMode; /** * Flag to indicate delete rather than detach for unmanaged management groups. */ @query("unmanageAction.ManagementGroups") - unmanageActionManagementGroups?: DeploymentStacksDeleteDetachEnum; + unmanageActionManagementGroups?: UnmanageActionManagementGroupMode; /** * Some resources do not support deletion. This flag will denote how the stack should handle those resources. */ @query("unmanageAction.ResourcesWithoutDeleteSupport") @added(Versions.v2025_07_01) - unmanageActionResourcesWithoutDeleteSupport?: DeploymentStacksResourcesWithoutDeleteSupportEnum; + unmanageActionResourcesWithoutDeleteSupport?: ResourcesWithoutDeleteSupportAction; /** * Flag to bypass service errors that indicate the stack resource list is not correctly synchronized. @@ -546,25 +572,25 @@ model DeploymentExternalInputDefinition { */ model ActionOnUnmanage { /** - * Specifies an action for a newly unmanaged resource. Delete will attempt to delete the resource from Azure. Detach will leave the resource in it's current state. + * Specifies an action for a newly unmanaged resource. */ - resources: DeploymentStacksDeleteDetachEnum; + resources: UnmanageActionResourceMode; /** - * Specifies an action for a newly unmanaged resource. Delete will attempt to delete the resource from Azure. Detach will leave the resource in it's current state. + * Specifies an action for a newly unmanaged resource group. */ - resourceGroups?: DeploymentStacksDeleteDetachEnum; + resourceGroups?: UnmanageActionResourceGroupMode; /** - * Specifies an action for a newly unmanaged resource. Delete will attempt to delete the resource from Azure. Detach will leave the resource in it's current state. + * Specifies an action for a newly unmanaged resource management group. */ - managementGroups?: DeploymentStacksDeleteDetachEnum; + managementGroups?: UnmanageActionManagementGroupMode; /** * Some resources do not support deletion. This flag will denote how the stack should handle those resources. */ @added(Versions.v2025_07_01) - resourcesWithoutDeleteSupport?: DeploymentStacksResourcesWithoutDeleteSupportEnum; + resourcesWithoutDeleteSupport?: ResourcesWithoutDeleteSupportAction; } /** @@ -629,7 +655,7 @@ model ResourceReference { /** * The extensible resource identifiers. */ - #suppress "@azure-tools/typespec-azure-resource-manager/arm-no-record" "The schema of tis object is determined by the deployment extension." + #suppress "@azure-tools/typespec-azure-resource-manager/arm-no-record" "The schema of this object is determined by the deployment extension." @added(Versions.v2025_07_01) @visibility(Lifecycle.Read) identifiers?: Record; @@ -657,6 +683,7 @@ alias DeploymentStacksError = { /** * The error detail. */ + @visibility(Lifecycle.Read) error?: Azure.ResourceManager.CommonTypes.ErrorDetail; }; diff --git a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/preview/2022-08-01-preview/deploymentStacks.json b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/preview/2022-08-01-preview/deploymentStacks.json index 832460646f6f..f1ebd15ab91c 100644 --- a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/preview/2022-08-01-preview/deploymentStacks.json +++ b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/preview/2022-08-01-preview/deploymentStacks.json @@ -925,16 +925,16 @@ "description": "Defines the behavior of resources that are no longer managed after the stack is updated or deleted.", "properties": { "resources": { - "$ref": "#/definitions/DeploymentStacksDeleteDetachEnum", - "description": "Specifies an action for a newly unmanaged resource. Delete will attempt to delete the resource from Azure. Detach will leave the resource in it's current state." + "$ref": "#/definitions/UnmanageActionResourceMode", + "description": "Specifies an action for a newly unmanaged resource." }, "resourceGroups": { - "$ref": "#/definitions/DeploymentStacksDeleteDetachEnum", - "description": "Specifies an action for a newly unmanaged resource. Delete will attempt to delete the resource from Azure. Detach will leave the resource in it's current state." + "$ref": "#/definitions/UnmanageActionResourceGroupMode", + "description": "Specifies an action for a newly unmanaged resource group." }, "managementGroups": { - "$ref": "#/definitions/DeploymentStacksDeleteDetachEnum", - "description": "Specifies an action for a newly unmanaged resource. Delete will attempt to delete the resource from Azure. Detach will leave the resource in it's current state." + "$ref": "#/definitions/UnmanageActionManagementGroupMode", + "description": "Specifies an action for a newly unmanaged resource management group." } }, "required": [ @@ -1077,7 +1077,8 @@ "properties": { "error": { "$ref": "../../../../../../common-types/resource-management/v6/types.json#/definitions/ErrorDetail", - "description": "The error detail." + "description": "The error detail.", + "readOnly": true }, "template": { "type": "object", @@ -1291,30 +1292,6 @@ } } }, - "DeploymentStacksDeleteDetachEnum": { - "type": "string", - "description": "Specifies an action for a newly unmanaged resource. Delete will attempt to delete the resource from Azure. Detach will leave the resource in it's current state.", - "enum": [ - "delete", - "detach" - ], - "x-ms-enum": { - "name": "DeploymentStacksDeleteDetachEnum", - "modelAsString": true, - "values": [ - { - "name": "Delete", - "value": "delete", - "description": "Delete the specified resources from Azure" - }, - { - "name": "Detach", - "value": "detach", - "description": "Keep the specified resources in Azure" - } - ] - } - }, "DeploymentStacksParametersLink": { "type": "object", "description": "Entity representing the reference to the deployment parameters.", @@ -1512,9 +1489,82 @@ }, "error": { "$ref": "../../../../../../common-types/resource-management/v6/types.json#/definitions/ErrorDetail", - "description": "The error detail." + "description": "The error detail.", + "readOnly": true } } + }, + "UnmanageActionManagementGroupMode": { + "type": "string", + "description": "Specifies an action for a newly unmanaged resource.", + "enum": [ + "delete", + "detach" + ], + "x-ms-enum": { + "name": "UnmanageActionManagementGroupMode", + "modelAsString": true, + "values": [ + { + "name": "Delete", + "value": "delete", + "description": "Delete the management groups from Azure." + }, + { + "name": "Detach", + "value": "detach", + "description": "Keep the management groups in Azure." + } + ] + } + }, + "UnmanageActionResourceGroupMode": { + "type": "string", + "description": "Specifies an action for a newly unmanaged resource group.", + "enum": [ + "delete", + "detach" + ], + "x-ms-enum": { + "name": "UnmanageActionResourceGroupMode", + "modelAsString": true, + "values": [ + { + "name": "Delete", + "value": "delete", + "description": "Delete the resource groups from Azure." + }, + { + "name": "Detach", + "value": "detach", + "description": "Keep the resource groups in Azure." + } + ] + } + }, + "UnmanageActionResourceMode": { + "type": "string", + "description": "Specifies an action for a newly unmanaged resource.", + "enum": [ + "delete", + "detach" + ], + "x-ms-enum": { + "name": "UnmanageActionResourceMode", + "modelAsString": true, + "values": [ + { + "name": "Delete", + "value": "delete", + "description": "Delete the resources from Azure" + }, + { + "name": "Detach", + "value": "detach", + "description": "Keep the resources in Azure" + } + ] + } } }, "parameters": { @@ -1529,18 +1579,18 @@ "detach" ], "x-ms-enum": { - "name": "DeploymentStacksDeleteDetachEnum", + "name": "UnmanageActionManagementGroupMode", "modelAsString": true, "values": [ { "name": "Delete", "value": "delete", - "description": "Delete the specified resources from Azure" + "description": "Delete the management groups from Azure." }, { "name": "Detach", "value": "detach", - "description": "Keep the specified resources in Azure" + "description": "Keep the management groups in Azure." } ] }, @@ -1558,18 +1608,18 @@ "detach" ], "x-ms-enum": { - "name": "DeploymentStacksDeleteDetachEnum", + "name": "UnmanageActionResourceGroupMode", "modelAsString": true, "values": [ { "name": "Delete", "value": "delete", - "description": "Delete the specified resources from Azure" + "description": "Delete the resource groups from Azure." }, { "name": "Detach", "value": "detach", - "description": "Keep the specified resources in Azure" + "description": "Keep the resource groups in Azure." } ] }, @@ -1587,18 +1637,18 @@ "detach" ], "x-ms-enum": { - "name": "DeploymentStacksDeleteDetachEnum", + "name": "UnmanageActionResourceMode", "modelAsString": true, "values": [ { "name": "Delete", "value": "delete", - "description": "Delete the specified resources from Azure" + "description": "Delete the resources from Azure" }, { "name": "Detach", "value": "detach", - "description": "Keep the specified resources in Azure" + "description": "Keep the resources in Azure" } ] }, diff --git a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/stable/2024-03-01/deploymentStacks.json b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/stable/2024-03-01/deploymentStacks.json index f9d7ae8a16ac..235830cef4b0 100644 --- a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/stable/2024-03-01/deploymentStacks.json +++ b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/stable/2024-03-01/deploymentStacks.json @@ -1179,16 +1179,16 @@ "description": "Defines the behavior of resources that are no longer managed after the stack is updated or deleted.", "properties": { "resources": { - "$ref": "#/definitions/DeploymentStacksDeleteDetachEnum", - "description": "Specifies an action for a newly unmanaged resource. Delete will attempt to delete the resource from Azure. Detach will leave the resource in it's current state." + "$ref": "#/definitions/UnmanageActionResourceMode", + "description": "Specifies an action for a newly unmanaged resource." }, "resourceGroups": { - "$ref": "#/definitions/DeploymentStacksDeleteDetachEnum", - "description": "Specifies an action for a newly unmanaged resource. Delete will attempt to delete the resource from Azure. Detach will leave the resource in it's current state." + "$ref": "#/definitions/UnmanageActionResourceGroupMode", + "description": "Specifies an action for a newly unmanaged resource group." }, "managementGroups": { - "$ref": "#/definitions/DeploymentStacksDeleteDetachEnum", - "description": "Specifies an action for a newly unmanaged resource. Delete will attempt to delete the resource from Azure. Detach will leave the resource in it's current state." + "$ref": "#/definitions/UnmanageActionManagementGroupMode", + "description": "Specifies an action for a newly unmanaged resource management group." } }, "required": [ @@ -1331,7 +1331,8 @@ "properties": { "error": { "$ref": "../../../../../../common-types/resource-management/v6/types.json#/definitions/ErrorDetail", - "description": "The error detail." + "description": "The error detail.", + "readOnly": true }, "template": { "type": "object", @@ -1618,7 +1619,8 @@ }, "error": { "$ref": "../../../../../../common-types/resource-management/v6/types.json#/definitions/ErrorDetail", - "description": "The error detail." + "description": "The error detail.", + "readOnly": true }, "properties": { "$ref": "#/definitions/DeploymentStackValidateProperties", @@ -1636,30 +1638,6 @@ } } }, - "DeploymentStacksDeleteDetachEnum": { - "type": "string", - "description": "Specifies an action for a newly unmanaged resource. Delete will attempt to delete the resource from Azure. Detach will leave the resource in it's current state.", - "enum": [ - "delete", - "detach" - ], - "x-ms-enum": { - "name": "DeploymentStacksDeleteDetachEnum", - "modelAsString": true, - "values": [ - { - "name": "Delete", - "value": "delete", - "description": "Delete the specified resources from Azure" - }, - { - "name": "Detach", - "value": "detach", - "description": "Keep the specified resources in Azure" - } - ] - } - }, "DeploymentStacksParametersLink": { "type": "object", "description": "Entity representing the reference to the deployment parameters.", @@ -1824,7 +1802,8 @@ }, "error": { "$ref": "../../../../../../common-types/resource-management/v6/types.json#/definitions/ErrorDetail", - "description": "The error detail." + "description": "The error detail.", + "readOnly": true } } }, @@ -1857,6 +1836,78 @@ } ] } + }, + "UnmanageActionManagementGroupMode": { + "type": "string", + "description": "Specifies an action for a newly unmanaged resource.", + "enum": [ + "delete", + "detach" + ], + "x-ms-enum": { + "name": "UnmanageActionManagementGroupMode", + "modelAsString": true, + "values": [ + { + "name": "Delete", + "value": "delete", + "description": "Delete the management groups from Azure." + }, + { + "name": "Detach", + "value": "detach", + "description": "Keep the management groups in Azure." + } + ] + } + }, + "UnmanageActionResourceGroupMode": { + "type": "string", + "description": "Specifies an action for a newly unmanaged resource group.", + "enum": [ + "delete", + "detach" + ], + "x-ms-enum": { + "name": "UnmanageActionResourceGroupMode", + "modelAsString": true, + "values": [ + { + "name": "Delete", + "value": "delete", + "description": "Delete the resource groups from Azure." + }, + { + "name": "Detach", + "value": "detach", + "description": "Keep the resource groups in Azure." + } + ] + } + }, + "UnmanageActionResourceMode": { + "type": "string", + "description": "Specifies an action for a newly unmanaged resource.", + "enum": [ + "delete", + "detach" + ], + "x-ms-enum": { + "name": "UnmanageActionResourceMode", + "modelAsString": true, + "values": [ + { + "name": "Delete", + "value": "delete", + "description": "Delete the resources from Azure" + }, + { + "name": "Detach", + "value": "detach", + "description": "Keep the resources in Azure" + } + ] + } } }, "parameters": { @@ -1879,18 +1930,18 @@ "detach" ], "x-ms-enum": { - "name": "DeploymentStacksDeleteDetachEnum", + "name": "UnmanageActionManagementGroupMode", "modelAsString": true, "values": [ { "name": "Delete", "value": "delete", - "description": "Delete the specified resources from Azure" + "description": "Delete the management groups from Azure." }, { "name": "Detach", "value": "detach", - "description": "Keep the specified resources in Azure" + "description": "Keep the management groups in Azure." } ] }, @@ -1908,18 +1959,18 @@ "detach" ], "x-ms-enum": { - "name": "DeploymentStacksDeleteDetachEnum", + "name": "UnmanageActionResourceGroupMode", "modelAsString": true, "values": [ { "name": "Delete", "value": "delete", - "description": "Delete the specified resources from Azure" + "description": "Delete the resource groups from Azure." }, { "name": "Detach", "value": "detach", - "description": "Keep the specified resources in Azure" + "description": "Keep the resource groups in Azure." } ] }, @@ -1937,18 +1988,18 @@ "detach" ], "x-ms-enum": { - "name": "DeploymentStacksDeleteDetachEnum", + "name": "UnmanageActionResourceMode", "modelAsString": true, "values": [ { "name": "Delete", "value": "delete", - "description": "Delete the specified resources from Azure" + "description": "Delete the resources from Azure" }, { "name": "Detach", "value": "detach", - "description": "Keep the specified resources in Azure" + "description": "Keep the resources in Azure" } ] }, diff --git a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/stable/2025-07-01/deploymentStacks.json b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/stable/2025-07-01/deploymentStacks.json index ee9a952d48c1..31ba3021dfa2 100644 --- a/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/stable/2025-07-01/deploymentStacks.json +++ b/specification/resources/resource-manager/Microsoft.Resources/deploymentStacks/stable/2025-07-01/deploymentStacks.json @@ -2083,19 +2083,19 @@ "description": "Defines the behavior of resources that are no longer managed after the stack is updated or deleted.", "properties": { "resources": { - "$ref": "#/definitions/DeploymentStacksDeleteDetachEnum", - "description": "Specifies an action for a newly unmanaged resource. Delete will attempt to delete the resource from Azure. Detach will leave the resource in it's current state." + "$ref": "#/definitions/UnmanageActionResourceMode", + "description": "Specifies an action for a newly unmanaged resource." }, "resourceGroups": { - "$ref": "#/definitions/DeploymentStacksDeleteDetachEnum", - "description": "Specifies an action for a newly unmanaged resource. Delete will attempt to delete the resource from Azure. Detach will leave the resource in it's current state." + "$ref": "#/definitions/UnmanageActionResourceGroupMode", + "description": "Specifies an action for a newly unmanaged resource group." }, "managementGroups": { - "$ref": "#/definitions/DeploymentStacksDeleteDetachEnum", - "description": "Specifies an action for a newly unmanaged resource. Delete will attempt to delete the resource from Azure. Detach will leave the resource in it's current state." + "$ref": "#/definitions/UnmanageActionManagementGroupMode", + "description": "Specifies an action for a newly unmanaged resource management group." }, "resourcesWithoutDeleteSupport": { - "$ref": "#/definitions/DeploymentStacksResourcesWithoutDeleteSupportEnum", + "$ref": "#/definitions/ResourcesWithoutDeleteSupportAction", "description": "Some resources do not support deletion. This flag will denote how the stack should handle those resources." } }, @@ -2380,7 +2380,8 @@ "properties": { "error": { "$ref": "../../../../../../common-types/resource-management/v6/types.json#/definitions/ErrorDetail", - "description": "The error detail." + "description": "The error detail.", + "readOnly": true }, "template": { "type": "object", @@ -2735,7 +2736,8 @@ }, "error": { "$ref": "../../../../../../common-types/resource-management/v6/types.json#/definitions/ErrorDetail", - "description": "The error detail." + "description": "The error detail.", + "readOnly": true }, "properties": { "$ref": "#/definitions/DeploymentStackValidateProperties", @@ -2753,30 +2755,6 @@ } } }, - "DeploymentStacksDeleteDetachEnum": { - "type": "string", - "description": "Specifies an action for a newly unmanaged resource. Delete will attempt to delete the resource from Azure. Detach will leave the resource in it's current state.", - "enum": [ - "delete", - "detach" - ], - "x-ms-enum": { - "name": "DeploymentStacksDeleteDetachEnum", - "modelAsString": true, - "values": [ - { - "name": "Delete", - "value": "delete", - "description": "Delete the specified resources from Azure" - }, - { - "name": "Detach", - "value": "detach", - "description": "Keep the specified resources in Azure" - } - ] - } - }, "DeploymentStacksDiagnostic": { "type": "object", "description": "The error additional info", @@ -2889,30 +2867,6 @@ "uri" ] }, - "DeploymentStacksResourcesWithoutDeleteSupportEnum": { - "type": "string", - "description": "Specifies an action for resources that do not support deletion.", - "enum": [ - "detach", - "fail" - ], - "x-ms-enum": { - "name": "DeploymentStacksResourcesWithoutDeleteSupportEnum", - "modelAsString": true, - "values": [ - { - "name": "Detach", - "value": "detach", - "description": "Detach the specified resources from the deployment stack and continue" - }, - { - "name": "Fail", - "value": "fail", - "description": "Fail the deployment stack if resources cannot be deleted" - } - ] - } - }, "DeploymentStacksTemplateLink": { "type": "object", "description": "Entity representing the reference to the template.", @@ -3315,7 +3269,8 @@ "properties": { "error": { "$ref": "../../../../../../common-types/resource-management/v6/types.json#/definitions/ErrorDetail", - "description": "The error detail." + "description": "The error detail.", + "readOnly": true }, "template": { "type": "object", @@ -3619,7 +3574,8 @@ }, "error": { "$ref": "../../../../../../common-types/resource-management/v6/types.json#/definitions/ErrorDetail", - "description": "The error detail." + "description": "The error detail.", + "readOnly": true } } }, @@ -3653,6 +3609,102 @@ ] } }, + "ResourcesWithoutDeleteSupportAction": { + "type": "string", + "description": "Specifies an action for resources that do not support deletion.", + "enum": [ + "detach", + "fail" + ], + "x-ms-enum": { + "name": "ResourcesWithoutDeleteSupportAction", + "modelAsString": true, + "values": [ + { + "name": "Detach", + "value": "detach", + "description": "Detach the specified resources from the deployment stack and continue." + }, + { + "name": "Fail", + "value": "fail", + "description": "Fail the deployment stack if resources cannot be deleted." + } + ] + } + }, + "UnmanageActionManagementGroupMode": { + "type": "string", + "description": "Specifies an action for a newly unmanaged resource.", + "enum": [ + "delete", + "detach" + ], + "x-ms-enum": { + "name": "UnmanageActionManagementGroupMode", + "modelAsString": true, + "values": [ + { + "name": "Delete", + "value": "delete", + "description": "Delete the management groups from Azure." + }, + { + "name": "Detach", + "value": "detach", + "description": "Keep the management groups in Azure." + } + ] + } + }, + "UnmanageActionResourceGroupMode": { + "type": "string", + "description": "Specifies an action for a newly unmanaged resource group.", + "enum": [ + "delete", + "detach" + ], + "x-ms-enum": { + "name": "UnmanageActionResourceGroupMode", + "modelAsString": true, + "values": [ + { + "name": "Delete", + "value": "delete", + "description": "Delete the resource groups from Azure." + }, + { + "name": "Detach", + "value": "detach", + "description": "Keep the resource groups in Azure." + } + ] + } + }, + "UnmanageActionResourceMode": { + "type": "string", + "description": "Specifies an action for a newly unmanaged resource.", + "enum": [ + "delete", + "detach" + ], + "x-ms-enum": { + "name": "UnmanageActionResourceMode", + "modelAsString": true, + "values": [ + { + "name": "Delete", + "value": "delete", + "description": "Delete the resources from Azure" + }, + { + "name": "Detach", + "value": "detach", + "description": "Keep the resources in Azure" + } + ] + } + }, "ValidationLevel": { "type": "string", "description": "The level of validation performed on the deployment.", @@ -3704,18 +3756,18 @@ "detach" ], "x-ms-enum": { - "name": "DeploymentStacksDeleteDetachEnum", + "name": "UnmanageActionManagementGroupMode", "modelAsString": true, "values": [ { "name": "Delete", "value": "delete", - "description": "Delete the specified resources from Azure" + "description": "Delete the management groups from Azure." }, { "name": "Detach", "value": "detach", - "description": "Keep the specified resources in Azure" + "description": "Keep the management groups in Azure." } ] }, @@ -3733,18 +3785,18 @@ "detach" ], "x-ms-enum": { - "name": "DeploymentStacksDeleteDetachEnum", + "name": "UnmanageActionResourceGroupMode", "modelAsString": true, "values": [ { "name": "Delete", "value": "delete", - "description": "Delete the specified resources from Azure" + "description": "Delete the resource groups from Azure." }, { "name": "Detach", "value": "detach", - "description": "Keep the specified resources in Azure" + "description": "Keep the resource groups in Azure." } ] }, @@ -3762,18 +3814,18 @@ "detach" ], "x-ms-enum": { - "name": "DeploymentStacksDeleteDetachEnum", + "name": "UnmanageActionResourceMode", "modelAsString": true, "values": [ { "name": "Delete", "value": "delete", - "description": "Delete the specified resources from Azure" + "description": "Delete the resources from Azure" }, { "name": "Detach", "value": "detach", - "description": "Keep the specified resources in Azure" + "description": "Keep the resources in Azure" } ] }, @@ -3791,18 +3843,18 @@ "fail" ], "x-ms-enum": { - "name": "DeploymentStacksResourcesWithoutDeleteSupportEnum", + "name": "ResourcesWithoutDeleteSupportAction", "modelAsString": true, "values": [ { "name": "Detach", "value": "detach", - "description": "Detach the specified resources from the deployment stack and continue" + "description": "Detach the specified resources from the deployment stack and continue." }, { "name": "Fail", "value": "fail", - "description": "Fail the deployment stack if resources cannot be deleted" + "description": "Fail the deployment stack if resources cannot be deleted." } ] },