-
Notifications
You must be signed in to change notification settings - Fork 457
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Modules] Added Web PubSub module (#1621)
* [Modules] Added Web PubSub module (#1568) * feat(webpubsub): Added Web PubSub module * feat(webpubsub): Updated folders, added tests, updated readme * feat(webpubsub): Added nested rbac * fix: Applied suggestions from code review Co-authored-by: Alexander Sehr <ASehr@hotmail.de> * fix(webpubsub): Integrated multiple review feedback * feat(webpubsub): Added json based test parameters * ci(webpubsub): Added devops and github workflow definitions * fix(webpubsub): Updated default sku Co-authored-by: Alexander Sehr <ASehr@hotmail.de> * fix(webpubsub): Updated pipeline variables Co-authored-by: Alexander Sehr <ASehr@hotmail.de> * fix(webpubsub): Updated pipeline variables Co-authored-by: Alexander Sehr <ASehr@hotmail.de> * fix(webpubsub): Updated pipeline variables Co-authored-by: Alexander Sehr <ASehr@hotmail.de> * fix(webpubsub): Deleted .test folder as requested Co-authored-by: Alexander Sehr <ASehr@hotmail.de> * Moved mmodule to temp loc * Merged latest main & moved SignalR to target location * Updated SignalR pipelines to latest * Several smaller fixes Co-authored-by: Jan-Henrik Damaschke <jdamaschke@visorian.com>
- Loading branch information
1 parent
be70744
commit d99d3ed
Showing
8 changed files
with
1,070 additions
and
0 deletions.
There are no files selected for viewing
55 changes: 55 additions & 0 deletions
55
.azuredevops/modulePipelines/ms.signalrservice.webpubsub.yml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
name: 'SignalRService - webPubSub' | ||
|
||
parameters: | ||
- name: removeDeployment | ||
displayName: Remove deployed module | ||
type: boolean | ||
default: true | ||
- name: prerelease | ||
displayName: Publish prerelease module | ||
type: boolean | ||
default: false | ||
|
||
pr: none | ||
|
||
trigger: | ||
batch: true | ||
branches: | ||
include: | ||
- main | ||
paths: | ||
include: | ||
- '/.azuredevops/modulePipelines/ms.signalrservice.webpubsub.yml' | ||
- '/.azuredevops/pipelineTemplates/*.yml' | ||
- '/modules/Microsoft.SignalRService/webPubSub/*' | ||
- '/modules/.global/global.module.tests.ps1' | ||
exclude: | ||
- '/**/*.md' | ||
|
||
variables: | ||
- template: '../../global.variables.yml' | ||
- group: 'PLATFORM_VARIABLES' | ||
- name: modulePath | ||
value: '/modules/Microsoft.SignalRService/webPubSub' | ||
|
||
stages: | ||
- stage: Validation | ||
displayName: Static validation | ||
jobs: | ||
- template: /.azuredevops/pipelineTemplates/jobs.validateModulePester.yml | ||
|
||
- stage: Deployment | ||
displayName: Deployment validation | ||
jobs: | ||
- template: /.azuredevops/pipelineTemplates/jobs.validateModuleDeployment.yml | ||
parameters: | ||
removeDeployment: '${{ parameters.removeDeployment }}' | ||
deploymentBlocks: | ||
- path: $(modulePath)/.test/min.parameters.json | ||
- path: $(modulePath)/.test/parameters.json | ||
|
||
- stage: Publishing | ||
displayName: Publishing | ||
condition: and(succeeded(), or(eq(variables['Build.SourceBranch'], 'refs/heads/main'), eq(variables['Build.SourceBranch'], 'refs/heads/master'), eq('${{ parameters.prerelease }}', 'true'))) | ||
jobs: | ||
- template: /.azuredevops/pipelineTemplates/jobs.publishModule.yml |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,142 @@ | ||
name: 'SignalRService: webPubSub' | ||
|
||
on: | ||
workflow_dispatch: | ||
inputs: | ||
removeDeployment: | ||
type: boolean | ||
description: 'Remove deployed module' | ||
required: false | ||
default: true | ||
prerelease: | ||
type: boolean | ||
description: 'Publish prerelease module' | ||
required: false | ||
default: false | ||
push: | ||
branches: | ||
- main | ||
paths: | ||
- '.github/actions/templates/**' | ||
- '.github/workflows/ms.signalrservice.webpubsub.yml' | ||
- 'modules/Microsoft.SignalRService/webPubSub/**' | ||
- 'modules/.global/global.module.tests.ps1' | ||
- '!*/**/readme.md' | ||
- 'utilities/pipelines/**' | ||
- '!utilities/pipelines/dependencies/**' | ||
|
||
env: | ||
variablesPath: 'global.variables.yml' | ||
modulePath: 'modules/Microsoft.SignalRService/webPubSub' | ||
workflowPath: '.github/workflows/ms.signalrservice.webpubsub.yml' | ||
AZURE_CREDENTIALS: ${{ secrets.AZURE_CREDENTIALS }} | ||
ARM_SUBSCRIPTION_ID: '${{ secrets.ARM_SUBSCRIPTION_ID }}' | ||
ARM_MGMTGROUP_ID: '${{ secrets.ARM_MGMTGROUP_ID }}' | ||
ARM_TENANT_ID: '${{ secrets.ARM_TENANT_ID }}' | ||
DEPLOYMENT_SP_ID: '${{ secrets.DEPLOYMENT_SP_ID }}' | ||
|
||
jobs: | ||
########################### | ||
# Initialize pipeline # | ||
########################### | ||
job_initialize_pipeline: | ||
runs-on: ubuntu-20.04 | ||
name: 'Initialize pipeline' | ||
steps: | ||
- name: 'Checkout' | ||
uses: actions/checkout@v2 | ||
with: | ||
fetch-depth: 0 | ||
- name: 'Set input parameters to output variables' | ||
id: get-workflow-param | ||
uses: ./.github/actions/templates/getWorkflowInput | ||
with: | ||
workflowPath: '${{ env.workflowPath}}' | ||
- name: 'Get parameter file paths' | ||
id: get-parameter-file-paths | ||
uses: ./.github/actions/templates/getParameterFiles | ||
with: | ||
modulePath: '${{ env.modulePath }}' | ||
outputs: | ||
removeDeployment: ${{ steps.get-workflow-param.outputs.removeDeployment }} | ||
parameterFilePaths: ${{ steps.get-parameter-file-paths.outputs.parameterFilePaths }} | ||
|
||
######################### | ||
# Static validation # | ||
######################### | ||
job_module_pester_validation: | ||
runs-on: ubuntu-20.04 | ||
name: 'Static validation' | ||
steps: | ||
- name: 'Checkout' | ||
uses: actions/checkout@v2 | ||
with: | ||
fetch-depth: 0 | ||
- name: 'Run tests' | ||
uses: ./.github/actions/templates/validateModulePester | ||
with: | ||
modulePath: '${{ env.modulePath }}' | ||
|
||
############################# | ||
# Deployment validation # | ||
############################# | ||
job_module_deploy_validation: | ||
runs-on: ubuntu-20.04 | ||
name: 'Deployment validation' | ||
needs: | ||
- job_initialize_pipeline | ||
- job_module_pester_validation | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
parameterFilePaths: ${{ fromJSON(needs.job_initialize_pipeline.outputs.parameterFilePaths) }} | ||
steps: | ||
- name: 'Checkout' | ||
uses: actions/checkout@v2 | ||
with: | ||
fetch-depth: 0 | ||
- name: Set environment variables | ||
uses: ./.github/actions/templates/setEnvironmentVariables | ||
with: | ||
variablesPath: ${{ env.variablesPath }} | ||
- name: 'Using parameter file [${{ matrix.parameterFilePaths }}]' | ||
uses: ./.github/actions/templates/validateModuleDeployment | ||
with: | ||
templateFilePath: '${{ env.modulePath }}/deploy.bicep' | ||
parameterFilePath: '${{ env.modulePath }}/${{ matrix.parameterFilePaths }}' | ||
location: '${{ env.location }}' | ||
resourceGroupName: '${{ env.resourceGroupName }}' | ||
subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}' | ||
managementGroupId: '${{ secrets.ARM_MGMTGROUP_ID }}' | ||
removeDeployment: '${{ needs.job_initialize_pipeline.outputs.removeDeployment }}' | ||
|
||
################## | ||
# Publishing # | ||
################## | ||
job_publish_module: | ||
name: 'Publishing' | ||
if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master' || github.event.inputs.prerelease == 'true' | ||
runs-on: ubuntu-20.04 | ||
needs: | ||
- job_module_deploy_validation | ||
steps: | ||
- name: 'Checkout' | ||
uses: actions/checkout@v2 | ||
with: | ||
fetch-depth: 0 | ||
- name: Set environment variables | ||
uses: ./.github/actions/templates/setEnvironmentVariables | ||
with: | ||
variablesPath: ${{ env.variablesPath }} | ||
- name: 'Publishing' | ||
uses: ./.github/actions/templates/publishModule | ||
with: | ||
templateFilePath: '${{ env.modulePath }}/deploy.bicep' | ||
templateSpecsRGName: '${{ env.templateSpecsRGName }}' | ||
templateSpecsRGLocation: '${{ env.templateSpecsRGLocation }}' | ||
templateSpecsDescription: '${{ env.templateSpecsDescription }}' | ||
templateSpecsDoPublish: '${{ env.templateSpecsDoPublish }}' | ||
bicepRegistryName: '${{ env.bicepRegistryName }}' | ||
bicepRegistryRGName: '${{ env.bicepRegistryRGName }}' | ||
bicepRegistryRgLocation: '${{ env.bicepRegistryRgLocation }}' | ||
bicepRegistryDoPublish: '${{ env.bicepRegistryDoPublish }}' |
57 changes: 57 additions & 0 deletions
57
modules/Microsoft.SignalRService/webPubSub/.bicep/nested_rbac.bicep
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
@sys.description('Required. The IDs of the principals to assign the role to.') | ||
param principalIds array | ||
|
||
@sys.description('Required. The name of the role to assign. If it cannot be found you can specify the role definition ID instead.') | ||
param roleDefinitionIdOrName string | ||
|
||
@sys.description('Required. The resource ID of the resource to apply the role assignment to.') | ||
param resourceId string | ||
|
||
@sys.description('Optional. The principal type of the assigned principal ID.') | ||
@allowed([ | ||
'ServicePrincipal' | ||
'Group' | ||
'User' | ||
'ForeignGroup' | ||
'Device' | ||
'' | ||
]) | ||
param principalType string = '' | ||
|
||
@sys.description('Optional. The description of the role assignment.') | ||
param description string = '' | ||
|
||
var builtInRoleNames = { | ||
'Owner': subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '8e3af657-a8ff-443c-a75c-2fe8c4bcb635') | ||
'Contributor': subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c') | ||
'Reader': subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'acdd72a7-3385-48ef-bd42-f606fba81ae7') | ||
'Log Analytics Contributor': subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '92aaf0da-9dab-42b6-94a3-d43ce8d16293') | ||
'Log Analytics Reader': subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '73c42c96-874c-492b-b04d-ab87d138a893') | ||
'Managed Application Contributor Role': subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '641177b8-a67a-45b9-a033-47bc880bb21e') | ||
'Managed Application Operator Role': subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'c7393b34-138c-406f-901b-d8cf2b17e6ae') | ||
'Managed Applications Reader': subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'b9331d33-8a36-4f8c-b097-4f54124fdb44') | ||
'Monitoring Contributor': subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '749f88d5-cbae-40b8-bcfc-e573ddc772fa') | ||
'Monitoring Metrics Publisher': subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '3913510d-42f4-4e42-8a64-420c390055eb') | ||
'Monitoring Reader': subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '43d0d8ad-25c7-4714-9337-8ba259a9fe05') | ||
'Resource Policy Contributor': subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '36243c78-bf99-498c-9df9-86d9f8d28608') | ||
'SignalR AccessKey Reader': subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '04165923-9d83-45d5-8227-78b77b0a687e') | ||
'SignalR/Web PubSub Contributor': subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '8cf5e20a-e4b2-4e9d-b3a1-5ceb692c2761') | ||
'User Access Administrator': subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '18d7d88d-d35e-4fb5-a5c3-7773c20a72d9') | ||
'Web PubSub Service Owner (Preview)': subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '12cf5a90-567b-43ae-8102-96cf46c7d9b4') | ||
'Web PubSub Service Reader (Preview)': subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'bfb1c7d2-fb1a-466b-b2ba-aee63b92deaf') | ||
} | ||
|
||
resource webPubSub 'Microsoft.SignalRService/webPubSub@2021-10-01' existing = { | ||
name: last(split(resourceId, '/')) | ||
} | ||
|
||
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2020-10-01-preview' = [for principalId in principalIds: { | ||
name: guid(webPubSub.id, principalId, roleDefinitionIdOrName) | ||
properties: { | ||
description: description | ||
roleDefinitionId: contains(builtInRoleNames, roleDefinitionIdOrName) ? builtInRoleNames[roleDefinitionIdOrName] : roleDefinitionIdOrName | ||
principalId: principalId | ||
principalType: !empty(principalType) ? any(principalType) : null | ||
} | ||
scope: webPubSub | ||
}] |
9 changes: 9 additions & 0 deletions
9
modules/Microsoft.SignalRService/webPubSub/.test/min.parameters.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
{ | ||
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", | ||
"contentVersion": "1.0.0.0", | ||
"parameters": { | ||
"name": { | ||
"value": "<<namePrefix>>-az-pubsub-min-001" | ||
} | ||
} | ||
} |
83 changes: 83 additions & 0 deletions
83
modules/Microsoft.SignalRService/webPubSub/.test/parameters.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
{ | ||
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", | ||
"contentVersion": "1.0.0.0", | ||
"parameters": { | ||
"location": { | ||
"value": "westeurope" | ||
}, | ||
"name": { | ||
"value": "<<namePrefix>>-az-pubsub-x-001" | ||
}, | ||
"capacity": { | ||
"value": 2 | ||
}, | ||
"clientCertEnabled": { | ||
"value": false | ||
}, | ||
"disableAadAuth": { | ||
"value": false | ||
}, | ||
"disableLocalAuth": { | ||
"value": true | ||
}, | ||
"lock": { | ||
"value": "CanNotDelete" | ||
}, | ||
"sku": { | ||
"value": "Standard_S1" | ||
}, | ||
"roleAssignments": { | ||
"value": [ | ||
{ | ||
"roleDefinitionIdOrName": "Reader", | ||
"principalIds": [ | ||
"<<deploymentSpId>>" | ||
] | ||
} | ||
] | ||
}, | ||
"networkAcls": { | ||
"value": { | ||
"defaultAction": "Allow", | ||
"privateEndpoints": [ | ||
{ | ||
"name": "pe-<<namePrefix>>-az-pubsub-x-001-webpubsub-0", | ||
"allow": [], | ||
"deny": [ | ||
"ServerConnection", | ||
"Trace" | ||
] | ||
} | ||
], | ||
"publicNetwork": { | ||
"allow": [], | ||
"deny": [ | ||
"RESTAPI", | ||
"Trace" | ||
] | ||
} | ||
} | ||
}, | ||
"systemAssignedIdentity": { | ||
"value": true | ||
}, | ||
"tags": { | ||
"value": { | ||
"purpose": "test" | ||
} | ||
}, | ||
"resourceLogConfigurationsToEnable": { | ||
"value": [ | ||
"ConnectivityLogs" | ||
] | ||
}, | ||
"privateEndpoints": { | ||
"value": [ | ||
{ | ||
"subnetResourceId": "/subscriptions/<<subscriptionId>>/resourceGroups/validation-rg/providers/Microsoft.Network/virtualNetworks/adp-<<namePrefix>>-az-vnet-x-001/subnets/<<namePrefix>>-az-subnet-x-005-privateEndpoints", | ||
"service": "webpubsub" | ||
} | ||
] | ||
} | ||
} | ||
} |
Oops, something went wrong.