diff --git a/eng/Packages.Data.props b/eng/Packages.Data.props index dd274ab8d63e..a902ea995311 100644 --- a/eng/Packages.Data.props +++ b/eng/Packages.Data.props @@ -144,7 +144,8 @@ - + + diff --git a/sdk/provisioning/Azure.Provisioning.WebPubSub/CHANGELOG.md b/sdk/provisioning/Azure.Provisioning.WebPubSub/CHANGELOG.md new file mode 100644 index 000000000000..75713709e7d2 --- /dev/null +++ b/sdk/provisioning/Azure.Provisioning.WebPubSub/CHANGELOG.md @@ -0,0 +1,7 @@ +# Release History + +## 0.1.0-beta.1 (2024-05-10) + +### Features Added + +- Initial beta release of Azure.Provisioning.WebPubSub. diff --git a/sdk/provisioning/Azure.Provisioning.WebPubSub/README.md b/sdk/provisioning/Azure.Provisioning.WebPubSub/README.md new file mode 100644 index 000000000000..438df373bb06 --- /dev/null +++ b/sdk/provisioning/Azure.Provisioning.WebPubSub/README.md @@ -0,0 +1,84 @@ +# Azure Provisioning client library for .NET + +Azure.Provisioning.WebPubSub simplifies declarative resource provisioning in .NET for Azure Web PubSub. + +## Getting started + +### Install the package + +Install the client library for .NET with [NuGet](https://www.nuget.org/ ): + +```dotnetcli +dotnet add package Azure.Provisioning.WebPubSub --prerelease +``` + +### Prerequisites + +> You must have an [Azure subscription](https://azure.microsoft.com/free/dotnet/). + +### Authenticate the Client + +## Key concepts + +This library allows you to specify your infrastructure in a declarative style using dotnet. You can then use azd to deploy your infrastructure to Azure diretly without needing to write or maintain bicep or arm templates. + +## Examples + +Here is a simple example which creates a KeyVault. + +First create your Infrastructure class. + +```C# Snippet:SampleInfrastructure +public class SampleInfrastructure : Infrastructure +{ + public SampleInfrastructure() : base(envName: "Sample", tenantId: Guid.Empty, subscriptionId: Guid.Empty, configuration: new Configuration { UseInteractiveMode = true }) + { + } +} +``` + +Next add your resources into your infrastructure and then Build. + +```C# Snippet:KeyVaultOnly +// Create a new infrastructure +var infrastructure = new SampleInfrastructure(); + +// Add a new key vault +var keyVault = infrastructure.AddKeyVault(); + +// You can call Build to convert the infrastructure into bicep files. +infrastructure.Build(); +``` + +## Troubleshooting + +- File an issue via [GitHub Issues](https://github.com/Azure/azure-sdk-for-net/issues). +- Check [previous questions](https://stackoverflow.com/questions/tagged/azure+.net) or ask new ones on Stack Overflow using Azure and .NET tags. + +## Next steps + +## Contributing + +For details on contributing to this repository, see the [contributing +guide][cg]. + +This project welcomes contributions and suggestions. Most contributions +require you to agree to a Contributor License Agreement (CLA) declaring +that you have the right to, and actually do, grant us the rights to use +your contribution. For details, visit . + +When you submit a pull request, a CLA-bot will automatically determine +whether you need to provide a CLA and decorate the PR appropriately +(for example, label, comment). Follow the instructions provided by the +bot. You'll only need to do this action once across all repositories +using our CLA. + +This project has adopted the [Microsoft Open Source Code of Conduct][coc]. For +more information, see the [Code of Conduct FAQ][coc_faq] or contact + with any other questions or comments. + + +[cg]: https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/resourcemanager/Azure.ResourceManager/docs/CONTRIBUTING.md +[coc]: https://opensource.microsoft.com/codeofconduct/ +[coc_faq]: https://opensource.microsoft.com/codeofconduct/faq/ + diff --git a/sdk/provisioning/Azure.Provisioning.WebPubSub/api/Azure.Provisioning.WebPubSub.netstandard2.0.cs b/sdk/provisioning/Azure.Provisioning.WebPubSub/api/Azure.Provisioning.WebPubSub.netstandard2.0.cs new file mode 100644 index 000000000000..b8af4abe56e9 --- /dev/null +++ b/sdk/provisioning/Azure.Provisioning.WebPubSub/api/Azure.Provisioning.WebPubSub.netstandard2.0.cs @@ -0,0 +1,15 @@ +namespace Azure.Provisioning.WebPubSub +{ + public partial class WebPubSubHub : Azure.Provisioning.Resource + { + public WebPubSubHub(Azure.Provisioning.IConstruct scope, Azure.ResourceManager.WebPubSub.Models.WebPubSubHubProperties properties, Azure.Provisioning.WebPubSub.WebPubSubService? parent = null, string name = "hub", string version = "2021-10-01") : base (default(Azure.Provisioning.IConstruct), default(Azure.Provisioning.Resource), default(string), default(Azure.Core.ResourceType), default(string), default(System.Func), default(bool)) { } + protected override Azure.Provisioning.Resource? FindParentInScope(Azure.Provisioning.IConstruct scope) { throw null; } + public static Azure.Provisioning.WebPubSub.WebPubSubHub FromExisting(Azure.Provisioning.IConstruct scope, string name, Azure.Provisioning.WebPubSub.WebPubSubService? parent = null) { throw null; } + } + public partial class WebPubSubService : Azure.Provisioning.Resource + { + public WebPubSubService(Azure.Provisioning.IConstruct scope, Azure.ResourceManager.WebPubSub.Models.BillingInfoSku? sku = null, Azure.Provisioning.ResourceManager.ResourceGroup? parent = null, string name = "webpubsub", string version = "2021-10-01", Azure.Core.AzureLocation? location = default(Azure.Core.AzureLocation?)) : base (default(Azure.Provisioning.IConstruct), default(Azure.Provisioning.Resource), default(string), default(Azure.Core.ResourceType), default(string), default(System.Func), default(bool)) { } + public static Azure.Provisioning.WebPubSub.WebPubSubService FromExisting(Azure.Provisioning.IConstruct scope, string name, Azure.Provisioning.ResourceManager.ResourceGroup? parent = null) { throw null; } + protected override string GetAzureName(Azure.Provisioning.IConstruct scope, string resourceName) { throw null; } + } +} diff --git a/sdk/provisioning/Azure.Provisioning.WebPubSub/assets.json b/sdk/provisioning/Azure.Provisioning.WebPubSub/assets.json new file mode 100644 index 000000000000..81f5b60480e2 --- /dev/null +++ b/sdk/provisioning/Azure.Provisioning.WebPubSub/assets.json @@ -0,0 +1,6 @@ +{ + "AssetsRepo": "Azure/azure-sdk-assets", + "AssetsRepoPrefixPath": "net", + "TagPrefix": "net/provisioning/Azure.Provisioning.WebPubSub", + "Tag": "net/provisioning/Azure.Provisioning.WebPubSub_ee1c01a8d9" +} \ No newline at end of file diff --git a/sdk/provisioning/Azure.Provisioning.WebPubSub/src/Azure.Provisioning.WebPubSub.csproj b/sdk/provisioning/Azure.Provisioning.WebPubSub/src/Azure.Provisioning.WebPubSub.csproj new file mode 100644 index 000000000000..29b011d81e12 --- /dev/null +++ b/sdk/provisioning/Azure.Provisioning.WebPubSub/src/Azure.Provisioning.WebPubSub.csproj @@ -0,0 +1,14 @@ + + + + Azure.Provisioning.WebPubSub simplifies declarative resource provisioning in .NET for Azure Web PubSub. + 0.1.0-beta.1 + $(RequiredTargetFrameworks) + $(NoWarn);AZC0001 + + + + + + + diff --git a/sdk/provisioning/Azure.Provisioning.WebPubSub/src/Properties/AssemblyInfo.cs b/sdk/provisioning/Azure.Provisioning.WebPubSub/src/Properties/AssemblyInfo.cs new file mode 100644 index 000000000000..15a940a47a16 --- /dev/null +++ b/sdk/provisioning/Azure.Provisioning.WebPubSub/src/Properties/AssemblyInfo.cs @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Diagnostics.CodeAnalysis; + +[assembly: Experimental("AZPROVISION001")] diff --git a/sdk/provisioning/Azure.Provisioning.WebPubSub/src/WebPubSubHub.cs b/sdk/provisioning/Azure.Provisioning.WebPubSub/src/WebPubSubHub.cs new file mode 100644 index 000000000000..1c8f39b67fd7 --- /dev/null +++ b/sdk/provisioning/Azure.Provisioning.WebPubSub/src/WebPubSubHub.cs @@ -0,0 +1,66 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using Azure.ResourceManager.WebPubSub; +using Azure.ResourceManager.WebPubSub.Models; + +namespace Azure.Provisioning.WebPubSub +{ + /// + /// Represents a hub setting for WebPubSub. + /// + public class WebPubSubHub : Resource + { + // https://learn.microsoft.com/azure/templates/microsoft.signalrservice/2023-02-01/webPubSub/hubs?pivots=deployment-language-bicep + private const string ResourceTypeName = "Microsoft.SignalRService/webPubSub/hubs"; + + private static WebPubSubHubData Empty(string name) => ArmWebPubSubModelFactory.WebPubSubHubData(); + + /// + /// Creates a new instance of the class. + /// + /// The scope. + /// The properties of the hub settings. + /// The parent. + /// The name. + /// The version. + public WebPubSubHub(IConstruct scope, + WebPubSubHubProperties properties, + WebPubSubService? parent = null, + string name = "hub", + string version = WebPubSubService.DefaultVersion) + : this(scope, parent, name, version, false, (name) => ArmWebPubSubModelFactory.WebPubSubHubData( + name: name, + properties: properties)) + { + } + + private WebPubSubHub( + IConstruct scope, + WebPubSubService? parent, + string name, + string version = WebPubSubService.DefaultVersion, + bool isExisting = false, + Func? creator = null) + : base(scope, parent, name, ResourceTypeName, version, creator ?? Empty, isExisting) + { + } + + /// + /// Creates a new instance of the class referencing an existing instance. + /// + /// The scope. + /// The resource name. + /// The resource group. + /// The WebPubSub service instance. + public static WebPubSubHub FromExisting(IConstruct scope, string name, WebPubSubService? parent = null) + => new WebPubSubHub(scope, parent: parent, name: name, isExisting: true); + + /// + protected override Resource? FindParentInScope(IConstruct scope) + { + return scope.GetSingleResource() ?? new WebPubSubService(scope); + } + } +} diff --git a/sdk/provisioning/Azure.Provisioning.WebPubSub/src/WebPubSubService.cs b/sdk/provisioning/Azure.Provisioning.WebPubSub/src/WebPubSubService.cs new file mode 100644 index 000000000000..98671498c9e3 --- /dev/null +++ b/sdk/provisioning/Azure.Provisioning.WebPubSub/src/WebPubSubService.cs @@ -0,0 +1,72 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using Azure.Core; +using Azure.Provisioning.ResourceManager; +using Azure.ResourceManager.WebPubSub; +using Azure.ResourceManager.WebPubSub.Models; + +namespace Azure.Provisioning.WebPubSub +{ + /// + /// Represents a WebPubSub. + /// + public class WebPubSubService : Resource + { + // https://learn.microsoft.com/azure/templates/microsoft.signalrservice/2023-02-01/webPubSub?pivots=deployment-language-bicep + private const string ResourceTypeName = "Microsoft.SignalRService/webPubSub"; + // https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/webpubsub/Azure.ResourceManager.WebPubSub/src/Generated/RestOperations/WebPubSubRestOperations.cs#L36 + internal const string DefaultVersion = "2021-10-01"; + + private static WebPubSubData Empty(string name) => ArmWebPubSubModelFactory.WebPubSubData(); + + /// + /// Creates a new instance of the class. + /// + /// The scope. + /// The SKU. + /// The parent. + /// The name. + /// The version. + /// The location. + public WebPubSubService( + IConstruct scope, + BillingInfoSku? sku = default, + ResourceGroup? parent = default, + string name = "webpubsub", + string version = DefaultVersion, + AzureLocation? location = default) + : this(scope, parent, name, version, false, (name) => ArmWebPubSubModelFactory.WebPubSubData( + name: name, + location: location ?? Environment.GetEnvironmentVariable("AZURE_LOCATION") ?? AzureLocation.WestUS, + sku: sku ?? new BillingInfoSku("Free_F1") { Capacity = 1 })) + { + AssignProperty(data => data.Name, GetAzureName(scope, name)); + } + + private WebPubSubService( + IConstruct scope, + ResourceGroup? parent, + string name, + string version = DefaultVersion, + bool isExisting = false, + Func? creator = null) + : base(scope, parent, name, ResourceTypeName, version, creator ?? Empty, isExisting) + { + } + + /// + /// Creates a new instance of the class referencing an existing instance. + /// + /// The scope. + /// The resource name. + /// The resource group. + /// The WebPubSub service instance. + public static WebPubSubService FromExisting(IConstruct scope, string name, ResourceGroup? parent = null) + => new WebPubSubService(scope, parent: parent, name: name, isExisting: true); + + /// + protected override string GetAzureName(IConstruct scope, string resourceName) => GetGloballyUniqueName(resourceName); + } +} diff --git a/sdk/provisioning/Azure.Provisioning.WebPubSub/tests/Azure.Provisioning.WebPubSub.Tests.csproj b/sdk/provisioning/Azure.Provisioning.WebPubSub/tests/Azure.Provisioning.WebPubSub.Tests.csproj new file mode 100644 index 000000000000..b4677b92e932 --- /dev/null +++ b/sdk/provisioning/Azure.Provisioning.WebPubSub/tests/Azure.Provisioning.WebPubSub.Tests.csproj @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/sdk/provisioning/Azure.Provisioning.WebPubSub/tests/Infrastructure/ExistingWebPubSubResources/main.bicep b/sdk/provisioning/Azure.Provisioning.WebPubSub/tests/Infrastructure/ExistingWebPubSubResources/main.bicep new file mode 100644 index 000000000000..136bc7020567 --- /dev/null +++ b/sdk/provisioning/Azure.Provisioning.WebPubSub/tests/Infrastructure/ExistingWebPubSubResources/main.bicep @@ -0,0 +1,15 @@ +targetScope = 'subscription' + + +resource resourceGroup_I6QNkoPsb 'Microsoft.Resources/resourceGroups@2023-07-01' = { + name: 'rg-TEST' + location: 'westus' + tags: { + 'azd-env-name': 'TEST' + } +} + +module rg_TEST_module './resources/rg_TEST_module/rg_TEST_module.bicep' = { + name: 'rg_TEST_module' + scope: resourceGroup_I6QNkoPsb +} diff --git a/sdk/provisioning/Azure.Provisioning.WebPubSub/tests/Infrastructure/ExistingWebPubSubResources/resources/rg_TEST_module/rg_TEST_module.bicep b/sdk/provisioning/Azure.Provisioning.WebPubSub/tests/Infrastructure/ExistingWebPubSubResources/resources/rg_TEST_module/rg_TEST_module.bicep new file mode 100644 index 000000000000..30e8a98512f1 --- /dev/null +++ b/sdk/provisioning/Azure.Provisioning.WebPubSub/tests/Infrastructure/ExistingWebPubSubResources/resources/rg_TEST_module/rg_TEST_module.bicep @@ -0,0 +1,4 @@ + +resource webPubSubService_f0nsipxGj 'Microsoft.SignalRService/webPubSub@2021-10-01' existing = { + name: 'existingWebPubSub' +} diff --git a/sdk/provisioning/Azure.Provisioning.WebPubSub/tests/Infrastructure/WebPubSub/main.bicep b/sdk/provisioning/Azure.Provisioning.WebPubSub/tests/Infrastructure/WebPubSub/main.bicep new file mode 100644 index 000000000000..a2a5554476ea --- /dev/null +++ b/sdk/provisioning/Azure.Provisioning.WebPubSub/tests/Infrastructure/WebPubSub/main.bicep @@ -0,0 +1,40 @@ +targetScope = 'resourceGroup' + +@description('') +param location string = resourceGroup().location + + +resource webPubSubService_EAdO6ICWi 'Microsoft.SignalRService/webPubSub@2021-10-01' = { + name: toLower(take('webpubsub${uniqueString(resourceGroup().id)}', 24)) + location: location + sku: { + name: 'Standard_S1' + } + properties: { + } +} + +resource roleAssignment_eQVZzvRPP 'Microsoft.Authorization/roleAssignments@2022-04-01' = { + scope: webPubSubService_EAdO6ICWi + name: guid(webPubSubService_EAdO6ICWi.id, '00000000-0000-0000-0000-000000000000', subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '12cf5a90-567b-43ae-8102-96cf46c7d9b4')) + properties: { + roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '12cf5a90-567b-43ae-8102-96cf46c7d9b4') + principalId: '00000000-0000-0000-0000-000000000000' + principalType: 'ServicePrincipal' + } +} + +resource webPubSubHub_tKhq1vFqb 'Microsoft.SignalRService/webPubSub/hubs@2021-10-01' = { + parent: webPubSubService_EAdO6ICWi + name: 'hub' + properties: { + eventHandlers: [ + { + urlTemplate: 'tunnel:///eventhandler' + userEventPattern: '*' + } + ] + } +} + +output hostName string = webPubSubService_EAdO6ICWi.properties.hostName diff --git a/sdk/provisioning/Azure.Provisioning.WebPubSub/tests/Infrastructure/WebPubSubResources/main.bicep b/sdk/provisioning/Azure.Provisioning.WebPubSub/tests/Infrastructure/WebPubSubResources/main.bicep new file mode 100644 index 000000000000..a098516a8380 --- /dev/null +++ b/sdk/provisioning/Azure.Provisioning.WebPubSub/tests/Infrastructure/WebPubSubResources/main.bicep @@ -0,0 +1,38 @@ +targetScope = 'resourceGroup' + +@description('') +param location string = resourceGroup().location + + +resource signalRService_TvD5y8AYq 'Microsoft.SignalRService/signalR@2022-02-01' = { + name: toLower(take('signalr${uniqueString(resourceGroup().id)}', 24)) + location: location + sku: { + name: 'Standard_S1' + } + properties: { + features: [ + { + flag: 'ServiceMode' + value: 'Serverless' + } + ] + cors: { + allowedOrigins: [ + '*' + ] + } + } +} + +resource roleAssignment_hFSNN5tl8 'Microsoft.Authorization/roleAssignments@2022-04-01' = { + scope: signalRService_TvD5y8AYq + name: guid(signalRService_TvD5y8AYq.id, '00000000-0000-0000-0000-000000000000', subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '420fcaa2-552c-430f-98ca-3264be4806c7')) + properties: { + roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '420fcaa2-552c-430f-98ca-3264be4806c7') + principalId: '00000000-0000-0000-0000-000000000000' + principalType: 'ServicePrincipal' + } +} + +output hostName string = signalRService_TvD5y8AYq.properties.hostName diff --git a/sdk/provisioning/Azure.Provisioning.WebPubSub/tests/WebPubSubTests.cs b/sdk/provisioning/Azure.Provisioning.WebPubSub/tests/WebPubSubTests.cs new file mode 100644 index 000000000000..26d2ecf82e1a --- /dev/null +++ b/sdk/provisioning/Azure.Provisioning.WebPubSub/tests/WebPubSubTests.cs @@ -0,0 +1,46 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Threading.Tasks; +using Azure.Core.TestFramework; +using Azure.Provisioning.ResourceManager; +using Azure.Provisioning.Tests; +using Azure.ResourceManager.WebPubSub.Models; + +namespace Azure.Provisioning.WebPubSub.Tests +{ + public class WebPubSubTests : ProvisioningTestBase + { + public WebPubSubTests(bool isAsync) : base(isAsync) + { + } + + [RecordedTest] + public async Task WebPubSub() + { + TestInfrastructure infrastructure = new TestInfrastructure(configuration: new Configuration { UseInteractiveMode = true }); + var wps = new WebPubSubService(infrastructure, sku: new BillingInfoSku("Standard_S1")); + wps.AssignRole(RoleDefinition.WebPubSubServiceOwner, Guid.Empty); + var properties = new WebPubSubHubProperties(); + properties.EventHandlers.Add(new WebPubSubEventHandler("tunnel:///eventhandler") { UserEventPattern = "*" }); + _ = new WebPubSubHub(infrastructure, properties, parent: wps); + wps.AddOutput("hostName", data => data.HostName); + infrastructure.Build(GetOutputPath()); + + await ValidateBicepAsync(interactiveMode: true); + } + + [RecordedTest] + public async Task ExistingWebPubSubResources() + { + var infra = new TestInfrastructure(); + var rg = infra.AddResourceGroup(); + infra.AddResource(WebPubSubService.FromExisting(infra, "'existingWebPubSub'", rg)); + + infra.Build(GetOutputPath()); + + await ValidateBicepAsync(); + } + } +} diff --git a/sdk/provisioning/Azure.Provisioning.sln b/sdk/provisioning/Azure.Provisioning.sln index 0cca2265a50f..19b53d56f5a5 100644 --- a/sdk/provisioning/Azure.Provisioning.sln +++ b/sdk/provisioning/Azure.Provisioning.sln @@ -69,6 +69,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Azure.Provisioning.Storage. EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Azure.Core.TestFramework", "..\core\Azure.Core.TestFramework\src\Azure.Core.TestFramework.csproj", "{C2778320-ADC6-4EEE-A1D8-98590CD1223D}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Azure.Provisioning.WebPubSub", "Azure.Provisioning.WebPubSub\src\Azure.Provisioning.WebPubSub.csproj", "{1ABD7C57-D9A1-4CB5-BE6F-9E9F02E2886D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Azure.Provisioning.WebPubSub.Tests", "Azure.Provisioning.WebPubSub\tests\Azure.Provisioning.WebPubSub.Tests.csproj", "{AF6AAD6F-FD2D-4480-8194-0CB5E0083065}" +EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{822797CC-9E24-4BB1-AF93-2F2716C3C274}" ProjectSection(SolutionItems) = preProject README.md = README.md @@ -212,6 +216,14 @@ Global {C2778320-ADC6-4EEE-A1D8-98590CD1223D}.Debug|Any CPU.Build.0 = Debug|Any CPU {C2778320-ADC6-4EEE-A1D8-98590CD1223D}.Release|Any CPU.ActiveCfg = Release|Any CPU {C2778320-ADC6-4EEE-A1D8-98590CD1223D}.Release|Any CPU.Build.0 = Release|Any CPU + {1ABD7C57-D9A1-4CB5-BE6F-9E9F02E2886D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1ABD7C57-D9A1-4CB5-BE6F-9E9F02E2886D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1ABD7C57-D9A1-4CB5-BE6F-9E9F02E2886D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1ABD7C57-D9A1-4CB5-BE6F-9E9F02E2886D}.Release|Any CPU.Build.0 = Release|Any CPU + {AF6AAD6F-FD2D-4480-8194-0CB5E0083065}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AF6AAD6F-FD2D-4480-8194-0CB5E0083065}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AF6AAD6F-FD2D-4480-8194-0CB5E0083065}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AF6AAD6F-FD2D-4480-8194-0CB5E0083065}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/sdk/provisioning/Azure.Provisioning/api/Azure.Provisioning.net461.cs b/sdk/provisioning/Azure.Provisioning/api/Azure.Provisioning.net461.cs index e58830d0a27c..47109581fd8b 100644 --- a/sdk/provisioning/Azure.Provisioning/api/Azure.Provisioning.net461.cs +++ b/sdk/provisioning/Azure.Provisioning/api/Azure.Provisioning.net461.cs @@ -161,6 +161,7 @@ public partial class RoleAssignment : Azure.Provisioning.Resource public static RoleDefinition SignalRAppServer { get; } = new RoleDefinition("420fcaa2-552c-430f-98ca-3264be4806c7"); + /// + /// Web PubSub Service Owner - Full access to Azure Web PubSub Service REST APIs + /// + public static RoleDefinition WebPubSubServiceOwner { get; } = new RoleDefinition("12cf5a90-567b-43ae-8102-96cf46c7d9b4"); + /// Converts a string to a . public static implicit operator RoleDefinition(string value) => new RoleDefinition(value);