diff --git a/specification/management/resource-manager/Microsoft.Management/ServiceGroups/ServiceGroup.tsp b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/ServiceGroup.tsp index 9b9e4580a6ff..51ae9b5ef21f 100644 --- a/specification/management/resource-manager/Microsoft.Management/ServiceGroups/ServiceGroup.tsp +++ b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/ServiceGroup.tsp @@ -2,12 +2,14 @@ import "@azure-tools/typespec-azure-core"; import "@azure-tools/typespec-azure-resource-manager"; import "@typespec/openapi"; import "@typespec/rest"; +import "@typespec/versioning"; import "./models.tsp"; using TypeSpec.Rest; using Azure.ResourceManager; using TypeSpec.Http; using TypeSpec.OpenAPI; +using TypeSpec.Versioning; namespace Microsoft.Management; /** @@ -77,12 +79,74 @@ interface ServiceGroups { /** * Get the details of the serviceGroup's ancestors */ + @removed(Versions.v2026_09_01_preview) + @sharedRoute listAncestors is ArmResourceActionSync< ServiceGroup, void, ArmResponse, BaseParameters = Azure.ResourceManager.Foundations.TenantBaseParameters >; + + /** + * Get the details of the serviceGroup's ancestors. + * + * This is a paginated POST action. When the response contains a skipToken, + * more results are available; callers must re-POST to the same listAncestors + * URL with that skipToken value in the request body to fetch the next page. + * When skipToken is absent, the current page is the last page. SDKs do not + * natively support POST-based pagination, so callers must loop manually. + */ + #suppress "@azure-tools/typespec-azure-core/no-openapi" "operationId must be pinned so SDK method name stays 'ListAncestors' across the versioned reshape." + @added(Versions.v2026_09_01_preview) + @operationId("ServiceGroups_ListAncestors") + @action("listAncestors") + @sharedRoute + listAncestorsPaged is ArmResourceActionSync< + ServiceGroup, + ListAncestorsRequest, + ArmResponse, + BaseParameters = Azure.ResourceManager.Foundations.TenantBaseParameters + >; + + /** + * List the descendant serviceGroups of the serviceGroup, ordered by hierarchy. + * + * This is a paginated POST action. When the response contains a skipToken, + * more results are available; callers must re-POST to the same listDescendants + * URL with that skipToken value in the request body to fetch the next page. + * When skipToken is absent, the current page is the last page. SDKs do not + * natively support POST-based pagination, so callers must loop manually. + */ + @added(Versions.v2026_09_01_preview) + listDescendants is ArmResourceActionSync< + ServiceGroup, + ListDescendantsRequest, + ArmResponse, + BaseParameters = Azure.ResourceManager.Foundations.TenantBaseParameters + >; + + /** + * List the members of the serviceGroup. Members are entities linked to the + * service group via a Microsoft.Relationships resource + * (Microsoft.Relationships/serviceGroupMember for direct members, or + * Microsoft.Relationships/contains for members included transitively via a + * container). Descendant service groups are not returned by this action; + * use listDescendants to enumerate nested service groups. + * + * This is a paginated POST action. When the response contains a skipToken, + * more results are available; callers must re-POST to the same listMembers + * URL with that skipToken value in the request body to fetch the next page. + * When skipToken is absent, the current page is the last page. SDKs do not + * natively support POST-based pagination, so callers must loop manually. + */ + @added(Versions.v2026_09_01_preview) + listMembers is ArmResourceActionSync< + ServiceGroup, + ListMembersRequest, + ArmResponse, + BaseParameters = Azure.ResourceManager.Foundations.TenantBaseParameters + >; } @@doc(ServiceGroup.name, "ServiceGroup Name."); diff --git a/specification/management/resource-manager/Microsoft.Management/ServiceGroups/examples/2026-09-01-preview/ServiceGroup_Delete.json b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/examples/2026-09-01-preview/ServiceGroup_Delete.json new file mode 100644 index 000000000000..9256aba94d7e --- /dev/null +++ b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/examples/2026-09-01-preview/ServiceGroup_Delete.json @@ -0,0 +1,16 @@ +{ + "parameters": { + "api-version": "2026-09-01-preview", + "serviceGroupName": "20000000-0001-0000-0000-000000000000" + }, + "responses": { + "202": { + "headers": { + "Location": "https://management.azure.com/providers/Microsoft.Management/operationResults/delete/serviceGroups/20000000-0001-0000-0000-000000000000?api-version=2026-09-01-preview" + } + }, + "204": {} + }, + "operationId": "DeleteServiceGroup", + "title": "DeleteServiceGroup" +} diff --git a/specification/management/resource-manager/Microsoft.Management/ServiceGroups/examples/2026-09-01-preview/ServiceGroup_Get.json b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/examples/2026-09-01-preview/ServiceGroup_Get.json new file mode 100644 index 000000000000..05570f263582 --- /dev/null +++ b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/examples/2026-09-01-preview/ServiceGroup_Get.json @@ -0,0 +1,24 @@ +{ + "parameters": { + "api-version": "2026-09-01-preview", + "serviceGroupName": "20000000-0001-0000-0000-000000000000" + }, + "responses": { + "200": { + "body": { + "name": "20000000-0001-0000-0000-000000000000", + "type": "Microsoft.Management/serviceGroups", + "id": "/providers/Microsoft.Management/serviceGroups/20000000-0001-0000-0000-000000000000", + "properties": { + "displayName": "ServiceGroup 1 Tenant 2", + "parent": { + "resourceId": "/providers/Microsoft.Management/serviceGroups/RootGroup" + }, + "provisioningState": "Succeeded" + } + } + } + }, + "operationId": "ServiceGroups_Get", + "title": "GetServiceGroup" +} diff --git a/specification/management/resource-manager/Microsoft.Management/ServiceGroups/examples/2026-09-01-preview/ServiceGroup_ListAncestors.json b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/examples/2026-09-01-preview/ServiceGroup_ListAncestors.json new file mode 100644 index 000000000000..081dce4ae351 --- /dev/null +++ b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/examples/2026-09-01-preview/ServiceGroup_ListAncestors.json @@ -0,0 +1,35 @@ +{ + "parameters": { + "api-version": "2026-09-01-preview", + "serviceGroupName": "20000000-0001-0000-0000-000000000000", + "body": {} + }, + "responses": { + "200": { + "body": { + "value": [ + { + "name": "Ancestor1", + "type": "Microsoft.Management/serviceGroups", + "id": "/providers/Microsoft.Management/serviceGroups/Ancestor1", + "properties": { + "displayName": "ServiceGroup Ancestor1", + "criticality": 0 + } + }, + { + "name": "Ancestor2", + "type": "Microsoft.Management/serviceGroups", + "id": "/providers/Microsoft.Management/serviceGroups/Ancestor2", + "properties": { + "displayName": "ServiceGroup Ancestor2" + } + } + ], + "skipToken": "eyJsYXN0TGVmdEluZGV4Ijo0LjAsInJpZ2h0SW5kZXgiOjguMH0=" + } + } + }, + "operationId": "ServiceGroups_ListAncestors", + "title": "ListServiceGroupAncestors" +} diff --git a/specification/management/resource-manager/Microsoft.Management/ServiceGroups/examples/2026-09-01-preview/ServiceGroup_ListDescendants.json b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/examples/2026-09-01-preview/ServiceGroup_ListDescendants.json new file mode 100644 index 000000000000..1d25362cda74 --- /dev/null +++ b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/examples/2026-09-01-preview/ServiceGroup_ListDescendants.json @@ -0,0 +1,52 @@ +{ + "parameters": { + "api-version": "2026-09-01-preview", + "serviceGroupName": "root", + "body": {} + }, + "responses": { + "200": { + "body": { + "value": [ + { + "id": "/providers/Microsoft.Management/serviceGroups/child-1", + "type": "Microsoft.Management/serviceGroups", + "name": "child-1", + "kind": "Application", + "tags": { + "team": "platform", + "env": "prod" + }, + "properties": { + "displayName": "Child Service Group 1", + "parent": { + "resourceId": "/providers/Microsoft.Management/serviceGroups/root" + }, + "provisioningState": "Succeeded" + } + }, + { + "id": "/providers/Microsoft.Management/serviceGroups/grandchild-1", + "type": "Microsoft.Management/serviceGroups", + "name": "grandchild-1", + "kind": "Service", + "tags": { + "team": "data", + "costCenter": "12345" + }, + "properties": { + "displayName": "Grandchild Service Group 1", + "parent": { + "resourceId": "/providers/Microsoft.Management/serviceGroups/child-1" + }, + "provisioningState": "Succeeded" + } + } + ], + "skipToken": "eyJsYXN0TGVmdEluZGV4Ijo0LjAsInJpZ2h0SW5kZXgiOjguMH0=" + } + } + }, + "operationId": "ServiceGroups_ListDescendants", + "title": "ListServiceGroupDescendants" +} diff --git a/specification/management/resource-manager/Microsoft.Management/ServiceGroups/examples/2026-09-01-preview/ServiceGroup_ListMembers.json b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/examples/2026-09-01-preview/ServiceGroup_ListMembers.json new file mode 100644 index 000000000000..ecaaf696b500 --- /dev/null +++ b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/examples/2026-09-01-preview/ServiceGroup_ListMembers.json @@ -0,0 +1,32 @@ +{ + "parameters": { + "api-version": "2026-09-01-preview", + "serviceGroupName": "root-sg", + "body": { + "expand": "allMembers" + } + }, + "responses": { + "200": { + "body": { + "value": [ + { + "id": "/subscriptions/sub-a/resourceGroups/rg1/providers/Microsoft.KeyVault/vaults/myVault" + }, + { + "id": "/subscriptions/sub-a/resourceGroups/rg2" + }, + { + "id": "/subscriptions/sub-a/resourceGroups/rg2/providers/Microsoft.Storage/storageAccounts/myStorage" + }, + { + "id": "/subscriptions/sub-b/resourceGroups/rg3/providers/Microsoft.Sql/servers/sqlServer1" + } + ], + "skipToken": "eyJsYXN0TGVmdEluZGV4Ijo0LjAsInJpZ2h0SW5kZXgiOjguMH0=" + } + } + }, + "operationId": "ServiceGroups_ListMembers", + "title": "ListServiceGroupMembers" +} diff --git a/specification/management/resource-manager/Microsoft.Management/ServiceGroups/examples/2026-09-01-preview/ServiceGroup_Patch.json b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/examples/2026-09-01-preview/ServiceGroup_Patch.json new file mode 100644 index 000000000000..24ad4a667211 --- /dev/null +++ b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/examples/2026-09-01-preview/ServiceGroup_Patch.json @@ -0,0 +1,45 @@ +{ + "parameters": { + "api-version": "2026-09-01-preview", + "serviceGroupName": "ServiceGroup1", + "updateServiceGroupRequest": { + "properties": { + "displayName": "ServiceGroup 1 Name", + "criticality": 2 + }, + "tags": { + "tag1": "value1", + "tag2": "value2" + } + } + }, + "responses": { + "200": { + "body": { + "name": "ServiceGroup1", + "type": "Microsoft.Management/serviceGroups", + "id": "/providers/Microsoft.Management/serviceGroups/ServiceGroup1", + "kind": "App", + "properties": { + "displayName": "ServiceGroup 1 Name", + "criticality": 2, + "parent": { + "resourceId": "/providers/Microsoft.Management/serviceGroups/RootGroup" + }, + "provisioningState": "Succeeded" + }, + "tags": { + "tag1": "value1", + "tag2": "value2" + } + } + }, + "202": { + "headers": { + "location": "https://management.azure.com/providers/Microsoft.Management/operationResults/update/serviceGroups/ServiceGroup1?api-version=2026-09-01-preview" + } + } + }, + "operationId": "UpdateServiceGroup", + "title": "PatchServiceGroup" +} diff --git a/specification/management/resource-manager/Microsoft.Management/ServiceGroups/examples/2026-09-01-preview/ServiceGroup_Put.json b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/examples/2026-09-01-preview/ServiceGroup_Put.json new file mode 100644 index 000000000000..8e8c6ea12000 --- /dev/null +++ b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/examples/2026-09-01-preview/ServiceGroup_Put.json @@ -0,0 +1,49 @@ +{ + "parameters": { + "api-version": "2026-09-01-preview", + "createServiceGroupRequest": { + "properties": { + "displayName": "ServiceGroup 1 Name", + "criticality": 1, + "parent": { + "resourceId": "/providers/Microsoft.Management/serviceGroups/RootGroup" + } + } + }, + "serviceGroupName": "ServiceGroup1" + }, + "responses": { + "200": { + "body": { + "name": "ServiceGroup1", + "type": "Microsoft.Management/serviceGroups", + "id": "/providers/Microsoft.Management/serviceGroups/ServiceGroup1", + "properties": { + "displayName": "ServiceGroup 1 Name", + "criticality": 1, + "parent": { + "resourceId": "/providers/Microsoft.Management/serviceGroups/RootGroup" + }, + "provisioningState": "Succeeded" + } + } + }, + "201": { + "body": { + "name": "ServiceGroup1", + "type": "Microsoft.Management/serviceGroups", + "id": "/providers/Microsoft.Management/serviceGroups/ServiceGroup1", + "properties": { + "displayName": "ServiceGroup 1 Name", + "criticality": 1, + "parent": { + "resourceId": "/providers/Microsoft.Management/serviceGroups/RootGroup" + }, + "provisioningState": "Succeeded" + } + } + } + }, + "operationId": "CreateOrUpdateServiceGroup", + "title": "PutServiceGroup" +} diff --git a/specification/management/resource-manager/Microsoft.Management/ServiceGroups/main.tsp b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/main.tsp index cd6242fe8b76..9f92cdce073c 100644 --- a/specification/management/resource-manager/Microsoft.Management/ServiceGroups/main.tsp +++ b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/main.tsp @@ -40,4 +40,9 @@ enum Versions { * The 2024-02-01-preview API version. */ v2024_02_01_preview: "2024-02-01-preview", + + /** + * The 2026-09-01-preview API version. + */ + v2026_09_01_preview: "2026-09-01-preview", } diff --git a/specification/management/resource-manager/Microsoft.Management/ServiceGroups/models.tsp b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/models.tsp index e82f0c736b53..c297aeb88407 100644 --- a/specification/management/resource-manager/Microsoft.Management/ServiceGroups/models.tsp +++ b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/models.tsp @@ -1,10 +1,12 @@ import "@typespec/rest"; import "@typespec/http"; +import "@typespec/versioning"; import "@azure-tools/typespec-azure-core"; import "@azure-tools/typespec-azure-resource-manager"; using TypeSpec.Rest; using TypeSpec.Http; +using TypeSpec.Versioning; using Azure.ResourceManager; using Azure.ResourceManager.Foundations; @@ -84,6 +86,12 @@ model ServiceGroupProperties { */ displayName?: string; + /** + * The criticality designation of the service group. + */ + @added(Versions.v2026_09_01_preview) + criticality?: float64; + /** * The details of the parent serviceGroup. */ @@ -109,3 +117,143 @@ model ParentServiceGroupProperties { */ #suppress "@azure-tools/typespec-client-generator-core/csharp-model-suffix" "Name kept for backward compatibility" model ServiceGroupCollectionResponse is Azure.Core.Page; + +/** + * Request body for the listAncestors action. + */ +@added(Versions.v2026_09_01_preview) +model ListAncestorsRequest { + /** + * An opaque pagination token returned in the previous response's skipToken field. + * Include this value in the request body to fetch the next page of results. + */ + skipToken?: string; +} + +/** + * Response for the listAncestors action. Contains a page of ancestor service + * groups plus an opaque skipToken for fetching subsequent pages. + */ +@added(Versions.v2026_09_01_preview) +model ListAncestorsResponse { + /** + * The page of ancestor service groups. + */ + value: ServiceGroup[]; + + /** + * Opaque pagination token. When present, more results are available; callers + * must re-POST to the same listAncestors URL with this value in the request + * body to fetch the next page. When absent, the current page is the last page. + */ + #suppress "@azure-tools/typespec-azure-resource-manager/secret-prop" "skipToken is the standard Azure OData paging continuation token, not a secret. The linter flags it due to the 'Token' substring in the name; the property carries opaque pagination state and is not sensitive." + skipToken?: string; +} + +/** + * Request body for the listDescendants action. + */ +@added(Versions.v2026_09_01_preview) +model ListDescendantsRequest { + /** + * An opaque pagination token returned in the previous response's skipToken field. + * Include this value in the request body to fetch the next page of results. + */ + skipToken?: string; +} + +/** + * Response for the listDescendants action. Contains a page of service groups + * plus an opaque skipToken for fetching subsequent pages. + */ +@added(Versions.v2026_09_01_preview) +model ListDescendantsResponse { + /** + * The page of descendant service groups. + */ + value: ServiceGroup[]; + + /** + * Opaque pagination token. When present, more results are available; callers + * must re-POST to the same listDescendants URL with this value in the request + * body to fetch the next page. When absent, the current page is the last page. + */ + #suppress "@azure-tools/typespec-azure-resource-manager/secret-prop" "skipToken is the standard Azure OData paging continuation token, not a secret. The linter flags it due to the 'Token' substring in the name; the property carries opaque pagination state and is not sensitive." + skipToken?: string; +} + +/** + * Controls which members are returned by the listMembers action. Currently + * only "allMembers" is supported. If omitted, the service behaves as if + * "allMembers" was specified. + */ +@added(Versions.v2026_09_01_preview) +union ListMembersExpand { + string, + + /** + * Return all members of the service group. + */ + AllMembers: "allMembers", +} + +/** + * Request body for the listMembers action. + */ +@added(Versions.v2026_09_01_preview) +model ListMembersRequest { + /** + * Controls which members are returned. Only "allMembers" is supported today; + * if omitted, the service defaults to "allMembers". + */ + expand?: ListMembersExpand; + + /** + * A filter expression to narrow the returned members. Reserved for a future + * API version; not implemented in this version. Any value provided today is + * accepted but ignored. + */ + filter?: string; + + /** + * An opaque pagination token returned in the previous response's skipToken field. + * Include this value in the request body to fetch the next page of results. + */ + skipToken?: string; +} + +/** + * Response for the listMembers action. Contains a page of service group members + * plus an opaque skipToken for fetching subsequent pages. + */ +@added(Versions.v2026_09_01_preview) +model ListMembersResponse { + /** + * The page of service group members. + */ + value: ServiceGroupMember[]; + + /** + * Opaque pagination token. When present, more results are available; callers + * must re-POST to the same listMembers URL with this value in the request + * body to fetch the next page. When absent, the current page is the last page. + */ + #suppress "@azure-tools/typespec-azure-resource-manager/secret-prop" "skipToken is the standard Azure OData paging continuation token, not a secret. The linter flags it due to the 'Token' substring in the name; the property carries opaque pagination state and is not sensitive." + skipToken?: string; +} + +/** + * A member of a service group. Members are entities linked to the service + * group via a Microsoft.Relationships resource (serviceGroupMember or + * contains). Descendant service groups are not returned as members; use + * listDescendants for those. + */ +@added(Versions.v2026_09_01_preview) +model ServiceGroupMember { + /** + * The fully qualified ARM ID of the member. For example, + * /subscriptions/{subId}/resourceGroups/{rgName}/providers/Microsoft.KeyVault/vaults/{vaultName}. + */ + @visibility(Lifecycle.Read) + id?: Azure.Core.armResourceIdentifier; +} diff --git a/specification/management/resource-manager/Microsoft.Management/ServiceGroups/preview/2026-09-01-preview/examples/ServiceGroup_Delete.json b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/preview/2026-09-01-preview/examples/ServiceGroup_Delete.json new file mode 100644 index 000000000000..9256aba94d7e --- /dev/null +++ b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/preview/2026-09-01-preview/examples/ServiceGroup_Delete.json @@ -0,0 +1,16 @@ +{ + "parameters": { + "api-version": "2026-09-01-preview", + "serviceGroupName": "20000000-0001-0000-0000-000000000000" + }, + "responses": { + "202": { + "headers": { + "Location": "https://management.azure.com/providers/Microsoft.Management/operationResults/delete/serviceGroups/20000000-0001-0000-0000-000000000000?api-version=2026-09-01-preview" + } + }, + "204": {} + }, + "operationId": "DeleteServiceGroup", + "title": "DeleteServiceGroup" +} diff --git a/specification/management/resource-manager/Microsoft.Management/ServiceGroups/preview/2026-09-01-preview/examples/ServiceGroup_Get.json b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/preview/2026-09-01-preview/examples/ServiceGroup_Get.json new file mode 100644 index 000000000000..05570f263582 --- /dev/null +++ b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/preview/2026-09-01-preview/examples/ServiceGroup_Get.json @@ -0,0 +1,24 @@ +{ + "parameters": { + "api-version": "2026-09-01-preview", + "serviceGroupName": "20000000-0001-0000-0000-000000000000" + }, + "responses": { + "200": { + "body": { + "name": "20000000-0001-0000-0000-000000000000", + "type": "Microsoft.Management/serviceGroups", + "id": "/providers/Microsoft.Management/serviceGroups/20000000-0001-0000-0000-000000000000", + "properties": { + "displayName": "ServiceGroup 1 Tenant 2", + "parent": { + "resourceId": "/providers/Microsoft.Management/serviceGroups/RootGroup" + }, + "provisioningState": "Succeeded" + } + } + } + }, + "operationId": "ServiceGroups_Get", + "title": "GetServiceGroup" +} diff --git a/specification/management/resource-manager/Microsoft.Management/ServiceGroups/preview/2026-09-01-preview/examples/ServiceGroup_ListAncestors.json b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/preview/2026-09-01-preview/examples/ServiceGroup_ListAncestors.json new file mode 100644 index 000000000000..081dce4ae351 --- /dev/null +++ b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/preview/2026-09-01-preview/examples/ServiceGroup_ListAncestors.json @@ -0,0 +1,35 @@ +{ + "parameters": { + "api-version": "2026-09-01-preview", + "serviceGroupName": "20000000-0001-0000-0000-000000000000", + "body": {} + }, + "responses": { + "200": { + "body": { + "value": [ + { + "name": "Ancestor1", + "type": "Microsoft.Management/serviceGroups", + "id": "/providers/Microsoft.Management/serviceGroups/Ancestor1", + "properties": { + "displayName": "ServiceGroup Ancestor1", + "criticality": 0 + } + }, + { + "name": "Ancestor2", + "type": "Microsoft.Management/serviceGroups", + "id": "/providers/Microsoft.Management/serviceGroups/Ancestor2", + "properties": { + "displayName": "ServiceGroup Ancestor2" + } + } + ], + "skipToken": "eyJsYXN0TGVmdEluZGV4Ijo0LjAsInJpZ2h0SW5kZXgiOjguMH0=" + } + } + }, + "operationId": "ServiceGroups_ListAncestors", + "title": "ListServiceGroupAncestors" +} diff --git a/specification/management/resource-manager/Microsoft.Management/ServiceGroups/preview/2026-09-01-preview/examples/ServiceGroup_ListDescendants.json b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/preview/2026-09-01-preview/examples/ServiceGroup_ListDescendants.json new file mode 100644 index 000000000000..1d25362cda74 --- /dev/null +++ b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/preview/2026-09-01-preview/examples/ServiceGroup_ListDescendants.json @@ -0,0 +1,52 @@ +{ + "parameters": { + "api-version": "2026-09-01-preview", + "serviceGroupName": "root", + "body": {} + }, + "responses": { + "200": { + "body": { + "value": [ + { + "id": "/providers/Microsoft.Management/serviceGroups/child-1", + "type": "Microsoft.Management/serviceGroups", + "name": "child-1", + "kind": "Application", + "tags": { + "team": "platform", + "env": "prod" + }, + "properties": { + "displayName": "Child Service Group 1", + "parent": { + "resourceId": "/providers/Microsoft.Management/serviceGroups/root" + }, + "provisioningState": "Succeeded" + } + }, + { + "id": "/providers/Microsoft.Management/serviceGroups/grandchild-1", + "type": "Microsoft.Management/serviceGroups", + "name": "grandchild-1", + "kind": "Service", + "tags": { + "team": "data", + "costCenter": "12345" + }, + "properties": { + "displayName": "Grandchild Service Group 1", + "parent": { + "resourceId": "/providers/Microsoft.Management/serviceGroups/child-1" + }, + "provisioningState": "Succeeded" + } + } + ], + "skipToken": "eyJsYXN0TGVmdEluZGV4Ijo0LjAsInJpZ2h0SW5kZXgiOjguMH0=" + } + } + }, + "operationId": "ServiceGroups_ListDescendants", + "title": "ListServiceGroupDescendants" +} diff --git a/specification/management/resource-manager/Microsoft.Management/ServiceGroups/preview/2026-09-01-preview/examples/ServiceGroup_ListMembers.json b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/preview/2026-09-01-preview/examples/ServiceGroup_ListMembers.json new file mode 100644 index 000000000000..ecaaf696b500 --- /dev/null +++ b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/preview/2026-09-01-preview/examples/ServiceGroup_ListMembers.json @@ -0,0 +1,32 @@ +{ + "parameters": { + "api-version": "2026-09-01-preview", + "serviceGroupName": "root-sg", + "body": { + "expand": "allMembers" + } + }, + "responses": { + "200": { + "body": { + "value": [ + { + "id": "/subscriptions/sub-a/resourceGroups/rg1/providers/Microsoft.KeyVault/vaults/myVault" + }, + { + "id": "/subscriptions/sub-a/resourceGroups/rg2" + }, + { + "id": "/subscriptions/sub-a/resourceGroups/rg2/providers/Microsoft.Storage/storageAccounts/myStorage" + }, + { + "id": "/subscriptions/sub-b/resourceGroups/rg3/providers/Microsoft.Sql/servers/sqlServer1" + } + ], + "skipToken": "eyJsYXN0TGVmdEluZGV4Ijo0LjAsInJpZ2h0SW5kZXgiOjguMH0=" + } + } + }, + "operationId": "ServiceGroups_ListMembers", + "title": "ListServiceGroupMembers" +} diff --git a/specification/management/resource-manager/Microsoft.Management/ServiceGroups/preview/2026-09-01-preview/examples/ServiceGroup_Patch.json b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/preview/2026-09-01-preview/examples/ServiceGroup_Patch.json new file mode 100644 index 000000000000..24ad4a667211 --- /dev/null +++ b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/preview/2026-09-01-preview/examples/ServiceGroup_Patch.json @@ -0,0 +1,45 @@ +{ + "parameters": { + "api-version": "2026-09-01-preview", + "serviceGroupName": "ServiceGroup1", + "updateServiceGroupRequest": { + "properties": { + "displayName": "ServiceGroup 1 Name", + "criticality": 2 + }, + "tags": { + "tag1": "value1", + "tag2": "value2" + } + } + }, + "responses": { + "200": { + "body": { + "name": "ServiceGroup1", + "type": "Microsoft.Management/serviceGroups", + "id": "/providers/Microsoft.Management/serviceGroups/ServiceGroup1", + "kind": "App", + "properties": { + "displayName": "ServiceGroup 1 Name", + "criticality": 2, + "parent": { + "resourceId": "/providers/Microsoft.Management/serviceGroups/RootGroup" + }, + "provisioningState": "Succeeded" + }, + "tags": { + "tag1": "value1", + "tag2": "value2" + } + } + }, + "202": { + "headers": { + "location": "https://management.azure.com/providers/Microsoft.Management/operationResults/update/serviceGroups/ServiceGroup1?api-version=2026-09-01-preview" + } + } + }, + "operationId": "UpdateServiceGroup", + "title": "PatchServiceGroup" +} diff --git a/specification/management/resource-manager/Microsoft.Management/ServiceGroups/preview/2026-09-01-preview/examples/ServiceGroup_Put.json b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/preview/2026-09-01-preview/examples/ServiceGroup_Put.json new file mode 100644 index 000000000000..8e8c6ea12000 --- /dev/null +++ b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/preview/2026-09-01-preview/examples/ServiceGroup_Put.json @@ -0,0 +1,49 @@ +{ + "parameters": { + "api-version": "2026-09-01-preview", + "createServiceGroupRequest": { + "properties": { + "displayName": "ServiceGroup 1 Name", + "criticality": 1, + "parent": { + "resourceId": "/providers/Microsoft.Management/serviceGroups/RootGroup" + } + } + }, + "serviceGroupName": "ServiceGroup1" + }, + "responses": { + "200": { + "body": { + "name": "ServiceGroup1", + "type": "Microsoft.Management/serviceGroups", + "id": "/providers/Microsoft.Management/serviceGroups/ServiceGroup1", + "properties": { + "displayName": "ServiceGroup 1 Name", + "criticality": 1, + "parent": { + "resourceId": "/providers/Microsoft.Management/serviceGroups/RootGroup" + }, + "provisioningState": "Succeeded" + } + } + }, + "201": { + "body": { + "name": "ServiceGroup1", + "type": "Microsoft.Management/serviceGroups", + "id": "/providers/Microsoft.Management/serviceGroups/ServiceGroup1", + "properties": { + "displayName": "ServiceGroup 1 Name", + "criticality": 1, + "parent": { + "resourceId": "/providers/Microsoft.Management/serviceGroups/RootGroup" + }, + "provisioningState": "Succeeded" + } + } + } + }, + "operationId": "CreateOrUpdateServiceGroup", + "title": "PutServiceGroup" +} diff --git a/specification/management/resource-manager/Microsoft.Management/ServiceGroups/preview/2026-09-01-preview/serviceGroups.json b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/preview/2026-09-01-preview/serviceGroups.json new file mode 100644 index 000000000000..acdc788560ba --- /dev/null +++ b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/preview/2026-09-01-preview/serviceGroups.json @@ -0,0 +1,675 @@ +{ + "swagger": "2.0", + "info": { + "title": "Groups RP APIs", + "version": "2026-09-01-preview", + "description": "The Groups RP provides Service Groups as a construct to group multiple resources, resource groups, subscriptions and other service groups into an organizational hierarchy and centrally manage access control, policies, alerting and reporting for those resources", + "x-typespec-generated": [ + { + "emitter": "@azure-tools/typespec-autorest" + } + ] + }, + "schemes": [ + "https" + ], + "host": "management.azure.com", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "security": [ + { + "azure_auth": [ + "user_impersonation" + ] + } + ], + "securityDefinitions": { + "azure_auth": { + "type": "oauth2", + "description": "Azure Active Directory OAuth2 Flow.", + "flow": "implicit", + "authorizationUrl": "https://login.microsoftonline.com/common/oauth2/authorize", + "scopes": { + "user_impersonation": "impersonate your user account" + } + } + }, + "tags": [ + { + "name": "ServiceGroups" + } + ], + "paths": { + "/providers/Microsoft.Management/serviceGroups/{serviceGroupName}": { + "get": { + "operationId": "ServiceGroups_Get", + "tags": [ + "ServiceGroups" + ], + "description": "Get the details of the serviceGroup", + "parameters": [ + { + "$ref": "../../../../../../common-types/resource-management/v5/types.json#/parameters/ApiVersionParameter" + }, + { + "name": "serviceGroupName", + "in": "path", + "description": "ServiceGroup Name.", + "required": true, + "type": "string", + "pattern": "^[a-zA-Z0-9\\-_().]{1,90}$" + } + ], + "responses": { + "200": { + "description": "Azure operation completed successfully.", + "schema": { + "$ref": "#/definitions/ServiceGroup" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "../../../../../../common-types/resource-management/v5/types.json#/definitions/ErrorResponse" + } + } + }, + "x-ms-examples": { + "GetServiceGroup": { + "$ref": "./examples/ServiceGroup_Get.json" + } + } + }, + "put": { + "operationId": "CreateOrUpdateServiceGroup", + "tags": [ + "ServiceGroups" + ], + "description": "Create or Update a serviceGroup", + "parameters": [ + { + "$ref": "../../../../../../common-types/resource-management/v5/types.json#/parameters/ApiVersionParameter" + }, + { + "name": "serviceGroupName", + "in": "path", + "description": "ServiceGroup Name.", + "required": true, + "type": "string", + "pattern": "^[a-zA-Z0-9\\-_().]{1,90}$" + }, + { + "name": "createServiceGroupRequest", + "in": "body", + "description": "ServiceGroup creation parameters", + "required": true, + "schema": { + "$ref": "#/definitions/ServiceGroup" + } + } + ], + "responses": { + "200": { + "description": "Resource 'ServiceGroup' update operation succeeded", + "schema": { + "$ref": "#/definitions/ServiceGroup" + } + }, + "201": { + "description": "Resource 'ServiceGroup' create operation succeeded", + "schema": { + "$ref": "#/definitions/ServiceGroup" + }, + "headers": { + "Azure-AsyncOperation": { + "type": "string", + "description": "A link to the status monitor" + }, + "Retry-After": { + "type": "integer", + "format": "int32", + "description": "The Retry-After header can indicate how long the client should wait before polling the operation status." + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "../../../../../../common-types/resource-management/v5/types.json#/definitions/ErrorResponse" + } + } + }, + "x-ms-examples": { + "PutServiceGroup": { + "$ref": "./examples/ServiceGroup_Put.json" + } + }, + "x-ms-long-running-operation-options": { + "final-state-via": "azure-async-operation", + "final-state-schema": "#/definitions/ServiceGroup" + }, + "x-ms-long-running-operation": true + }, + "patch": { + "operationId": "UpdateServiceGroup", + "tags": [ + "ServiceGroups" + ], + "description": "Update a serviceGroup", + "parameters": [ + { + "$ref": "../../../../../../common-types/resource-management/v5/types.json#/parameters/ApiVersionParameter" + }, + { + "name": "serviceGroupName", + "in": "path", + "description": "ServiceGroup Name.", + "required": true, + "type": "string", + "pattern": "^[a-zA-Z0-9\\-_().]{1,90}$" + }, + { + "name": "updateServiceGroupRequest", + "in": "body", + "description": "ServiceGroup update parameters", + "required": true, + "schema": { + "$ref": "#/definitions/ServiceGroup" + } + } + ], + "responses": { + "200": { + "description": "Azure operation completed successfully.", + "schema": { + "$ref": "#/definitions/ServiceGroup" + } + }, + "202": { + "description": "Resource update request accepted.", + "headers": { + "Location": { + "type": "string", + "description": "The Location header contains the URL where the status of the long running operation can be checked." + }, + "Retry-After": { + "type": "integer", + "format": "int32", + "description": "The Retry-After header can indicate how long the client should wait before polling the operation status." + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "../../../../../../common-types/resource-management/v5/types.json#/definitions/ErrorResponse" + } + } + }, + "x-ms-examples": { + "PatchServiceGroup": { + "$ref": "./examples/ServiceGroup_Patch.json" + } + }, + "x-ms-long-running-operation-options": { + "final-state-via": "location", + "final-state-schema": "#/definitions/ServiceGroup" + }, + "x-ms-long-running-operation": true + }, + "delete": { + "operationId": "DeleteServiceGroup", + "tags": [ + "ServiceGroups" + ], + "description": "Delete a ServiceGroup", + "parameters": [ + { + "$ref": "../../../../../../common-types/resource-management/v5/types.json#/parameters/ApiVersionParameter" + }, + { + "name": "serviceGroupName", + "in": "path", + "description": "ServiceGroup Name.", + "required": true, + "type": "string", + "pattern": "^[a-zA-Z0-9\\-_().]{1,90}$" + } + ], + "responses": { + "202": { + "description": "Resource deletion accepted.", + "headers": { + "Location": { + "type": "string", + "description": "The Location header contains the URL where the status of the long running operation can be checked." + }, + "Retry-After": { + "type": "integer", + "format": "int32", + "description": "The Retry-After header can indicate how long the client should wait before polling the operation status." + } + } + }, + "204": { + "description": "Resource does not exist." + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "../../../../../../common-types/resource-management/v5/types.json#/definitions/ErrorResponse" + } + } + }, + "x-ms-examples": { + "DeleteServiceGroup": { + "$ref": "./examples/ServiceGroup_Delete.json" + } + }, + "x-ms-long-running-operation-options": { + "final-state-via": "location" + }, + "x-ms-long-running-operation": true + } + }, + "/providers/Microsoft.Management/serviceGroups/{serviceGroupName}/listAncestors": { + "post": { + "operationId": "ServiceGroups_ListAncestors", + "tags": [ + "ServiceGroups" + ], + "description": "Get the details of the serviceGroup's ancestors.\n\nThis is a paginated POST action. When the response contains a skipToken,\nmore results are available; callers must re-POST to the same listAncestors\nURL with that skipToken value in the request body to fetch the next page.\nWhen skipToken is absent, the current page is the last page. SDKs do not\nnatively support POST-based pagination, so callers must loop manually.", + "parameters": [ + { + "$ref": "../../../../../../common-types/resource-management/v5/types.json#/parameters/ApiVersionParameter" + }, + { + "name": "serviceGroupName", + "in": "path", + "description": "ServiceGroup Name.", + "required": true, + "type": "string", + "pattern": "^[a-zA-Z0-9\\-_().]{1,90}$" + }, + { + "name": "body", + "in": "body", + "description": "The content of the action request", + "required": true, + "schema": { + "$ref": "#/definitions/ListAncestorsRequest" + } + } + ], + "responses": { + "200": { + "description": "Azure operation completed successfully.", + "schema": { + "$ref": "#/definitions/ListAncestorsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "../../../../../../common-types/resource-management/v5/types.json#/definitions/ErrorResponse" + } + } + }, + "x-ms-examples": { + "ListServiceGroupAncestors": { + "$ref": "./examples/ServiceGroup_ListAncestors.json" + } + } + } + }, + "/providers/Microsoft.Management/serviceGroups/{serviceGroupName}/listDescendants": { + "post": { + "operationId": "ServiceGroups_ListDescendants", + "tags": [ + "ServiceGroups" + ], + "description": "List the descendant serviceGroups of the serviceGroup, ordered by hierarchy.\n\nThis is a paginated POST action. When the response contains a skipToken,\nmore results are available; callers must re-POST to the same listDescendants\nURL with that skipToken value in the request body to fetch the next page.\nWhen skipToken is absent, the current page is the last page. SDKs do not\nnatively support POST-based pagination, so callers must loop manually.", + "parameters": [ + { + "$ref": "../../../../../../common-types/resource-management/v5/types.json#/parameters/ApiVersionParameter" + }, + { + "name": "serviceGroupName", + "in": "path", + "description": "ServiceGroup Name.", + "required": true, + "type": "string", + "pattern": "^[a-zA-Z0-9\\-_().]{1,90}$" + }, + { + "name": "body", + "in": "body", + "description": "The content of the action request", + "required": true, + "schema": { + "$ref": "#/definitions/ListDescendantsRequest" + } + } + ], + "responses": { + "200": { + "description": "Azure operation completed successfully.", + "schema": { + "$ref": "#/definitions/ListDescendantsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "../../../../../../common-types/resource-management/v5/types.json#/definitions/ErrorResponse" + } + } + }, + "x-ms-examples": { + "ListServiceGroupDescendants": { + "$ref": "./examples/ServiceGroup_ListDescendants.json" + } + } + } + }, + "/providers/Microsoft.Management/serviceGroups/{serviceGroupName}/listMembers": { + "post": { + "operationId": "ServiceGroups_ListMembers", + "tags": [ + "ServiceGroups" + ], + "description": "List the members of the serviceGroup. Members are entities linked to the\nservice group via a Microsoft.Relationships resource\n(Microsoft.Relationships/serviceGroupMember for direct members, or\nMicrosoft.Relationships/contains for members included transitively via a\ncontainer). Descendant service groups are not returned by this action;\nuse listDescendants to enumerate nested service groups.\n\nThis is a paginated POST action. When the response contains a skipToken,\nmore results are available; callers must re-POST to the same listMembers\nURL with that skipToken value in the request body to fetch the next page.\nWhen skipToken is absent, the current page is the last page. SDKs do not\nnatively support POST-based pagination, so callers must loop manually.", + "parameters": [ + { + "$ref": "../../../../../../common-types/resource-management/v5/types.json#/parameters/ApiVersionParameter" + }, + { + "name": "serviceGroupName", + "in": "path", + "description": "ServiceGroup Name.", + "required": true, + "type": "string", + "pattern": "^[a-zA-Z0-9\\-_().]{1,90}$" + }, + { + "name": "body", + "in": "body", + "description": "The content of the action request", + "required": true, + "schema": { + "$ref": "#/definitions/ListMembersRequest" + } + } + ], + "responses": { + "200": { + "description": "Azure operation completed successfully.", + "schema": { + "$ref": "#/definitions/ListMembersResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "../../../../../../common-types/resource-management/v5/types.json#/definitions/ErrorResponse" + } + } + }, + "x-ms-examples": { + "ListServiceGroupMembers": { + "$ref": "./examples/ServiceGroup_ListMembers.json" + } + } + } + } + }, + "definitions": { + "ListAncestorsRequest": { + "type": "object", + "description": "Request body for the listAncestors action.", + "properties": { + "skipToken": { + "type": "string", + "description": "An opaque pagination token returned in the previous response's skipToken field.\nInclude this value in the request body to fetch the next page of results." + } + } + }, + "ListAncestorsResponse": { + "type": "object", + "description": "Response for the listAncestors action. Contains a page of ancestor service\ngroups plus an opaque skipToken for fetching subsequent pages.", + "properties": { + "value": { + "type": "array", + "description": "The page of ancestor service groups.", + "items": { + "$ref": "#/definitions/ServiceGroup" + } + }, + "skipToken": { + "type": "string", + "description": "Opaque pagination token. When present, more results are available; callers\nmust re-POST to the same listAncestors URL with this value in the request\nbody to fetch the next page. When absent, the current page is the last page." + } + }, + "required": [ + "value" + ] + }, + "ListDescendantsRequest": { + "type": "object", + "description": "Request body for the listDescendants action.", + "properties": { + "skipToken": { + "type": "string", + "description": "An opaque pagination token returned in the previous response's skipToken field.\nInclude this value in the request body to fetch the next page of results." + } + } + }, + "ListDescendantsResponse": { + "type": "object", + "description": "Response for the listDescendants action. Contains a page of service groups\nplus an opaque skipToken for fetching subsequent pages.", + "properties": { + "value": { + "type": "array", + "description": "The page of descendant service groups.", + "items": { + "$ref": "#/definitions/ServiceGroup" + } + }, + "skipToken": { + "type": "string", + "description": "Opaque pagination token. When present, more results are available; callers\nmust re-POST to the same listDescendants URL with this value in the request\nbody to fetch the next page. When absent, the current page is the last page." + } + }, + "required": [ + "value" + ] + }, + "ListMembersExpand": { + "type": "string", + "description": "Controls which members are returned by the listMembers action. Currently\nonly \"allMembers\" is supported. If omitted, the service behaves as if\n\"allMembers\" was specified.", + "enum": [ + "allMembers" + ], + "x-ms-enum": { + "name": "ListMembersExpand", + "modelAsString": true, + "values": [ + { + "name": "AllMembers", + "value": "allMembers", + "description": "Return all members of the service group." + } + ] + } + }, + "ListMembersRequest": { + "type": "object", + "description": "Request body for the listMembers action.", + "properties": { + "expand": { + "$ref": "#/definitions/ListMembersExpand", + "description": "Controls which members are returned. Only \"allMembers\" is supported today;\nif omitted, the service defaults to \"allMembers\"." + }, + "filter": { + "type": "string", + "description": "A filter expression to narrow the returned members. Reserved for a future\nAPI version; not implemented in this version. Any value provided today is\naccepted but ignored." + }, + "skipToken": { + "type": "string", + "description": "An opaque pagination token returned in the previous response's skipToken field.\nInclude this value in the request body to fetch the next page of results." + } + } + }, + "ListMembersResponse": { + "type": "object", + "description": "Response for the listMembers action. Contains a page of service group members\nplus an opaque skipToken for fetching subsequent pages.", + "properties": { + "value": { + "type": "array", + "description": "The page of service group members.", + "items": { + "$ref": "#/definitions/ServiceGroupMember" + } + }, + "skipToken": { + "type": "string", + "description": "Opaque pagination token. When present, more results are available; callers\nmust re-POST to the same listMembers URL with this value in the request\nbody to fetch the next page. When absent, the current page is the last page." + } + }, + "required": [ + "value" + ] + }, + "ParentServiceGroupProperties": { + "type": "object", + "description": "The details of the parent serviceGroup.", + "properties": { + "resourceId": { + "type": "string", + "format": "arm-id", + "description": "The fully qualified ID of the parent serviceGroup. For example, '/providers/Microsoft.Management/serviceGroups/TestServiceGroup'", + "x-ms-arm-id-details": { + "allowedResources": [ + { + "type": "Microsoft.Management/serviceGroups" + } + ] + } + } + } + }, + "ProvisioningState": { + "type": "string", + "description": "The provisioning state of the serviceGroup. For example, Running", + "enum": [ + "NotStarted", + "Running", + "Succeeded", + "Failed", + "Canceled" + ], + "x-ms-enum": { + "name": "ProvisioningState", + "modelAsString": true, + "values": [ + { + "name": "NotStarted", + "value": "NotStarted", + "description": "NotStarted" + }, + { + "name": "Running", + "value": "Running", + "description": "Running" + }, + { + "name": "Succeeded", + "value": "Succeeded", + "description": "Succeeded" + }, + { + "name": "Failed", + "value": "Failed", + "description": "Failed" + }, + { + "name": "Canceled", + "value": "Canceled", + "description": "Canceled" + } + ] + } + }, + "ServiceGroup": { + "type": "object", + "description": "The serviceGroup details.", + "properties": { + "properties": { + "$ref": "#/definitions/ServiceGroupProperties", + "description": "ServiceGroup creation request body parameters." + }, + "kind": { + "type": "string", + "description": "The kind of the serviceGroup.", + "x-ms-mutability": [ + "read", + "create" + ] + }, + "tags": { + "type": "object", + "description": "The serviceGroup tags.", + "additionalProperties": { + "type": "string" + } + } + }, + "allOf": [ + { + "$ref": "../../../../../../common-types/resource-management/v5/types.json#/definitions/ProxyResource" + } + ] + }, + "ServiceGroupMember": { + "type": "object", + "description": "A member of a service group. Members are entities linked to the service\ngroup via a Microsoft.Relationships resource (serviceGroupMember or\ncontains). Descendant service groups are not returned as members; use\nlistDescendants for those.", + "properties": { + "id": { + "type": "string", + "format": "arm-id", + "description": "The fully qualified ARM ID of the member. For example,\n/subscriptions/{subId}/resourceGroups/{rgName}/providers/Microsoft.KeyVault/vaults/{vaultName}.", + "readOnly": true + } + } + }, + "ServiceGroupProperties": { + "type": "object", + "description": "ServiceGroup creation request body parameters.", + "properties": { + "provisioningState": { + "$ref": "#/definitions/ProvisioningState", + "description": "The provisioning state of the serviceGroup. For example, Running", + "readOnly": true + }, + "displayName": { + "type": "string", + "description": "The display name of the serviceGroup. For example, ServiceGroupTest1" + }, + "criticality": { + "type": "number", + "format": "double", + "description": "The criticality designation of the service group." + }, + "parent": { + "$ref": "#/definitions/ParentServiceGroupProperties", + "description": "The details of the parent serviceGroup." + } + } + } + }, + "parameters": {} +} diff --git a/specification/management/resource-manager/Microsoft.Management/ServiceGroups/readme.md b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/readme.md index 68f189ee8b60..0bb654089c5b 100644 --- a/specification/management/resource-manager/Microsoft.Management/ServiceGroups/readme.md +++ b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/readme.md @@ -26,7 +26,17 @@ These are the global settings for the API. ``` yaml openapi-type: arm -tag: package-2024-02-preview +tag: package-2026-09-preview +``` + +### Tag: package-2026-09-preview + +These settings apply only when `--tag=package-2026-09-preview` is specified on the command line. + +```yaml $(tag) == 'package-2026-09-preview' +input-file: + - preview/2026-09-01-preview/serviceGroups.json +v3: true ``` ### Tag: package-2024-02-preview @@ -48,6 +58,30 @@ suppressions: reason: These are tenant level APIs and resource types by design. from: serviceGroups.json where: $.paths["/providers/Microsoft.Management/serviceGroups/{serviceGroupName}"] + - code: XMSSecretInResponse + reason: skipToken is the standard Azure OData paging continuation token, not a secret. The linter flags it due to the "Token" substring in the name; the property carries opaque pagination state and is not sensitive. + from: serviceGroups.json + where: $.definitions.ListDescendantsRequest.properties.skipToken + - code: XMSSecretInResponse + reason: skipToken is the standard Azure OData paging continuation token, not a secret. The linter flags it due to the "Token" substring in the name; the property carries opaque pagination state and is not sensitive. + from: serviceGroups.json + where: $.definitions.ListDescendantsResponse.properties.skipToken + - code: XMSSecretInResponse + reason: skipToken is the standard Azure OData paging continuation token, not a secret. The linter flags it due to the "Token" substring in the name; the property carries opaque pagination state and is not sensitive. + from: serviceGroups.json + where: $.definitions.ListMembersRequest.properties.skipToken + - code: XMSSecretInResponse + reason: skipToken is the standard Azure OData paging continuation token, not a secret. The linter flags it due to the "Token" substring in the name; the property carries opaque pagination state and is not sensitive. + from: serviceGroups.json + where: $.definitions.ListMembersResponse.properties.skipToken + - code: XMSSecretInResponse + reason: skipToken is the standard Azure OData paging continuation token, not a secret. The linter flags it due to the "Token" substring in the name; the property carries opaque pagination state and is not sensitive. + from: serviceGroups.json + where: $.definitions.ListAncestorsRequest.properties.skipToken + - code: XMSSecretInResponse + reason: skipToken is the standard Azure OData paging continuation token, not a secret. The linter flags it due to the "Token" substring in the name; the property carries opaque pagination state and is not sensitive. + from: serviceGroups.json + where: $.definitions.ListAncestorsResponse.properties.skipToken ``` --- diff --git a/specification/management/resource-manager/Microsoft.Management/ServiceGroups/service.yaml b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/service.yaml index 9b6b33440658..89a20cda1b62 100644 --- a/specification/management/resource-manager/Microsoft.Management/ServiceGroups/service.yaml +++ b/specification/management/resource-manager/Microsoft.Management/ServiceGroups/service.yaml @@ -3,3 +3,7 @@ versions: source: typespec swagger-files: - preview/2024-02-01-preview/serviceGroups.json + - version: 2026-09-01-preview + source: typespec + swagger-files: + - preview/2026-09-01-preview/serviceGroups.json