From 58d6506839634559c47d7152c2356252ee4b9f51 Mon Sep 17 00:00:00 2001
From: MrMCake
Date: Mon, 15 Nov 2021 15:57:34 +0100
Subject: [PATCH 001/112] Recovered original state + moved token replacement
---
{.pipelines => .azuredevops}/linter.yml | 0
.../ms.analysisservices.servers.yml | 72 +++
.../ms.compute.virtualmachines.yml | 72 +++
.../ms.network.virtualwans.yml | 72 +++
.../pipelineTemplates/module.jobs.deploy.yml | 217 ++++++++
.../pipelineTemplates/module.jobs.publish.yml | 295 ++++++++++
.../pipelineTemplates/module.jobs.remove.yml | 91 +++
.../module.jobs.validate.yml | 386 +++++++++++++
.../pipelineVariables/global.variables.yml | 84 +++
.../actions/templates/deployModule/action.yml | 12 +-
.../templates/publishModule/action.yml | 11 +-
.../actions/templates/removeModule/action.yml | 7 +-
.../templates/validateModuleApis/action.yml | 8 +-
.../templates/validateModuleDeploy/action.yml | 11 +-
.../validateModuleGeneral/action.yml | 7 +-
.../workflows/ms.analysisservices.servers.yml | 6 +-
.../ms.apimanagement.service.apis.yml | 2 +-
...anagement.service.authorizationservers.yml | 2 +-
.../ms.apimanagement.service.backends.yml | 2 +-
.../ms.apimanagement.service.caches.yml | 2 +-
.../ms.apimanagement.service.namedvalues.yml | 2 +-
.../ms.apimanagement.service.products.yml | 2 +-
...ms.apimanagement.service.subscriptions.yml | 2 +-
.../workflows/ms.apimanagement.service.yml | 2 +-
.../ms.authorization.policyassignments.yml | 2 +-
.../ms.authorization.policydefinitions.yml | 2 +-
.../ms.authorization.policyexemptions.yml | 2 +-
.../ms.authorization.policysetdefinitions.yml | 2 +-
.../ms.authorization.roleassignments.yml | 2 +-
.../ms.authorization.roledefinitions.yml | 2 +-
.github/workflows/ms.automanage.accounts.yml | 2 +-
...naccounts.softwareupdateconfigurations.yml | 2 +-
.../ms.automation.automationaccounts.yml | 2 +-
.github/workflows/ms.batch.batchaccounts.yml | 2 +-
.../ms.cognitiveservices.accounts.yml | 2 +-
.../workflows/ms.compute.availabilitysets.yml | 2 +-
.../ms.compute.diskencryptionsets.yml | 2 +-
.../workflows/ms.compute.galleries.images.yml | 2 +-
.github/workflows/ms.compute.galleries.yml | 2 +-
.github/workflows/ms.compute.images.yml | 2 +-
.../ms.compute.proximityplacementgroups.yml | 2 +-
.../workflows/ms.compute.virtualmachines.yml | 2 +-
.../ms.compute.virtualmachinescalesets.yml | 2 +-
.github/workflows/ms.consumption.budgets.yml | 2 +-
.../ms.containerinstance.containergroups.yml | 2 +-
.../ms.containerregistry.registries.yml | 2 +-
.../ms.containerservice.managedclusters.yml | 2 +-
.../workflows/ms.databricks.workspaces.yml | 2 +-
.../workflows/ms.datafactory.factories.yml | 2 +-
...esktopvirtualization.applicationgroups.yml | 2 +-
.../ms.desktopvirtualization.hostpools.yml | 2 +-
.../ms.desktopvirtualization.workspaces.yml | 2 +-
.../ms.documentdb.databaseaccounts.yml | 2 +-
.github/workflows/ms.eventgrid.topics.yml | 2 +-
.github/workflows/ms.eventhub.namespaces.yml | 2 +-
.github/workflows/ms.healthbot.healthbots.yml | 2 +-
.../workflows/ms.insights.actiongroups.yml | 2 +-
.../ms.insights.activitylogalerts.yml | 2 +-
.github/workflows/ms.insights.components.yml | 2 +-
.../ms.insights.diagnosticsettings.yml | 2 +-
.../workflows/ms.insights.metricalerts.yml | 2 +-
.../ms.insights.privatelinkscopes.yml | 2 +-
.../ms.insights.scheduledqueryrules.yml | 2 +-
.github/workflows/ms.keyvault.vaults.yml | 2 +-
.github/workflows/ms.logic.workflows.yml | 2 +-
.../ms.machinelearningservices.workspaces.yml | 2 +-
...managedidentity.userassignedidentities.yml | 2 +-
...anagedservices.registrationdefinitions.yml | 2 +-
.../ms.management.managementgroups.yml | 2 +-
.../workflows/ms.netapp.netappaccounts.yml | 4 +-
.../ms.network.applicationgateways.yml | 2 +-
.../ms.network.applicationsecuritygroups.yml | 2 +-
.../workflows/ms.network.azurefirewalls.yml | 2 +-
.github/workflows/ms.network.bastionhosts.yml | 2 +-
.github/workflows/ms.network.connections.yml | 2 +-
.../ms.network.ddosprotectionplans.yml | 2 +-
.../ms.network.expressroutecircuits.yml | 2 +-
.github/workflows/ms.network.ipgroups.yml | 2 +-
.../workflows/ms.network.loadbalancers.yml | 2 +-
.../ms.network.localnetworkgateways.yml | 2 +-
.github/workflows/ms.network.natgateways.yml | 2 +-
.../ms.network.networksecuritygroups.yml | 2 +-
.../workflows/ms.network.networkwatchers.yml | 2 +-
.../workflows/ms.network.privatednszones.yml | 2 +-
.../workflows/ms.network.privateendpoints.yml | 2 +-
.../ms.network.publicipaddresses.yml | 2 +-
.../workflows/ms.network.publicipprefixes.yml | 2 +-
.github/workflows/ms.network.routetables.yml | 2 +-
.../ms.network.trafficmanagerprofiles.yml | 2 +-
.../ms.network.virtualnetworkgateways.yml | 2 +-
.../workflows/ms.network.virtualnetworks.yml | 2 +-
.github/workflows/ms.network.virtualwans.yml | 4 +-
.../ms.operationalinsights.workspaces.yml | 2 +-
.../workflows/ms.recoveryservices.vaults.yml | 2 +-
.../ms.resources.deploymentscripts.yml | 2 +-
.../workflows/ms.resources.resourcegroups.yml | 2 +-
.../ms.security.azuresecuritycenter.yml | 2 +-
.../workflows/ms.servicebus.namespaces.yml | 2 +-
.../ms.sql.managedinstances.databases.yml | 2 +-
.github/workflows/ms.sql.managedinstances.yml | 2 +-
.github/workflows/ms.sql.servers.yml | 2 +-
.../workflows/ms.storage.storageaccounts.yml | 2 +-
...ms.virtualmachineimages.imagetemplates.yml | 2 +-
.github/workflows/ms.web.connections.yml | 2 +-
.../workflows/ms.web.hostingenvironments.yml | 2 +-
.github/workflows/ms.web.serverfarms.yml | 2 +-
.github/workflows/ms.web.sites.yml | 2 +-
.github/workflows/platform.dependencies.yml | 52 +-
arm/.global/global.module.tests.ps1 | 40 +-
.../servers/.parameters/min.parameters.json | 9 +
.../.parameters/min.parameters.json | 53 ++
.../virtualMachines/deploy.bicep | 4 +-
.../virtualMachines/readme.md | 2 +-
arm/README.md | 184 +++---
.../service/parameters/parameters.json | 0
.../parameters/parameters.json | 0
.../galleries/parameters/parameters.json | 0
.../images/parameters/parameters.json | 0
.../parameters/parameters.json | 0
.../registries/parameters/parameters.json | 0
.../parameters/parameters.json | 0
.../hostpools/parameters/parameters.json | 0
.../namespaces/parameters/parameters.json | 0
.../eventhubs/parameters/parameters.json | 0
.../actionGroups/parameters/parameters.json | 0
.../components/parameters/parameters.json | 0
.../vaults/parameters/parameters.json | 0
.../parameters/platform.parameters.json | 0
.../parameters/parameters.json | 0
.../parameters/parameters.json | 0
.../parameters/apgw.parameters.json | 0
.../parameters/ase.parameters.json | 0
.../parameters/bastion.parameters.json | 0
.../parameters/parameters.json | 0
.../parameters/sqlmi.parameters.json | 0
.../parameters/parameters.json | 0
.../parameters/parameters.json | 0
.../parameters/apgw.parameters.json | 0
.../parameters/bas.parameters.json | 0
.../parameters/lb.parameters.json | 0
.../routeTables/parameters/parameters.json | 0
.../parameters/2.vnetpeer01.parameters.json | 0
.../parameters/3.vnetpeer02.parameters.json | 0
.../parameters/4.azfw.parameters.json | 0
.../parameters/5.aks.parameters.json | 0
.../parameters/6.sqlmi.parameters.json | 0
.../parameters/parameters.json | 0
.../workspaces/parameters/parameters.json | 0
.../vaults/parameters/parameters.json | 0
.../parameters/artifacts.parameters.json | 0
.../parameters/platform-core.parameters.json | 0
.../parameters/validation.parameters.json | 0
.../parameters/fa.parameters.json | 0
.../parameters/parameters.json | 0
.../serverfarms/parameters/parameters.json | 0
.../New-ModuleDeployment.ps1 | 0
.../Initialize-UniversalArtifactPublish.ps1 | 144 +++++
.../resourcePublish/Publish-ModuleToNuget.ps1 | 524 ++++++++++++++++++
.../Publish-ModuleToPrivateBicepRegistry.ps1 | 0
.../Publish-ModuleToTemplateSpec.ps1 | 2 +-
.../resourceRemoval/Remove-DeployedModule.ps1 | 0
.../resourceRemoval/Remove-NetAppAccount.ps1 | 0
.../resourceRemoval/Remove-vWan.ps1 | 0
.../helper/Remove-Resource.ps1 | 0
.../Test-TemplateWithParameterFile.ps1 | 0
.../sharedScripts/Set-EnvironmentOnAgent.ps1 | 7 +-
.../Convert-TokensInParameterFile.ps1 | 0
...calCustomParameterFileTokensInKeyVault.ps1 | 0
.../helper/Convert-TokensInFileList.ps1 | 0
.../Get-RemoteCustomParameterFileTokens.ps1 | 0
utilities/tools/Test-ModuleLocally.ps1 | 4 +-
171 files changed, 2293 insertions(+), 269 deletions(-)
rename {.pipelines => .azuredevops}/linter.yml (100%)
create mode 100644 .azuredevops/modulePipelines/ms.analysisservices.servers.yml
create mode 100644 .azuredevops/modulePipelines/ms.compute.virtualmachines.yml
create mode 100644 .azuredevops/modulePipelines/ms.network.virtualwans.yml
create mode 100644 .azuredevops/pipelineTemplates/module.jobs.deploy.yml
create mode 100644 .azuredevops/pipelineTemplates/module.jobs.publish.yml
create mode 100644 .azuredevops/pipelineTemplates/module.jobs.remove.yml
create mode 100644 .azuredevops/pipelineTemplates/module.jobs.validate.yml
create mode 100644 .azuredevops/pipelineVariables/global.variables.yml
create mode 100644 arm/Microsoft.AnalysisServices/servers/.parameters/min.parameters.json
create mode 100644 arm/Microsoft.Compute/virtualMachines/.parameters/min.parameters.json
rename utilities/{ => pipelines}/dependencies/Microsoft.ApiManagement/service/parameters/parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Authorization/roleAssignments/parameters/parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Compute/galleries/parameters/parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Compute/galleriesResources/images/parameters/parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Compute/virtualMachines/parameters/parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.ContainerRegistry/registries/parameters/parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.DesktopVirtualization/applicationgroups/parameters/parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.DesktopVirtualization/hostpools/parameters/parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.EventHub/namespaces/parameters/parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.EventHub/namespacesResources/eventhubs/parameters/parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Insights/actionGroups/parameters/parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Insights/components/parameters/parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.KeyVault/vaults/parameters/parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.KeyVault/vaults/parameters/platform.parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.ManagedIdentity/userAssignedIdentities/parameters/parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Network/applicationSecurityGroups/parameters/parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Network/networkSecurityGroups/parameters/apgw.parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Network/networkSecurityGroups/parameters/ase.parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Network/networkSecurityGroups/parameters/bastion.parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Network/networkSecurityGroups/parameters/parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Network/networkSecurityGroups/parameters/sqlmi.parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Network/networkWatchers/parameters/parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Network/privateDnsZones/parameters/parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Network/publicIPAddresses/parameters/apgw.parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Network/publicIPAddresses/parameters/bas.parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Network/publicIPAddresses/parameters/lb.parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Network/routeTables/parameters/parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Network/virtualNetworks/parameters/2.vnetpeer01.parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Network/virtualNetworks/parameters/3.vnetpeer02.parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Network/virtualNetworks/parameters/4.azfw.parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Network/virtualNetworks/parameters/5.aks.parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Network/virtualNetworks/parameters/6.sqlmi.parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Network/virtualNetworks/parameters/parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.OperationalInsights/workspaces/parameters/parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.RecoveryServices/vaults/parameters/parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Resources/resourceGroups/parameters/artifacts.parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Resources/resourceGroups/parameters/platform-core.parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Resources/resourceGroups/parameters/validation.parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Storage/storageAccounts/parameters/fa.parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Storage/storageAccounts/parameters/parameters.json (100%)
rename utilities/{ => pipelines}/dependencies/Microsoft.Web/serverfarms/parameters/parameters.json (100%)
rename {.github/actions/templates/deployModule/scripts => utilities/pipelines/resourceDeployment}/New-ModuleDeployment.ps1 (100%)
create mode 100644 utilities/pipelines/resourcePublish/Initialize-UniversalArtifactPublish.ps1
create mode 100644 utilities/pipelines/resourcePublish/Publish-ModuleToNuget.ps1
rename {.github/actions/templates/publishModule/scripts => utilities/pipelines/resourcePublish}/Publish-ModuleToPrivateBicepRegistry.ps1 (100%)
rename {.github/actions/templates/publishModule/scripts => utilities/pipelines/resourcePublish}/Publish-ModuleToTemplateSpec.ps1 (99%)
rename utilities/{ => pipelines}/resourceRemoval/Remove-DeployedModule.ps1 (100%)
rename utilities/{ => pipelines}/resourceRemoval/Remove-NetAppAccount.ps1 (100%)
rename utilities/{ => pipelines}/resourceRemoval/Remove-vWan.ps1 (100%)
rename utilities/{ => pipelines}/resourceRemoval/helper/Remove-Resource.ps1 (100%)
rename {.github/actions/templates/validateModuleDeploy/scripts => utilities/pipelines/resourceValidation}/Test-TemplateWithParameterFile.ps1 (100%)
rename {.github/actions => utilities/pipelines}/sharedScripts/Set-EnvironmentOnAgent.ps1 (96%)
rename utilities/{ => pipelines}/tokensReplacement/Convert-TokensInParameterFile.ps1 (100%)
rename utilities/{ => pipelines}/tokensReplacement/Set-LocalCustomParameterFileTokensInKeyVault.ps1 (100%)
rename utilities/{ => pipelines}/tokensReplacement/helper/Convert-TokensInFileList.ps1 (100%)
rename utilities/{ => pipelines}/tokensReplacement/helper/Get-RemoteCustomParameterFileTokens.ps1 (100%)
diff --git a/.pipelines/linter.yml b/.azuredevops/linter.yml
similarity index 100%
rename from .pipelines/linter.yml
rename to .azuredevops/linter.yml
diff --git a/.azuredevops/modulePipelines/ms.analysisservices.servers.yml b/.azuredevops/modulePipelines/ms.analysisservices.servers.yml
new file mode 100644
index 0000000000..bb631f00b7
--- /dev/null
+++ b/.azuredevops/modulePipelines/ms.analysisservices.servers.yml
@@ -0,0 +1,72 @@
+name: 'AnalysisServices - Servers'
+
+parameters:
+ - name: removeDeployment
+ displayName: Remove deployed module
+ type: boolean
+ default: true
+ - name: versioningOption
+ displayName: The mode to handle the version increments [major|minor|patch]
+ type: string
+ default: patch
+ values:
+ - patch
+ - minor
+ - major
+ - name: customVersion
+ displayName: Custom version to apply. Used only if higher than latest
+ type: string
+ default: '0.0.1'
+
+trigger:
+ batch: true
+ branches:
+ include:
+ - main
+ paths:
+ include:
+ - /.azuredevops/modulePipelines/ms.analysisservices.servers.yml
+ - /.azuredevops/pipelineTemplates/module.*.yml
+ - /arm/Microsoft.AnalysisServices/servers/*
+ exclude:
+ - /**/*.md
+
+variables:
+ - template: '/.azuredevops/pipelineVariables/global.variables.yml'
+ - group: 'Platform-Tokens'
+ - name: moduleName
+ value: AnalysisServices
+ - name: modulePath
+ value: '/arm/Microsoft.AnalysisServices/servers'
+
+stages:
+ - stage: Validation
+ jobs:
+ - template: /.azuredevops/pipelineTemplates/module.jobs.validate.yml
+ parameters:
+ deploymentBlocks:
+ - path: $(modulePath)/.parameters/parameters.json
+ - path: $(modulePath)/.parameters/min.parameters.json
+
+ - stage: Deployment
+ jobs:
+ - template: /.azuredevops/pipelineTemplates/module.jobs.deploy.yml
+ parameters:
+ removeDeployment: '${{ parameters.removeDeployment }}'
+ deploymentBlocks:
+ - path: $(modulePath)/.parameters/parameters.json
+ - path: $(modulePath)/.parameters/min.parameters.json
+
+ - stage: Publishing
+ condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
+ jobs:
+ - template: /.azuredevops/pipelineTemplates/module.jobs.publish.yml
+ parameters:
+ versioningOption: '${{ parameters.versioningOption }}'
+ customVersion: '${{ parameters.customVersion }}'
+
+ - stage: Removal
+ dependsOn: Deployment
+ condition: and(in(dependencies.Deployment.result, 'Succeeded', 'Failed'), eq( '${{ parameters.removeDeployment }}', 'true'))
+ jobs:
+ - template: /.azuredevops/pipelineTemplates/module.jobs.remove.yml
diff --git a/.azuredevops/modulePipelines/ms.compute.virtualmachines.yml b/.azuredevops/modulePipelines/ms.compute.virtualmachines.yml
new file mode 100644
index 0000000000..8985acf8d2
--- /dev/null
+++ b/.azuredevops/modulePipelines/ms.compute.virtualmachines.yml
@@ -0,0 +1,72 @@
+name: 'Compute - Virtualmachines'
+
+parameters:
+ - name: removeDeployment
+ displayName: Remove deployed module
+ type: boolean
+ default: true
+ - name: versioningOption
+ displayName: The mode to handle the version increments [major|minor|patch]
+ type: string
+ default: patch
+ values:
+ - patch
+ - minor
+ - major
+ - name: customVersion
+ displayName: Custom version to apply. Used only if higher than latest
+ type: string
+ default: '0.0.1'
+
+trigger:
+ batch: true
+ branches:
+ include:
+ - main
+ paths:
+ include:
+ - '/.azuredevops/modulePipelines/ms.compute.virtualmachines.yml'
+ - '/.azuredevops/pipelineTemplates/module.*.yml'
+ - '/arm/Microsoft.Compute/virtualMachines/*'
+ exclude:
+ - '/arm/Microsoft.Compute/virtualMachines/*readme.md'
+
+variables:
+ - template: '/.azuredevops/pipelineVariables/global.variables.yml'
+ - group: 'Platform-Tokens'
+ - name: moduleName
+ value: virtualMachines
+ - name: modulePath
+ value: '/arm/Microsoft.Compute/virtualMachines'
+
+stages:
+ - stage: Validation
+ jobs:
+ - template: /.azuredevops/pipelineTemplates/module.jobs.validate.yml
+ parameters:
+ deploymentBlocks:
+ - path: $(modulePath)/.parameters/parameters.json
+ - path: $(modulePath)/.parameters/min.parameters.json
+
+ - stage: Deployment
+ jobs:
+ - template: /.azuredevops/pipelineTemplates/module.jobs.deploy.yml
+ parameters:
+ removeDeployment: '${{ parameters.removeDeployment }}'
+ deploymentBlocks:
+ - path: $(modulePath)/.parameters/parameters.json
+ - path: $(modulePath)/.parameters/min.parameters.json
+
+ - stage: Publishing
+ condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
+ jobs:
+ - template: /.azuredevops/pipelineTemplates/module.jobs.publish.yml
+ parameters:
+ versioningOption: '${{ parameters.versioningOption }}'
+ customVersion: '${{ parameters.customVersion }}'
+
+ - stage: Removal
+ dependsOn: Deployment
+ condition: and(in(dependencies.Deployment.result, 'Succeeded', 'Failed'), eq( '${{ parameters.removeDeployment }}', 'true'))
+ jobs:
+ - template: /.azuredevops/pipelineTemplates/module.jobs.remove.yml
diff --git a/.azuredevops/modulePipelines/ms.network.virtualwans.yml b/.azuredevops/modulePipelines/ms.network.virtualwans.yml
new file mode 100644
index 0000000000..cf1381d10e
--- /dev/null
+++ b/.azuredevops/modulePipelines/ms.network.virtualwans.yml
@@ -0,0 +1,72 @@
+name: 'Network - Virtualwans'
+
+parameters:
+ - name: removeDeployment
+ displayName: Remove deployed module
+ type: boolean
+ default: true
+ - name: versioningOption
+ displayName: The mode to handle the version increments [major|minor|patch]
+ type: string
+ default: patch
+ values:
+ - patch
+ - minor
+ - major
+ - name: customVersion
+ displayName: Custom version to apply. Used only if higher than latest
+ type: string
+ default: '0.0.1'
+
+trigger:
+ batch: true
+ branches:
+ include:
+ - main
+ paths:
+ include:
+ - '/.azuredevops/modulePipelines/ms.network.virtualwans.yml'
+ - '/.azuredevops/pipelineTemplates/module.*.yml'
+ - '/arm/Microsoft.Network/virtualwans/*'
+ exclude:
+ - '/arm/Microsoft.Network/virtualwans/*readme.md'
+
+variables:
+ - template: '/.azuredevops/pipelineVariables/global.variables.yml'
+ - group: 'Platform-Tokens'
+ - name: moduleName
+ value: virtualWans
+ - name: modulePath
+ value: '/arm/Microsoft.Network/virtualWans'
+
+stages:
+ - stage: Validation
+ jobs:
+ - template: /.azuredevops/pipelineTemplates/module.jobs.validate.yml
+ parameters:
+ deploymentBlocks:
+ - path: $(modulePath)/.parameters/parameters.json
+
+ - stage: Deployment
+ jobs:
+ - template: /.azuredevops/pipelineTemplates/module.jobs.deploy.yml
+ parameters:
+ removeDeployment: '${{ parameters.removeDeployment }}'
+ deploymentBlocks:
+ - path: $(modulePath)/.parameters/parameters.json
+
+ - stage: Publishing
+ condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
+ jobs:
+ - template: /.azuredevops/pipelineTemplates/module.jobs.publish.yml
+ parameters:
+ versioningOption: '${{ parameters.versioningOption }}'
+ customVersion: '${{ parameters.customVersion }}'
+
+ - stage: Removal
+ dependsOn: Deployment
+ condition: and(in(dependencies.Deployment.result, 'Succeeded', 'Failed'), eq( '${{ parameters.removeDeployment }}', 'true'))
+ jobs:
+ - template: /.azuredevops/pipelineTemplates/module.jobs.remove.yml
+ parameters:
+ relativePathOfRemovalScript: 'utilities/pipelines/resourceRemoval/Remove-vWan.ps1'
diff --git a/.azuredevops/pipelineTemplates/module.jobs.deploy.yml b/.azuredevops/pipelineTemplates/module.jobs.deploy.yml
new file mode 100644
index 0000000000..aadb33da93
--- /dev/null
+++ b/.azuredevops/pipelineTemplates/module.jobs.deploy.yml
@@ -0,0 +1,217 @@
+#########################################################
+## DEPLOYMENT PIPELINE ##
+#########################################################
+##
+## This pipeline template contains the logic to deploy a given module's ARM template using the provided parameter file(s)
+##
+## Enabled levels of deployment
+## - Resource-Group-Level
+## - Subscription-Level
+## - Management-Group-Level
+## - Tenant-Level
+##
+########################################################
+##
+##---------------------------------------------##
+## TEMPLATE PARAMETERS ##
+##---------------------------------------------##
+##
+## By default it uses the variables specified in the below [parameters] section. However, you can overwrite these variables in the
+## referencing pipeline by providing the parameter explicitly.
+##
+## NOTE: If you don't need to overwrite a shared value, you can IGNORE this section
+##
+## |=================================================================================================================================================================================================================================|
+## | Parameter | Default Value | Description | Example |
+## |---------------------------------|--------------------------------------|-----------------------------------------------------------------------------------------------------------|--------------------------------------------|
+## | serviceConnection | '$(serviceConnection)' | The service connection that connects to Azure | 'demo-internal' |
+## | removeDeployment | '$(removeDeployment)' | Set to [true] to flag resource for removal. If not provided, defaults to false. | 'true' |
+## | poolName | '$(poolName)' | You can provide either a [poolname] or [vmImage] to run the job on | 'Custom Deployment Pool' |
+## | vmImage | '$(vmImage)' | You can provide either a [poolname] or [vmImage] to run the job on | 'ubuntu20.04' |
+## | defaultJobTimeoutInMinutes | 120 | The timeout for the job in this pipeline | 120 |
+## | checkoutRepositories | '' | An optional list of repositories to check out at the beginning of this job in addition to the source | 'Components' |
+## | moduleName | '$(moduleName)' | The name of the module to deploy | 'KeyVault' |
+## | modulePath | '$(modulePath)' | The path to the module to deploy. E.g. [c:/$(moduleName)] | 'c:/$(moduleName)' |
+## | deploymentBlocks | | The parameter file(s) to deploy with. Must be provided | path: 'C:/parameters.json' |
+## | location | '$(defaultLocation)' | The location to deploy with | 'EastUs2' |
+## | resourceGroupName | '$(defaultResourceGroupName)' | The resourcegroup to deploy into. Required only for Resource-Group-Level deployments | 'validation-rg' |
+## | subscriptionId | '$(ARM_SUBSCRIPTION_ID)' | The id of the subscription to deploy into when using a Management group service connection | 'aed7c000-6387-412e-bed0-24dfddf4bbc6' |
+## | managementGroupId | '$(ARM_MGMTGROUP_ID)' | The id of the management group to deploy into. Required only for Management-Group-Level deployments | '6ycc9620-cb01-454f-9ebc-fc6b1df48d64' |
+## | parametersRepository | '$(Build.Repository.Name)' | The respository with the parameter files. Defaults to the triggering repository | 'Solutions' |
+## | modulesRepository | '$(modulesRepository)' | The respository with the modules. | 'Components' |
+## | azurePowerShellVersion | '$(azurePowerShellVersion)' | Used for configuring the Azure PowerShellModules Version, one of the example values. | 'latestVersion' or 'OtherVersion' |
+## | preferredAzurePowerShellVersion | '$(preferredAzurePowerShellVersion)' | Used for configuring the Azure PowerShellModules Version, either an empty string or the specific version. | '4.4.0' |
+## |=================================================================================================================================================================================================================================|
+##
+##---------------------------------------------##
+
+parameters:
+ # Pipeline-related parameters
+ serviceConnection: '$(serviceConnection)'
+ poolName: '$(poolName)'
+ vmImage: '$(vmImage)'
+ defaultJobTimeoutInMinutes: 120
+ checkoutRepositories: ''
+ dependsOn: []
+ # Logic-related parameters
+ removeDeployment: false
+ moduleName: '$(moduleName)'
+ modulePath: '$(modulePath)'
+ deploymentBlocks: ''
+ location: '$(defaultLocation)'
+ resourceGroupName: '$(defaultResourceGroupName)'
+ subscriptionId: '$(ARM_SUBSCRIPTION_ID)'
+ managementGroupId: '$(ARM_MGMTGROUP_ID)'
+ parametersRepository: '$(Build.Repository.Name)'
+ modulesRepository: '$(modulesRepository)'
+ # Azure PowerShell Version parameters
+ azurePowerShellVersion: '$(azurePowerShellVersion)'
+ preferredAzurePowerShellVersion: '$(preferredAzurePowerShellVersion)'
+
+##---------------------------------------------##
+## TEMPLATE LOGIC ##
+##---------------------------------------------##
+
+jobs:
+ - ${{ each deploymentBlock in parameters.deploymentBlocks }}:
+ - job: ${{ deploymentBlock.jobName }}
+
+ ${{ if ne( deploymentBlock.displayName, '') }}:
+ displayName: ${{ deploymentBlock.displayName }}
+ ${{ if eq( deploymentBlock.displayName, '') }}:
+ displayName: Deploy with [${{ replace( deploymentBlock.path, '$(modulePath)', '') }}]
+ timeoutInMinutes: ${{ parameters.defaultJobTimeoutInMinutes }}
+ ${{ if ne( parameters.dependsOn, '') }}:
+ dependsOn: ${{ parameters.dependsOn }}
+ pool:
+ ${{ if ne(parameters.vmImage, '') }}:
+ vmImage: ${{ parameters.vmImage }}
+ ${{ if ne(parameters.poolName, '') }}:
+ name: ${{ parameters.poolName }}
+
+ steps:
+ # [Checkout Repositories] task(s)
+ #--------------------------------
+ - checkout: self
+ - ${{ if ne(parameters.checkoutRepositories, '') }}:
+ - ? ${{ each checkoutRepository in parameters.checkoutRepositories }}
+ : - checkout: ${{ checkoutRepository }}
+ fetchDepth: 1 # the depth of commits to ask Git to fetch; if not set defaults to no limit
+ path: 's/${{ checkoutRepository }}'
+
+ # [Agent] Prepare environment
+ #----------------------------
+ - task: PowerShell@2
+ displayName: 'Setup agent'
+ inputs:
+ targetType: inline
+ pwsh: true
+ script: |
+ # Load used functions
+ . (Join-Path '$(System.DefaultWorkingDirectory)' 'utilities' 'pipelines' 'sharedScripts' 'Set-EnvironmentOnAgent.ps1')
+
+ # Set agent up
+ Set-EnvironmentOnAgent
+
+ # [Multi Repo] Support task
+ #--------------------------
+ - task: PowerShell@2
+ displayName: Handle Multi-Repo Invocation
+ inputs:
+ targetType: inline
+ pwsh: true
+ script: |
+ # Handle multiple-repositories
+ if( "${{ join(';',parameters.checkoutRepositories) }}".length -gt 0) {
+ Write-Verbose "Multi-Repo Checkout" -Verbose
+ $moduleRepoRoot = Join-Path '$(System.DefaultWorkingDirectory)' '$(modulesRepository)'
+ $parametersRepoRoot = Join-Path '$(System.DefaultWorkingDirectory)' '${{ parameters.parametersRepository }}'
+ } else {
+ Write-Verbose "No Multi-Repo Checkout" -Verbose
+ $moduleRepoRoot = '$(System.DefaultWorkingDirectory)'
+ $parametersRepoRoot = '$(System.DefaultWorkingDirectory)'
+ }
+ Write-Host "##vso[task.setvariable variable=ModuleRepoRoot]$moduleRepoRoot"
+ Write-Host "##vso[task.setvariable variable=parametersRepoRoot]$parametersRepoRoot"
+
+ # [Agent] Replace tokens
+ #-----------------------
+ - task: PowerShell@2
+ displayName: 'Replace Tokens [${{ deploymentBlock.path }}]'
+ inputs:
+ targetType: inline
+ pwsh: true
+ script: |
+ # Load used functions
+ . (Join-Path '$(System.DefaultWorkingDirectory)' 'utilities' 'pipelines' 'tokensReplacement' 'Convert-TokensInParameterFile.ps1')
+
+ # Load Settings File
+ $Settings = Get-Content -Path "settings.json" | ConvertFrom-Json
+
+ # Initialize Default Parameter File Tokens
+ $DefaultParameterFileTokens = @(
+ @{ Name = 'resourceGroupName'; Value = '${{ parameters.resourceGroupName }}' }
+ @{ Name = 'subscriptionId'; Value = '${{ parameters.subscriptionId }}' }
+ @{ Name = 'managementGroupId'; Value = '${{ parameters.managementGroupId }}' }
+ @{ Name = "tenantId"; Value = '${{ variables.ARM_TENANT_ID }}' }
+ @{ Name = "deploymentSpId"; Value = '${{ variables.DEPLOYMENT_SP_ID }}' }
+ @{ Name = "platformKeyVault"; Value = '${{ variables.PLATFORM_KEYVAULT }}' }
+ ) | ForEach-Object { [PSCustomObject]$PSItem }
+
+ # Construct Token Function Input
+ $ConvertTokensInputs = @{
+ ParameterFilePath = '${{ deploymentBlock.path }}'
+ DefaultParameterFileTokens = $DefaultParameterFileTokens
+ LocalCustomParameterFileTokens = $Settings.parameterFileTokens.localTokens.tokens
+ TokenPrefix = $Settings.parameterFileTokens.tokenPrefix
+ TokenSuffix = $Settings.parameterFileTokens.tokenSuffix
+ verbose = $true
+ }
+ # Add Remote Custom Parameter File Tokens
+ if ('${{ env.PLATFORM_KEYVAULT }}' -and '${{ inputs.subscriptionId }}') {
+ $ConvertTokensInputs += @{
+ TokensKeyVaultName = '${{ variables.PLATFORM_KEYVAULT }}'
+ TokensKeyVaultSubscriptionId = '${{ parameters.subscriptionId }}'
+ TokensKeyVaultSecretNamePrefix = $Settings.parameterFileTokens.remoteTokens.keyVaultSecretNamePrefix
+ }
+ }
+
+ Write-Verbose "Invoke task with" -Verbose
+ Write-Verbose ($ConvertTokensInputs | ConvertTo-Json | Out-String) -Verbose
+
+ # Invoke Token Replacement Functionality
+ Convert-TokensInParameterFile @ConvertTokensInputs -Verbose
+
+ # [Deployment] task(s)
+ #---------------------
+ - task: AzurePowerShell@5
+ displayName: 'Deploy [${{ parameters.moduleName }}] via connection [${{ parameters.serviceConnection }}]'
+ inputs:
+ azureSubscription: ${{ parameters.serviceConnection }}
+ azurePowerShellVersion: ${{ parameters.azurePowerShellVersion }}
+ preferredAzurePowerShellVersion: ${{ parameters.preferredAzurePowerShellVersion }}
+ pwsh: true
+ ScriptType: InlineScript
+ inline: |
+ # Load used functions
+ . (Join-Path '$(System.DefaultWorkingDirectory)' '$(pipelineFunctionsPath)' 'resourceDeployment' 'New-ModuleDeployment.ps1')
+
+ # ----------------- #
+ # INVOKE DEPLOYMENT #
+ # ----------------- #
+ $functionInput = @{
+ moduleName = '${{ parameters.moduleName }}'
+ templateFilePath = Join-Path '$(ModuleRepoRoot)' '$(modulePath)' 'deploy.bicep'
+ parameterFilePath = Join-Path '$(parametersRepoRoot)' '${{ deploymentBlock.path }}'
+ location = '${{ parameters.location }}'
+ resourceGroupName = '${{ parameters.resourceGroupName }}'
+ subscriptionId = '${{ parameters.subscriptionId }}'
+ managementGroupId = '${{ parameters.managementGroupId }}'
+ # Note: if parameter is like "`$(removeDeployment*" it was not set as the variable was not resolved
+ removeDeployment = ('${{ parameters.removeDeployment }}' -like "`$(removeDeployment*") ? $false : [System.Convert]::ToBoolean('${{ parameters.removeDeployment }}')
+ }
+
+ Write-Verbose "Invoke task with" -Verbose
+ Write-Verbose ($functionInput | ConvertTo-Json | Out-String) -Verbose
+
+ New-ModuleDeployment @functionInput -Verbose
diff --git a/.azuredevops/pipelineTemplates/module.jobs.publish.yml b/.azuredevops/pipelineTemplates/module.jobs.publish.yml
new file mode 100644
index 0000000000..898395bbf6
--- /dev/null
+++ b/.azuredevops/pipelineTemplates/module.jobs.publish.yml
@@ -0,0 +1,295 @@
+#########################################################
+## PUBLISH PIPELINE ##
+#########################################################
+##
+## This pipeline template contains the logic to publish module data as
+## - A build artifact and/or
+## - As a new version to a given storage account and/or
+## - As a new version as an UniversalPackage to a given artifact-feed
+##
+#########################################################
+
+##---------------------------------------------##
+## TEMPLATE PARAMETERS ##
+##---------------------------------------------##
+##
+## By default it uses the variables specified in the below [parameters] section. However, you can overwrite these variables in the
+## referencing pipeline by providing the paramater explicitly.
+##
+## NOTE: If you don't need to overwrite a shared value, you can IGNORE this section
+##
+## |==================================================================================================================================================================================================================|
+## | Parameter | Default Value | Description | Example |
+## |---------------------------------|--------------------------------------|-----------------------------------------------------------------------------------------------------|-----------------------------------|
+## | displayName | 'Publish module' | Name for the pipeline job | 'Publish KeyVault' |
+## | serviceConnection | '$(serviceConnection)' | The service connection that connects to Azure | 'demo-internal' |
+## | poolName | '$(poolName)' | You can provide either a [poolname] or [vmImage] to run the job on | 'Custom Deployment Pool' |
+## | vmImage | '$(vmImage)' | You can provide either a [poolname] or [vmImage] to run the job on | 'ubuntu20.04' |
+## | defaultJobTimeoutInMinutes | 120 | The timeout for the job in this pipeline | 120 |
+## | moduleName | '$(moduleName)' | The name of the module to publish. If publishing to an artifacts feed, must be lower case. | 'keyvault' |
+## | versionOption | '$(versionOption)' | The mode to handle the version increments [major|minor|patch|custom]. | 'patch' |
+## | moduleVersion | '$(moduleVersion)' | The version to enforce if [versionOption] is set to [custom] | '1.0.0' |
+## | modulePath | '$(modulePath)' | The path to the module to deploy. E.g. [c:/$(moduleName)] | 'c:/$(moduleName)' |
+## | templateSpecsRGName | '$(templateSpecsRGName)' | Required to publish to template spec. ResourceGroup of the template spec to publish to | 'mgmt-rg' |
+## | templateSpecsRGLocation | '$(templateSpecsRGLocation)' | Required to publish to template spec. Location of the template spec resource group | 'West Europe' |
+## | templateSpecsDescription | '$(templateSpecsDescription)' | Required to publish to template spec. Description of the template spec to publish to | 'IaCs module' |
+## | vstsFeedName | '$(vstsFeedName)' | Required to publish to a DevOps feed. Name to the feed to publish to. | 'modules' |
+## | vstsProject | '$(System.TeamProject)' | Required to publish to a DevOps feed. Name of the project hosting the artifacts feed. May be empty. | 'iacs' |
+## | bicepRegistryName | '$(bicepRegistryName)' | Required to publish to the private bicep registry. Name of the hosting container registry | 'adpsxxazacrx001' |
+## | bicepRegistryRGName | '$(bicepRegistryRGName)' | Required to publish to the private bicep registry. Resource group of the hosting container registry | 'artifacts-rg' |
+## | vstsOrganization | '$(vstsOrganization)' | Required to publish to a DevOps feed. Name of the organization hosting the artifacts feed. | 'servicescode' |
+## | azurePowerShellVersion | '$(azurePowerShellVersion)' | Used for configuring the Azure PowerShell Version, one of the example values. | 'latestVersion' or 'OtherVersion' |
+## | preferredAzurePowerShellVersion | '$(preferredAzurePowerShellVersion)' | Used for configuring the Azure PowerShell Version, either an empty string or specific version. | '4.4.0' |
+## |==================================================================================================================================================================================================================|
+##
+##---------------------------------------------##
+
+parameters:
+ # Pipeline-related parameters
+ checkoutRepositories: ''
+ displayName: 'Publish module'
+ serviceConnection: '$(serviceConnection)'
+ poolName: '$(poolName)'
+ vmImage: '$(vmImage)'
+ defaultJobTimeoutInMinutes: 120
+ modulesRepository: '$(modulesRepository)'
+
+ # Logic-related parameters
+ ## Module-related
+ moduleName: '$(moduleName)'
+ versionOption: '$(versionOption)'
+ moduleVersion: '$(moduleVersion)'
+ modulePath: '$(modulePath)'
+
+ ## TemplateSpec-related
+ templateSpecsRGName: '$(templateSpecsRGName)'
+ templateSpecsRGLocation: '$(templateSpecsRGLocation)'
+ templateSpecsDescription: '$(templateSpecsDescription)'
+
+ ## Artifact-Feed-related
+ vstsFeedName: '$(vstsFeedName)'
+ vstsProject: '$(System.TeamProject)'
+ vstsOrganization: '$(vstsOrganization)'
+
+ ## Private-Bicep-Registry-related
+ bicepRegistryName: '$(bicepRegistryName)'
+ bicepRegistryRGName: '$(bicepRegistryRGName)'
+
+##---------------------------------------------##
+## TEMPLATE LOGIC ##
+##---------------------------------------------##
+jobs:
+ - job:
+ displayName: ${{ parameters.displayName }}
+ timeoutInMinutes: ${{ parameters.defaultJobTimeoutInMinutes }}
+ pool:
+ ${{ if ne(parameters.vmImage, '') }}:
+ vmImage: ${{ parameters.vmImage }}
+ ${{ if ne(parameters.poolName, '') }}:
+ name: ${{ parameters.poolName }}
+ steps:
+ # [Checkout Repositories] task(s)
+ #--------------------------------
+ - checkout: self
+ - ${{ if ne(parameters.checkoutRepositories, '') }}:
+ - ${{ each checkoutRepository in parameters.checkoutRepositories }}:
+ - checkout: ${{ checkoutRepository }}
+ fetchDepth: 1 # the depth of commits to ask Git to fetch; if not set defaults to no limit
+ path: 's/${{ checkoutRepository }}'
+
+ # [Agent] Prepare environment
+ #----------------------------
+ - task: PowerShell@2
+ displayName: 'Setup agent'
+ inputs:
+ targetType: inline
+ pwsh: true
+ script: |
+ # Load used functions
+ . (Join-Path '$(System.DefaultWorkingDirectory)' 'utilities' 'pipelines' 'sharedScripts' 'Set-EnvironmentOnAgent.ps1')
+
+ # Set agent up
+ Set-EnvironmentOnAgent
+
+ # [Multi Repo] Support task
+ #--------------------------
+ - task: PowerShell@2
+ displayName: Handle Multi-Repo Invocation
+ inputs:
+ targetType: inline
+ pwsh: true
+ script: |
+ # ---------------------------- #
+ # HANDLE MULTI-REPO INVOCATION #
+ # ---------------------------- #
+
+ # Handle multiple-repositories
+ if( "${{ join(';',parameters.checkoutRepositories) }}".length -gt 0) {
+ Write-Verbose "Multi-Repo Checkout" -Verbose
+ $modulePath = Join-Path '$(System.DefaultWorkingDirectory)' '$(modulesRepository)' '${{ parameters.modulePath }}'
+ } else {
+ Write-Verbose "No Multi-Repo Checkout" -Verbose
+ $modulePath = Join-Path '$(System.DefaultWorkingDirectory)' '${{ parameters.modulePath }}'
+ }
+ Write-Host "##vso[task.setvariable variable=ENVMODULEPATH]$modulePath"
+
+ # [Universal Artifact-feed publish] task(s)
+ #------------------------------------------
+ - powershell: |
+ # Load used functions
+ . (Join-Path '$(System.DefaultWorkingDirectory)' '$(pipelineFunctionsPath)' 'resourcePublish' 'Initialize-UniversalArtifactPublish.ps1')
+
+ $functionInput = @{
+ templateFilePath = Join-Path '$(ENVMODULEPATH)' 'deploy.bicep'
+ vstsOrganization = '${{ parameters.vstsOrganization }}'
+ vstsProject = '${{ parameters.vstsProject }}'
+ vstsFeedName = '${{ parameters.vstsFeedName }}'
+ customVersion = '${{ parameters.customVersion }}'
+ versioningOption = '${{ parameters.versioningOption }}'
+ }
+
+ Write-Verbose "Invoke task with" -Verbose
+ Write-Verbose ($functionInput | ConvertTo-Json | Out-String) -Verbose
+
+ $output = Initialize-UniversalArtifactPublish @functionInput -Verbose
+
+ # Write output value(s) into pipeline environment
+ $output.Keys | ForEach-Object {
+ Write-Host ("Publishing variable [{0}] with value [{1}] to pipeline environment" -f $_, $output[$_])
+ Write-Host ("##vso[task.setVariable variable={0}]{1}" -f $_, $output[$_])
+ }
+ displayName: 'Prepare publish to artifacts feed'
+ condition: and(
+ eq(variables['artifactsFeedDoPublish'], true),
+ succeeded()
+ )
+ enabled: true
+ env:
+ TOKEN: $(system.accesstoken)
+
+ - task: UniversalPackages@0
+ condition: and(
+ eq(variables['artifactsFeedDoPublish'], true),
+ succeeded()
+ )
+ displayName: Publish Universal Package ${{ parameters.moduleName }}
+ inputs:
+ command: publish
+ publishDirectory: '$(ENVMODULEPATH)'
+ ${{ if eq(parameters.vstsProject, '') }}:
+ vstsFeedPublish: '${{ parameters.vstsFeedName }}'
+ ${{ if ne(parameters.vstsProject, '') }}:
+ vstsFeedPublish: '${{ parameters.vstsProject }}/${{ parameters.vstsFeedName }}'
+ vstsFeedPackagePublish: '$(universalPackageModuleName)' # Published via [Initialize-UniversalArtifactPublish] invocation
+ versionOption: '$(publishingMode)' # Published via [Initialize-UniversalArtifactPublish] invocation
+ versionPublish: '$(newVersionObject)' # Published via [Initialize-UniversalArtifactPublish] invocation
+ packagePublishDescription: '${{ parameters.moduleName }} Module'
+ verbosity: 'error'
+ enabled: true
+
+ # [Nuget Artifact-feed publish] task(s)
+ #--------------------------------------
+ - task: NuGetToolInstaller@0
+ displayName: 'Use NuGet 4.x'
+ inputs:
+ versionSpec: 4.x
+ enabled: true
+ - task: AzurePowerShell@5
+ displayName: Publish module to nuget artifacts feed
+ condition: and(
+ eq(variables['nugetArtifactsFeedDoPublish'], true),
+ succeeded()
+ )
+ enabled: true
+ inputs:
+ azureSubscription: '${{ parameters.serviceConnection }}'
+ azurePowerShellVersion: ${{ parameters.azurePowerShellVersion }}
+ preferredAzurePowerShellVersion: ${{ parameters.preferredAzurePowerShellVersion }}
+ pwsh: true
+ ScriptType: InlineScript
+ inline: |
+ # Load used functions
+ . (Join-Path '$(System.DefaultWorkingDirectory)' '$(pipelineFunctionsPath)' 'resourcePublish' 'Publish-ModuleToNuget.ps1')
+
+ $functionInput = @{
+ feedName = "$(vstsNugetFeedName)"
+ feedurl = "$(vstNugetFeedUrl)"
+ queueById = "$(Build.QueuedById)"
+ customVersion = '${{ parameters.customVersion }}'
+ versioningOption = '${{ parameters.versioningOption }}'
+ moduleBase = '$(ENVMODULEPATH)'
+ moduleName = '${{ parameters.moduleName }}'
+ }
+
+ Write-Verbose "Invoke task with" -Verbose
+ Write-Verbose ($functionInput | ConvertTo-Json | Out-String) -Verbose
+
+ # Separate population to avoid printing secret by accident
+ $functionInput['systemAccessToken'] = "$(system.accesstoken)"
+
+ Publish-ModuleToNuget @functionInput -Verbose
+
+ # [template-spec publish] task(s)
+ #--------------------------------
+ - task: AzurePowerShell@5
+ displayName: 'Publish module to template specs'
+ condition: and(
+ eq(variables['templateSpecsDoPublish'], true),
+ succeeded()
+ )
+ enabled: true
+ inputs:
+ azureSubscription: '${{ parameters.serviceConnection }}'
+ azurePowerShellVersion: ${{ parameters.azurePowerShellVersion }}
+ preferredAzurePowerShellVersion: ${{ parameters.preferredAzurePowerShellVersion }}
+ pwsh: true
+ ScriptType: InlineScript
+ inline: |
+ # Load used functions
+ . (Join-Path '$(System.DefaultWorkingDirectory)' '$(pipelineFunctionsPath)' 'resourcePublish' 'Publish-ModuleToTemplateSpec.ps1')
+
+ $functionInput = @{
+ templateFilePath = Join-Path '$(ENVMODULEPATH)' 'deploy.bicep'
+ templateSpecsRgName = '${{ parameters.templateSpecsRgName }}'
+ templateSpecsRgLocation = '${{ parameters.templateSpecsRgLocation }}'
+ templateSpecsDescription = '${{ parameters.templateSpecsDescription }}'
+ customVersion = '${{ parameters.customVersion }}'
+ versioningOption = '${{ parameters.versioningOption }}'
+ }
+
+ Write-Verbose "Invoke task with" -Verbose
+ Write-Verbose ($functionInput | ConvertTo-Json | Out-String) -Verbose
+
+ Publish-ModuleToTemplateSpec @functionInput -Verbose
+
+ # [private bicep registry publish] task(s)
+ #-------------------------------------------
+ - task: AzurePowerShell@5
+ displayName: 'Publish module to private bicep registry'
+ condition: and(
+ eq(variables['bicepRegistryDoPublish'], true),
+ succeeded()
+ )
+ enabled: true
+ inputs:
+ azureSubscription: '${{ parameters.serviceConnection }}'
+ azurePowerShellVersion: ${{ parameters.azurePowerShellVersion }}
+ preferredAzurePowerShellVersion: ${{ parameters.preferredAzurePowerShellVersion }}
+ pwsh: true
+ ScriptType: InlineScript
+ inline: |
+ # Load used functions
+ . (Join-Path '$(System.DefaultWorkingDirectory)' '$(pipelineFunctionsPath)' 'resourcePublish' 'Publish-ModuleToPrivateBicepRegistry.ps1')
+
+ $functionInput = @{
+ templateFilePath = Join-Path '$(ENVMODULEPATH)' 'deploy.bicep'
+ bicepRegistryName = '${{ parameters.bicepRegistryName }}'
+ bicepRegistryRgName = '${{ parameters.bicepRegistryRgName }}'
+ customVersion = '${{ parameters.customVersion }}'
+ versioningOption = '${{ parameters.versioningOption }}'
+ }
+
+ Write-Verbose "Invoke task with" -Verbose
+ Write-Verbose ($functionInput | ConvertTo-Json | Out-String) -Verbose
+
+ Publish-ModuleToPrivateBicepRegistry @functionInput -Verbose
diff --git a/.azuredevops/pipelineTemplates/module.jobs.remove.yml b/.azuredevops/pipelineTemplates/module.jobs.remove.yml
new file mode 100644
index 0000000000..8f85479763
--- /dev/null
+++ b/.azuredevops/pipelineTemplates/module.jobs.remove.yml
@@ -0,0 +1,91 @@
+#########################################################
+## REMOVAL PIPELINE ##
+#########################################################
+##
+## This pipeline template contains the logic to remove resources that are indentified by a special remove-tag
+## As such, the script is only capable to remove deployed resource-group level services
+##
+#################################################################
+##
+##---------------------------------------------##
+## TEMPLATE PARAMETERS ##
+##---------------------------------------------##
+##
+## By default it uses the variables specified in the below [parameters] section. However, you can overwrite these variables in the
+## referencing pipeline by providing the paramater explicitly.
+##
+## NOTE: If you don't need to overwrite a shared value, you can IGNORE this section
+##
+## |========================================================================================================================================================================================================================|
+## | Parameter | Default Value | Description | Example |
+## |---------------------------------|--------------------------------------|-----------------------------------------------------------------------------------------------------------|-----------------------------------|
+## | displayName | 'Remove module' | Name for the pipeline job | 'Remove KeyVault' |
+## | serviceConnection | '$(serviceConnection)' | The service connection that connects to Azure | 'demo-internal' |
+## | poolName | '$(poolName)' | You can provide either a [poolname] or [vmImage] to run the job on | 'Custom Deployment Pool' |
+## | vmImage | '$(vmImage)' | You can provide either a [poolname] or [vmImage] to run the job on | 'ubuntu20.04' |
+## | defaultJobTimeoutInMinutes | 120 | The timeout for the job in this pipeline | 120 |
+## | moduleName | '$(moduleName)' | The name of the module to remove | 'KeyVault' |
+## | resourceGroupName | '$(defaultResourceGroupName)' | The resourcegroup to remove the resource from | 'validation-rg' |
+## | modulePath | '$(modulePath)' | The path to the module to deploy. E.g. [c:/$(moduleName)] | 'c:/$(moduleName)' |
+## | azurePowerShellVersion | '$(azurePowerShellVersion)' | Used for configuring the Azure PowerShellModules Version, one of the example values. | 'latestVersion' or 'OtherVersion' |
+## | preferredAzurePowerShellVersion | '$(preferredAzurePowerShellVersion)' | Used for configuring the Azure PowerShellModules Version, either an empty string or the specific version. | '4.4.0' |
+## |========================================================================================================================================================================================================================|
+##
+##---------------------------------------------##
+
+parameters:
+ # Pipeline-related parameters
+ displayName: 'Remove module'
+ serviceConnection: '$(serviceConnection)'
+ poolName: '$(poolName)'
+ vmImage: '$(vmImage)'
+ defaultJobTimeoutInMinutes: 120
+ # Logic-related parameters
+ moduleName: '$(moduleName)'
+ modulePath: '$(modulePath)'
+ resourceGroupName: '$(defaultResourceGroupName)'
+ relativePathOfRemovalScript: 'utilities/pipelines/resourceRemoval/Remove-DeployedModule.ps1'
+ # Azure PowerShell Version parameter
+ azurePowerShellVersion: '$(azurePowerShellVersion)'
+ preferredAzurePowerShellVersion: '$(preferredAzurePowerShellVersion)'
+
+##---------------------------------------------##
+## TEMPLATE LOGIC ##
+##---------------------------------------------##
+jobs:
+ - job:
+ displayName: ${{ parameters.displayName }}
+ timeoutInMinutes: ${{ parameters.defaultJobTimeoutInMinutes }}
+ pool:
+ ${{ if ne(parameters.vmImage, '') }}:
+ vmImage: ${{ parameters.vmImage }}
+ ${{ if ne(parameters.poolName, '') }}:
+ name: ${{ parameters.poolName }}
+ steps:
+ - task: AzurePowerShell@5
+ displayName: 'Remove [${{ parameters.moduleName }}] in [${{ parameters.resourceGroupName }}] via [${{ parameters.serviceConnection }}]'
+ inputs:
+ azureSubscription: ${{ parameters.serviceConnection }}
+ azurePowerShellVersion: ${{ parameters.azurePowerShellVersion }}
+ preferredAzurePowerShellVersion: ${{ parameters.preferredAzurePowerShellVersion }}
+ ScriptType: InlineScript
+ failOnStandardError: false
+ pwsh: true
+ inline: |
+ # Load used functions
+ $functionPath = Join-Path $(System.DefaultWorkingDirectory) '${{ parameters.relativePathOfRemovalScript }}'
+ . $functionPath
+
+ # -------------- #
+ # INVOKE REMOVAL #
+ # -------------- #
+ $functionInput = @{
+ moduleName = '${{ parameters.moduleName }}'
+ resourceGroupName = '${{ parameters.resourceGroupName }}'
+ verbose = $true
+ }
+
+ Write-Verbose 'Invoke task with' -Verbose
+ Write-Verbose ($functionInput | ConvertTo-Json | Out-String) -Verbose
+
+ Invoke-Expression ('{0} @functionInput' -f (Split-Path $functionPath -LeafBase))
diff --git a/.azuredevops/pipelineTemplates/module.jobs.validate.yml b/.azuredevops/pipelineTemplates/module.jobs.validate.yml
new file mode 100644
index 0000000000..c68862198d
--- /dev/null
+++ b/.azuredevops/pipelineTemplates/module.jobs.validate.yml
@@ -0,0 +1,386 @@
+#########################################################
+## VALIDATION PIPELINE ##
+#########################################################
+##
+## This pipeline template contains the logic to validate a given modue's ARM template using the provided parameter file(s)
+##
+## Enabled levels of validation
+## - Resource-Group-Level
+## - Subscription-Level
+## - Management-Group-Level
+## - Tenant-Level
+##
+#########################################################
+##
+##---------------------------------------------##
+## TEMPLATE PARAMETERS ##
+##---------------------------------------------##
+##
+## By default it uses the variables specified in the below [parameters] section. However, you can overwrite these variables in the
+## referencing pipeline by providing the parameter explicitly.
+##
+## NOTE: If you don't need to overwrite a shared value, you can IGNORE this section
+##
+## |=============================================================================================================================================================================================================================|
+## | Parameter | Default Value | Description | Example |
+## |---------------------------------|--------------------------------------|-----------------------------------------------------------------------------------------------------------|----------------------------------------|
+## | serviceConnection | '$(serviceConnection)' | The service connection that connects to Azure | 'demo-internal' |
+## | poolName | '$(poolName)' | You can provide either a [poolname] or [vmImage] to run the job on | 'Custom Deployment Pool' |
+## | vmImage | '$(vmImage)' | You can provide either a [poolname] or [vmImage] to run the job on | 'ubuntu20.04' |
+## | defaultJobTimeoutInMinutes | 120 | The timeout for the job in this pipeline | 120 |
+## | checkoutRepositories | '' | An optional list of repositories to check out at the beginning of this job in addition to the source | 'Components' |
+## | moduleName | '$(moduleName)' | The name of the module to validate | 'KeyVault' |
+## | modulePath | '$(modulePath)' | The path to the module to deploy. E.g. [c:/$(moduleName)] | 'c:/$(moduleName)' |
+## | deploymentBlocks | | The parameter file(s) to validate with. Must be provided | 'C:/parameters.json' |
+## | location | '$(defaultLocation)' | The location to validate with | 'France Central' |
+## | resourceGroupName | '$(defaultResourceGroupName)' | The resourcegroup to validate into. Required only for Resource-Group-Level validations | 'validation-rg' |
+## | subscriptionId | '$(ARM_SUBSCRIPTION_ID)' | The id of the subscription to validate with when using a Management group service connection | 'aed7c000-6387-412e-bed0-24dfddf4bbc6' |
+## | managementGroupId | '$(ARM_MGMTGROUP_ID)' | The id of the management group to validate with. Required only for Management-Group-Level validations | '477c9620-cb01-454f-9ebc-fc6b1df48c14' |
+## | parametersRepository | '$(Build.Repository.Name)' | The respository with the parameter files. Defaults to the triggering repository | 'Solutions' |
+## | modulesRepository | '$(modulesRepository)' | The respository with the modules. | 'Components' |
+## | azurePowerShellVersion | '$(azurePowerShellVersion)' | Used for configuring the Azure PowerShellModules Version, one of the example values. | 'latestVersion' or 'OtherVersion' |
+## | preferredAzurePowerShellVersion | '$(preferredAzurePowerShellVersion)' | Used for configuring the Azure PowerShellModules Version, either an empty string or the specific version. | '4.4.0' |
+## |=============================================================================================================================================================================================================================|
+##
+##---------------------------------------------##
+
+parameters:
+ # Pipeline-related parameters
+ serviceConnection: '$(serviceConnection)'
+ poolName: '$(poolName)'
+ vmImage: '$(vmImage)'
+ defaultJobTimeoutInMinutes: 120
+ checkoutRepositories: ''
+ # Logic-related parameters
+ moduleName: '$(moduleName)'
+ modulePath: '$(modulePath)'
+ deploymentBlocks:
+ parametersRepository: '$(Build.Repository.Name)'
+ location: '$(defaultLocation)'
+ resourceGroupName: '$(defaultResourceGroupName)'
+ subscriptionId: '$(ARM_SUBSCRIPTION_ID)'
+ managementGroupId: '$(ARM_MGMTGROUP_ID)'
+ modulesRepository: '$(modulesRepository)'
+ # Azure PowerShell Version parameter
+ azurePowerShellVersion: '$(azurePowerShellVersion)'
+ preferredAzurePowerShellVersion: '$(preferredAzurePowerShellVersion)'
+
+##---------------------------------------------##
+## TEMPLATE LOGIC ##
+##---------------------------------------------##
+jobs:
+ - job:
+ displayName: Run global tests
+ timeoutInMinutes: ${{ parameters.defaultJobTimeoutInMinutes }}
+ pool:
+ ${{ if ne(parameters.vmImage, '') }}:
+ vmImage: ${{ parameters.vmImage }}
+ ${{ if ne(parameters.poolName, '') }}:
+ name: ${{ parameters.poolName }}
+ steps:
+ # [Checkout Repositories] task(s)
+ #--------------------------------
+ - checkout: self
+ - ${{ if ne(parameters.checkoutRepositories, '') }}:
+ - ${{ each checkoutRepository in parameters.checkoutRepositories }}:
+ - checkout: ${{ checkoutRepository }}
+ fetchDepth: 1 # the depth of commits to ask Git to fetch; if not set defaults to no limit
+ path: 's/${{ checkoutRepository }}'
+
+ # [Agent] Prepare environment
+ #----------------------------
+ - task: PowerShell@2
+ displayName: 'Setup agent'
+ inputs:
+ targetType: inline
+ pwsh: true
+ script: |
+ # Load used functions
+ . (Join-Path '$(System.DefaultWorkingDirectory)' 'utilities' 'pipelines' 'sharedScripts' 'Set-EnvironmentOnAgent.ps1')
+
+ # Set agent up
+ Set-EnvironmentOnAgent
+
+ # [Module Pester Test] task(s)
+ #-----------------------------
+ - task: AzurePowerShell@5
+ displayName: 'Run general [${{ parameters.moduleName }}] tests via (Pester) via connection [${{ parameters.serviceConnection }}]'
+ inputs:
+ azureSubscription: ${{ parameters.serviceConnection }}
+ azurePowerShellVersion: ${{ parameters.azurePowerShellVersion }}
+ preferredAzurePowerShellVersion: ${{ parameters.preferredAzurePowerShellVersion }}
+ ScriptType: InlineScript
+ pwsh: true
+ inline: |
+ # ---------------------------- #
+ # HANDLE MULTI-REPO INVOCATION #
+ # ---------------------------- #
+ $componentsBasePath = "$(System.DefaultWorkingDirectory)"
+ # Handle multiple-repositories
+ if( "${{ join(';',parameters.checkoutRepositories) }}".length -gt 0) {
+ Write-Verbose "Multi Repo" -Verbose
+ $componentsBasePath = Join-Path $componentsBasePath '$(modulesRepository)'
+ }
+
+ # --------------------- #
+ # INVOKE PESTER TEST(S) #
+ # --------------------- #
+ Install-Module Pester -Force -ErrorAction Stop -RequiredVersion 5.1.1
+
+ Invoke-Pester -Configuration @{
+ Run = @{
+ Container = New-PesterContainer -Path 'arm/.global/global.module.tests.ps1' -Data @{
+ moduleFolderPaths = Join-Path $componentsBasePath '${{ parameters.modulePath }}'
+ }
+ }
+ Filter = @{
+ ExcludeTag = 'ApiCheck'
+ }
+ TestResult = @{
+ TestSuiteName = 'Global Module Tests'
+ OutputPath = 'arm/.global/global-testResults.xml'
+ OutputFormat = 'NUnitXml'
+ Enabled = $true
+ }
+ Output = @{
+ Verbosity = 'Detailed'
+ }
+ }
+ errorActionPreference: continue
+
+ - task: PublishTestResults@2
+ displayName: Publish Test Results
+ inputs:
+ testRunTitle: 'Global Module Tests'
+ testResultsFormat: NUnit
+ testResultsFiles: global-testResults.xml
+ failTaskOnFailedTests: false
+ searchFolder: 'arm/.global'
+ continueOnError: false
+ condition: succeededOrFailed()
+
+ - job:
+ displayName: Run global API tests
+ timeoutInMinutes: ${{ parameters.defaultJobTimeoutInMinutes }}
+ pool:
+ ${{ if ne(parameters.vmImage, '') }}:
+ vmImage: ${{ parameters.vmImage }}
+ ${{ if ne(parameters.poolName, '') }}:
+ name: ${{ parameters.poolName }}
+ steps:
+ # [Checkout Repositories] task(s)
+ #--------------------------------
+ - checkout: self
+ - ${{ if ne(parameters.checkoutRepositories, '') }}:
+ - ${{ each checkoutRepository in parameters.checkoutRepositories }}:
+ - checkout: ${{ checkoutRepository }}
+ fetchDepth: 1 # the depth of commits to ask Git to fetch; if not set defaults to no limit
+ path: 's/${{ checkoutRepository }}'
+
+ # [Agent] Prepare environment
+ #----------------------------
+ - task: PowerShell@2
+ displayName: 'Setup agent'
+ inputs:
+ targetType: inline
+ pwsh: true
+ script: |
+ # Load used functions
+ . (Join-Path '$(System.DefaultWorkingDirectory)' 'utilities' 'pipelines' 'sharedScripts' 'Set-EnvironmentOnAgent.ps1')
+
+ # Set agent up
+ Set-EnvironmentOnAgent
+
+ # [Module Pester Test] task(s)
+ #-----------------------------
+ - task: AzurePowerShell@5
+ displayName: 'Run [${{ parameters.moduleName }}] API tests via (Pester) via connection [${{ parameters.serviceConnection }}]'
+ inputs:
+ azureSubscription: ${{ parameters.serviceConnection }}
+ azurePowerShellVersion: ${{ parameters.azurePowerShellVersion }}
+ preferredAzurePowerShellVersion: ${{ parameters.preferredAzurePowerShellVersion }}
+ ScriptType: InlineScript
+ pwsh: true
+ inline: |
+ # ---------------------------- #
+ # HANDLE MULTI-REPO INVOCATION #
+ # ---------------------------- #
+ $componentsBasePath = "$(System.DefaultWorkingDirectory)"
+ # Handle multiple-repositories
+ if( "${{ join(';',parameters.checkoutRepositories) }}".length -gt 0) {
+ Write-Verbose "Multi Repo" -Verbose
+ $componentsBasePath = Join-Path $componentsBasePath '$(modulesRepository)'
+ }
+
+ # --------------------- #
+ # INVOKE PESTER TEST(S) #
+ # --------------------- #
+ Install-Module Pester -Force -ErrorAction Stop -RequiredVersion 5.1.1
+
+ Invoke-Pester -Configuration @{
+ Run = @{
+ Container = New-PesterContainer -Path 'arm/.global/global.module.tests.ps1' -Data @{
+ moduleFolderPaths = Join-Path $componentsBasePath '${{ parameters.modulePath }}'
+ }
+ }
+ Filter = @{
+ Tag = 'ApiCheck'
+ }
+ TestResult = @{
+ TestSuiteName = 'Global Module API Tests'
+ OutputPath = 'arm/.global/api-testResults.xml'
+ OutputFormat = 'NUnitXml'
+ Enabled = $true
+ }
+ Output = @{
+ Verbosity = 'Detailed'
+ }
+ }
+ errorActionPreference: continue
+
+ - task: PublishTestResults@2
+ displayName: Publish Test Results
+ inputs:
+ testRunTitle: 'Global Module API Tests'
+ testResultsFormat: NUnit
+ testResultsFiles: api-testResults.xml
+ failTaskOnFailedTests: false
+ searchFolder: 'arm/.global'
+ continueOnError: false
+ condition: succeededOrFailed()
+
+ - ${{ each deploymentBlock in parameters.deploymentBlocks }}:
+ - job:
+ ${{ if ne( deploymentBlock.displayName, '') }}:
+ displayName: ${{ deploymentBlock.displayName }}
+ ${{ if eq( deploymentBlock.displayName, '') }}:
+ displayName: Validate with [${{ replace( deploymentBlock.path, '$(modulePath)', '') }}]
+ timeoutInMinutes: ${{ parameters.defaultJobTimeoutInMinutes }}
+ pool:
+ ${{ if ne(parameters.vmImage, '') }}:
+ vmImage: ${{ parameters.vmImage }}
+ ${{ if ne(parameters.poolName, '') }}:
+ name: ${{ parameters.poolName }}
+ steps:
+ # [Checkout Repositories] task(s)
+ #--------------------------------
+ - checkout: self
+ - ${{ if ne(parameters.checkoutRepositories, '') }}:
+ - ? ${{ each checkoutRepository in parameters.checkoutRepositories }}
+ : - checkout: ${{ checkoutRepository }}
+ fetchDepth: 1 # the depth of commits to ask Git to fetch; if not set defaults to no limit
+ path: 's/${{ checkoutRepository }}'
+
+ # [Agent] Prepare environment
+ #----------------------------
+ - task: PowerShell@2
+ displayName: 'Setup agent'
+ inputs:
+ targetType: inline
+ pwsh: true
+ script: |
+ # Load used functions
+ . (Join-Path '$(System.DefaultWorkingDirectory)' 'utilities' 'pipelines' 'sharedScripts' 'Set-EnvironmentOnAgent.ps1')
+
+ # Set agent up
+ Set-EnvironmentOnAgent
+
+ # [Multi Repo] Support task
+ #--------------------------
+ - task: PowerShell@2
+ displayName: Handle Multi-Repo Invocation
+ inputs:
+ targetType: inline
+ pwsh: true
+ script: |
+ # Handle multiple-repositories
+ if( "${{ join(';',parameters.checkoutRepositories) }}".length -gt 0) {
+ Write-Verbose "Multi-Repo Checkout" -Verbose
+ $moduleRepoRoot = Join-Path '$(System.DefaultWorkingDirectory)' '$(modulesRepository)'
+ $parametersRepoRoot = Join-Path '$(System.DefaultWorkingDirectory)' '${{ parameters.parametersRepository }}'
+ } else {
+ Write-Verbose "No Multi-Repo Checkout" -Verbose
+ $moduleRepoRoot = '$(System.DefaultWorkingDirectory)'
+ $parametersRepoRoot = '$(System.DefaultWorkingDirectory)'
+ }
+ Write-Host "##vso[task.setvariable variable=ModuleRepoRoot]$moduleRepoRoot"
+ Write-Host "##vso[task.setvariable variable=ParametersRepoRoot]$parametersRepoRoot"
+
+ # [Agent] Replace tokens
+ #-----------------------
+ - task: PowerShell@2
+ displayName: 'Replace Tokens [${{ deploymentBlock.path }}]'
+ inputs:
+ targetType: inline
+ pwsh: true
+ script: |
+ # Load used functions
+ . (Join-Path '$(System.DefaultWorkingDirectory)' 'utilities' 'pipelines' 'tokensReplacement' 'Convert-TokensInParameterFile.ps1')
+
+ # Load Settings File
+ $Settings = Get-Content -Path "settings.json" | ConvertFrom-Json
+
+ # Initialize Default Parameter File Tokens
+ $DefaultParameterFileTokens = @(
+ @{ Name = 'resourceGroupName'; Value = '${{ parameters.resourceGroupName }}' }
+ @{ Name = 'subscriptionId'; Value = '${{ parameters.subscriptionId }}' }
+ @{ Name = 'managementGroupId'; Value = '${{ parameters.managementGroupId }}' }
+ @{ Name = "tenantId"; Value = '${{ variables.ARM_TENANT_ID }}' }
+ @{ Name = "deploymentSpId"; Value = '${{ variables.DEPLOYMENT_SP_ID }}' }
+ @{ Name = "platformKeyVault"; Value = '${{ variables.PLATFORM_KEYVAULT }}' }
+ ) | ForEach-Object { [PSCustomObject]$PSItem }
+
+ # Construct Token Function Input
+ $ConvertTokensInputs = @{
+ ParameterFilePath = '${{ deploymentBlock.path }}'
+ DefaultParameterFileTokens = $DefaultParameterFileTokens
+ LocalCustomParameterFileTokens = $Settings.parameterFileTokens.localTokens.tokens
+ TokenPrefix = $Settings.parameterFileTokens.tokenPrefix
+ TokenSuffix = $Settings.parameterFileTokens.tokenSuffix
+ verbose = $true
+ }
+ # Add Remote Custom Parameter File Tokens
+ if ('${{ env.PLATFORM_KEYVAULT }}' -and '${{ inputs.subscriptionId }}') {
+ $ConvertTokensInputs += @{
+ TokensKeyVaultName = '${{ variables.PLATFORM_KEYVAULT }}'
+ TokensKeyVaultSubscriptionId = '${{ parameters.subscriptionId }}'
+ TokensKeyVaultSecretNamePrefix = $Settings.parameterFileTokens.remoteTokens.keyVaultSecretNamePrefix
+ }
+ }
+
+ Write-Verbose "Invoke task with" -Verbose
+ Write-Verbose ($ConvertTokensInputs | ConvertTo-Json | Out-String) -Verbose
+
+ # Invoke Token Replacement Functionality
+ Convert-TokensInParameterFile @ConvertTokensInputs -Verbose
+
+ # [Test Deployment] task(s)
+ #--------------------------
+ - task: AzurePowerShell@5
+ displayName: 'Validate [${{ parameters.moduleName }}] via connection [${{ parameters.serviceConnection }}]'
+ inputs:
+ azureSubscription: ${{ parameters.serviceConnection }}
+ azurePowerShellVersion: ${{ parameters.azurePowerShellVersion }}
+ preferredAzurePowerShellVersion: ${{ parameters.preferredAzurePowerShellVersion }}
+ ScriptType: InlineScript
+ pwsh: true
+ inline: |
+ # Load used functions
+ . (Join-Path '$(System.DefaultWorkingDirectory)' '$(pipelineFunctionsPath)' 'resourceValidation' 'Test-TemplateWithParameterFile.ps1')
+
+ # ----------- #
+ # INVOKE TEST #
+ # ----------- #
+ $functionInput = @{
+ templateFilePath = Join-Path '$(ModuleRepoRoot)' '$(modulePath)' 'deploy.bicep'
+ parameterFilePath = Join-Path '$(ParametersRepoRoot)' '${{ deploymentBlock.path }}'
+ location = '${{ parameters.location }}'
+ resourceGroupName = '${{ parameters.resourceGroupName }}'
+ subscriptionId = '${{ parameters.subscriptionId }}'
+ managementGroupId = '${{ parameters.managementGroupId }}'
+ }
+
+ Write-Verbose "Invoke task with" -Verbose
+ Write-Verbose ($functionInput | ConvertTo-Json | Out-String) -Verbose
+
+ Test-TemplateWithParameterFile @functionInput -Verbose
diff --git a/.azuredevops/pipelineVariables/global.variables.yml b/.azuredevops/pipelineVariables/global.variables.yml
new file mode 100644
index 0000000000..7938b33cd2
--- /dev/null
+++ b/.azuredevops/pipelineVariables/global.variables.yml
@@ -0,0 +1,84 @@
+variables:
+ ######################################
+ # Agent settings
+ ######################################
+
+ vmImage: 'ubuntu-latest' # Use this for Microsoft-hosted agents
+ poolName: '' # Use this for self-hosted agents
+ serviceConnection: 'CARML-Dev'
+
+ ######################################
+ # Source
+ ######################################
+
+ vstsOrganization: alsehr
+ vstsProject: '$(System.TeamProject)'
+ modulesRepository: ResourceModules # The repository hosting the deployment code (i.e. 'Components'). MUST be provided as a variable with every pipeline
+ modulePath: arm/$(moduleName) # only use in module pielines
+ pipelineFunctionsPath: 'utilities/pipelines'
+
+ ######################################
+ # Validation deployment settings
+ ######################################
+
+ defaultLocation: 'West Europe'
+ defaultResourceGroupName: 'validation-rg' # validation-resourcegroup-name
+
+ ######################################
+ # Components template spec settings
+ ######################################
+
+ # Set to true, if you would like to publish modules as template specs
+ templateSpecsDoPublish: true
+ templateSpecsRGName: 'artifacts-rg'
+ templateSpecsRGLocation: 'West Europe'
+ templateSpecsDescription: components
+
+ ######################################
+ # Universal Packages
+ ######################################
+
+ # Set to true, if you would like to publish modules as Universal Packages (in ADO Artifacts)
+ # If you provide a name below, you have to create an Artifact Feed in ADO with the same name before using this feed.
+ artifactsFeedDoPublish: true
+ vstsFeedName: 'ResourceModules'
+ vstsFeedProject: '$(System.TeamProject)'
+
+ ######################################
+ # Nuget Packages
+ ######################################
+
+ # Set to true, if you would like to publish modules as Nuget Packages (in ADO Artifacts)
+ # If you provide a name below, you have to create an Artifact Feed in ADO with the same name before using this feed.
+ nugetArtifactsFeedDoPublish: false
+ vstsNugetFeedName: 'Nuget-Modules'
+ vstNugetFeedUrl: 'https://pkgs.dev.azure.com/$(vstsOrganization)/$(vstsProject)/_packaging/Nuget-Modules/nuget/v2'
+
+ ######################################
+ # Private Bicep Registry
+ ######################################
+
+ bicepRegistryDoPublish: true
+ bicepRegistryName: adpsxxazacrx001
+ bicepRegistryRGName: 'artifacts-rg'
+
+ ######################################
+ # Azure PowerShell Version
+ ######################################
+
+ # Should be set to 'latestVersion' unless there is an issue with the Az PowerShell modules.
+ # If a specific version needs to be set azurePowerShellVersion should be changed to 'OtherVersion'.
+ # NOTE: The strings are case sensitive and will not work unless properly entered.
+ azurePowerShellVersion: 'latestVersion'
+ # If using the latest version of the Az PowerShell modules, set `preferredAzurePowerShellVersion` to an empty string ''.
+ # If overriding the Az PowerShell module version, set to the version. Example: '4.4.0'
+ preferredAzurePowerShellVersion: ''
+#
+# NOTE: To override for just an individual template, just add the following to the
+# templates pipeline.yml replacing '4.4.0' with the desired version:
+#
+# - name: azurePowerShellVersion
+# value: 'OtherVersion'
+# - name: preferredAzurePowerShellVersion
+# value: '4.4.0'
+#
diff --git a/.github/actions/templates/deployModule/action.yml b/.github/actions/templates/deployModule/action.yml
index 43f993f718..a54a798d1b 100644
--- a/.github/actions/templates/deployModule/action.yml
+++ b/.github/actions/templates/deployModule/action.yml
@@ -31,11 +31,12 @@ inputs:
runs:
using: 'composite'
steps:
- - name: 'Setup agent & login'
+ - name: 'Setup agent'
shell: pwsh
run: |
# Load used functions
- . ".github/actions/sharedScripts/Set-EnvironmentOnAgent.ps1"
+ . (Join-Path $env:GITHUB_WORKSPACE 'utilities/pipelines/sharedScripts/Set-EnvironmentOnAgent.ps1')
+
# Set agent up
Set-EnvironmentOnAgent
@@ -49,7 +50,8 @@ runs:
shell: pwsh
run: |
# Load used functions
- . "utilities/tokensReplacement/Convert-TokensInParameterFile.ps1"
+ . (Join-Path $env:GITHUB_WORKSPACE 'utilities' 'pipelines' 'tokensReplacement' 'Convert-TokensInParameterFile.ps1')
+
# Load Settings File
$Settings = Get-Content -Path "settings.json" | ConvertFrom-Json
# Initialize Default Parameter File Tokens
@@ -85,7 +87,7 @@ runs:
shell: pwsh
run: |
# Load used functions
- . "$env:GITHUB_ACTION_PATH/scripts/New-ModuleDeployment.ps1"
+ . (Join-Path $env:GITHUB_WORKSPACE 'utilities/pipelines/resourceDeployment/New-ModuleDeployment.ps1')
$functionInput = @{
moduleName = '${{ inputs.moduleName }}'
@@ -95,7 +97,7 @@ runs:
resourceGroupName = '${{ inputs.resourceGroupName }}'
subscriptionId = '${{ inputs.subscriptionId }}'
managementGroupId = '${{ inputs.managementGroupId }}'
- removeDeployment = [System.Convert]::ToBoolean('${{ inputs.removeDeployment }}')
+ removeDeployment = [System.Convert]::ToBoolean('${{ inputs.removeDeployment }}')
}
Write-Verbose "Invoke task with" -Verbose
diff --git a/.github/actions/templates/publishModule/action.yml b/.github/actions/templates/publishModule/action.yml
index 21344f1398..d4f968f325 100644
--- a/.github/actions/templates/publishModule/action.yml
+++ b/.github/actions/templates/publishModule/action.yml
@@ -40,11 +40,12 @@ inputs:
runs:
using: 'composite'
steps:
- - name: 'Setup agent & login'
+ - name: 'Setup agent'
shell: pwsh
run: |
# Load used functions
- . ".github/actions/sharedScripts/Set-EnvironmentOnAgent.ps1"
+ . (Join-Path $env:GITHUB_WORKSPACE 'utilities/pipelines/sharedScripts/Set-EnvironmentOnAgent.ps1')
+
# Set agent up
Set-EnvironmentOnAgent
@@ -54,7 +55,7 @@ runs:
creds: ${{ env.AZURE_CREDENTIALS }}
enable-AzPSSession: true
- - name: 'Publish module to template spec'
+ - name: 'Publish module to template specs'
shell: pwsh
# if: ${{ inputs.templateSpecsDoPublish == 'true' }}
run: |
@@ -63,7 +64,7 @@ runs:
if('${{ inputs.templateSpecsDoPublish }}' -eq 'true') {
# Load used functions
- . "$env:GITHUB_ACTION_PATH/scripts/Publish-ModuleToTemplateSpec.ps1"
+ . (Join-Path $env:GITHUB_WORKSPACE 'utilities/pipelines/resourcePublish/Publish-ModuleToTemplateSpec.ps1')
$functionInput = @{
templateFilePath = Join-Path $env:GITHUB_WORKSPACE "${{ inputs.templateFilePath }}"
@@ -91,7 +92,7 @@ runs:
if('${{ inputs.bicepRegistryDoPublish }}' -eq 'true') {
# Load used functions
- . "$env:GITHUB_ACTION_PATH/scripts/Publish-ModuleToPrivateBicepRegistry.ps1"
+ . (Join-Path $env:GITHUB_WORKSPACE 'utilities/pipelines/resourcePublish/Publish-ModuleToPrivateBicepRegistry.ps1')
$functionInput = @{
templateFilePath = Join-Path $env:GITHUB_WORKSPACE "${{ inputs.templateFilePath }}"
diff --git a/.github/actions/templates/removeModule/action.yml b/.github/actions/templates/removeModule/action.yml
index 9525135e23..fc28d383ff 100644
--- a/.github/actions/templates/removeModule/action.yml
+++ b/.github/actions/templates/removeModule/action.yml
@@ -14,16 +14,17 @@ inputs:
relativePathOfRemovalScript:
description: 'The relative path from root to the script that removes the service'
required: false
- default: 'utilities/resourceRemoval/Remove-DeployedModule.ps1'
+ default: 'utilities/pipelines/resourceRemoval/Remove-DeployedModule.ps1'
runs:
using: 'composite'
steps:
- - name: 'Setup agent & login'
+ - name: 'Setup agent'
shell: pwsh
run: |
# Load used functions
- . ".github/actions/sharedScripts/Set-EnvironmentOnAgent.ps1"
+ . (Join-Path $env:GITHUB_WORKSPACE 'utilities/pipelines/sharedScripts/Set-EnvironmentOnAgent.ps1')
+
# Set agent up
Set-EnvironmentOnAgent
diff --git a/.github/actions/templates/validateModuleApis/action.yml b/.github/actions/templates/validateModuleApis/action.yml
index c828945a0a..610ce6d3e7 100644
--- a/.github/actions/templates/validateModuleApis/action.yml
+++ b/.github/actions/templates/validateModuleApis/action.yml
@@ -12,11 +12,11 @@ inputs:
runs:
using: 'composite'
steps:
- - name: 'Setup agent & login'
+ - name: 'Setup agent'
shell: pwsh
run: |
# Load used functions
- . ".github/actions/sharedScripts/Set-EnvironmentOnAgent.ps1"
+ . (Join-Path $env:GITHUB_WORKSPACE 'utilities/pipelines/sharedScripts/Set-EnvironmentOnAgent.ps1')
# Set agent up
Set-EnvironmentOnAgent
@@ -34,8 +34,6 @@ runs:
# --------------------- #
# INVOKE PESTER TEST(S) #
# --------------------- #
- Install-Module Pester -Force -ErrorAction Stop -RequiredVersion 5.3.0
-
Invoke-Pester -Configuration @{
Run = @{
Container = New-PesterContainer -Path 'arm/.global/global.module.tests.ps1' -Data @{
@@ -46,7 +44,7 @@ runs:
Tag = 'ApiCheck'
}
TestResult = @{
- TestSuiteName = 'Global Module Tests'
+ TestSuiteName = 'Global Module API Tests'
OutputPath = 'arm/.global/api-testResults.xml'
OutputFormat = 'JUnitXml'
Enabled = $true
diff --git a/.github/actions/templates/validateModuleDeploy/action.yml b/.github/actions/templates/validateModuleDeploy/action.yml
index cc79d6c805..806851a0c1 100644
--- a/.github/actions/templates/validateModuleDeploy/action.yml
+++ b/.github/actions/templates/validateModuleDeploy/action.yml
@@ -24,11 +24,12 @@ inputs:
runs:
using: 'composite'
steps:
- - name: 'Setup agent & login'
+ - name: 'Setup agent'
shell: pwsh
run: |
# Load used functions
- . ".github/actions/sharedScripts/Set-EnvironmentOnAgent.ps1"
+ . (Join-Path $env:GITHUB_WORKSPACE 'utilities/pipelines/sharedScripts/Set-EnvironmentOnAgent.ps1')
+
# Set agent up
Set-EnvironmentOnAgent
@@ -42,9 +43,11 @@ runs:
shell: pwsh
run: |
# Load used functions
- . "utilities/tokensReplacement/Convert-TokensInParameterFile.ps1"
+ . (Join-Path $env:GITHUB_WORKSPACE 'utilities' 'pipelines' 'tokensReplacement' 'Convert-TokensInParameterFile.ps1')
+
# Load Settings File
$Settings = Get-Content -Path "settings.json" | ConvertFrom-Json
+
# Initialize Default Parameter File Tokens
$DefaultParameterFileTokens = @(
@{ Name = 'resourceGroupName'; Value = '${{ inputs.resourceGroupName }}' }
@@ -80,7 +83,7 @@ runs:
shell: pwsh
run: |
# Load used functions
- . "$env:GITHUB_ACTION_PATH/scripts/Test-TemplateWithParameterFile.ps1"
+ . (Join-Path $env:GITHUB_WORKSPACE 'utilities/pipelines/resourceValidation/Test-TemplateWithParameterFile.ps1')
# ----------- #
# INVOKE TEST #
diff --git a/.github/actions/templates/validateModuleGeneral/action.yml b/.github/actions/templates/validateModuleGeneral/action.yml
index 7e5cd989fb..cb16b51b91 100644
--- a/.github/actions/templates/validateModuleGeneral/action.yml
+++ b/.github/actions/templates/validateModuleGeneral/action.yml
@@ -14,11 +14,12 @@ inputs:
runs:
using: 'composite'
steps:
- - name: 'Setup agent & login'
+ - name: 'Setup agent'
shell: pwsh
run: |
# Load used functions
- . ".github/actions/sharedScripts/Set-EnvironmentOnAgent.ps1"
+ . (Join-Path $env:GITHUB_WORKSPACE 'utilities/pipelines/sharedScripts/Set-EnvironmentOnAgent.ps1')
+
# Set agent up
Set-EnvironmentOnAgent
@@ -36,8 +37,6 @@ runs:
# --------------------- #
# INVOKE PESTER TEST(S) #
# --------------------- #
- Install-Module Pester -Force -ErrorAction Stop -RequiredVersion 5.3.0
-
Invoke-Pester -Configuration @{
Run = @{
Container = New-PesterContainer -Path 'arm/.global/global.module.tests.ps1' -Data @{
diff --git a/.github/workflows/ms.analysisservices.servers.yml b/.github/workflows/ms.analysisservices.servers.yml
index bae4a28377..f704519789 100644
--- a/.github/workflows/ms.analysisservices.servers.yml
+++ b/.github/workflows/ms.analysisservices.servers.yml
@@ -97,7 +97,7 @@ jobs:
strategy:
fail-fast: false
matrix:
- parameterFilePaths: ['parameters.json']
+ parameterFilePaths: ['min.parameters.json', 'parameters.json']
steps:
- name: 'Checkout'
uses: actions/checkout@v2
@@ -132,7 +132,7 @@ jobs:
strategy:
fail-fast: false
matrix:
- parameterFilePaths: ['parameters.json']
+ parameterFilePaths: ['min.parameters.json', 'parameters.json']
steps:
- name: 'Checkout'
uses: actions/checkout@v2
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.apimanagement.service.apis.yml b/.github/workflows/ms.apimanagement.service.apis.yml
index d8c6773f1a..d296d158c7 100644
--- a/.github/workflows/ms.apimanagement.service.apis.yml
+++ b/.github/workflows/ms.apimanagement.service.apis.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.apimanagement.service.authorizationservers.yml b/.github/workflows/ms.apimanagement.service.authorizationservers.yml
index ced0f92711..ab50219124 100644
--- a/.github/workflows/ms.apimanagement.service.authorizationservers.yml
+++ b/.github/workflows/ms.apimanagement.service.authorizationservers.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.apimanagement.service.backends.yml b/.github/workflows/ms.apimanagement.service.backends.yml
index 45483bb0e4..21455400ce 100644
--- a/.github/workflows/ms.apimanagement.service.backends.yml
+++ b/.github/workflows/ms.apimanagement.service.backends.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.apimanagement.service.caches.yml b/.github/workflows/ms.apimanagement.service.caches.yml
index 44174d6fba..061caa19f9 100644
--- a/.github/workflows/ms.apimanagement.service.caches.yml
+++ b/.github/workflows/ms.apimanagement.service.caches.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.apimanagement.service.namedvalues.yml b/.github/workflows/ms.apimanagement.service.namedvalues.yml
index 1822cb8f87..781751b841 100644
--- a/.github/workflows/ms.apimanagement.service.namedvalues.yml
+++ b/.github/workflows/ms.apimanagement.service.namedvalues.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.apimanagement.service.products.yml b/.github/workflows/ms.apimanagement.service.products.yml
index a303a4a605..0c3c939fa8 100644
--- a/.github/workflows/ms.apimanagement.service.products.yml
+++ b/.github/workflows/ms.apimanagement.service.products.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.apimanagement.service.subscriptions.yml b/.github/workflows/ms.apimanagement.service.subscriptions.yml
index 8d1d11ae90..2a809432d8 100644
--- a/.github/workflows/ms.apimanagement.service.subscriptions.yml
+++ b/.github/workflows/ms.apimanagement.service.subscriptions.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.apimanagement.service.yml b/.github/workflows/ms.apimanagement.service.yml
index 001a0a939d..63a098a31e 100644
--- a/.github/workflows/ms.apimanagement.service.yml
+++ b/.github/workflows/ms.apimanagement.service.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.authorization.policyassignments.yml b/.github/workflows/ms.authorization.policyassignments.yml
index 4434c90679..fd656caf55 100644
--- a/.github/workflows/ms.authorization.policyassignments.yml
+++ b/.github/workflows/ms.authorization.policyassignments.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.authorization.policydefinitions.yml b/.github/workflows/ms.authorization.policydefinitions.yml
index ca9418b069..50f0878d64 100644
--- a/.github/workflows/ms.authorization.policydefinitions.yml
+++ b/.github/workflows/ms.authorization.policydefinitions.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.authorization.policyexemptions.yml b/.github/workflows/ms.authorization.policyexemptions.yml
index a3d966ec23..8dfa1d8824 100644
--- a/.github/workflows/ms.authorization.policyexemptions.yml
+++ b/.github/workflows/ms.authorization.policyexemptions.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.authorization.policysetdefinitions.yml b/.github/workflows/ms.authorization.policysetdefinitions.yml
index 7a1c315748..6b78ae816b 100644
--- a/.github/workflows/ms.authorization.policysetdefinitions.yml
+++ b/.github/workflows/ms.authorization.policysetdefinitions.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.authorization.roleassignments.yml b/.github/workflows/ms.authorization.roleassignments.yml
index d550bd9aed..7a2bc537b3 100644
--- a/.github/workflows/ms.authorization.roleassignments.yml
+++ b/.github/workflows/ms.authorization.roleassignments.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.authorization.roledefinitions.yml b/.github/workflows/ms.authorization.roledefinitions.yml
index 2da12e0fd0..aa8e1f8243 100644
--- a/.github/workflows/ms.authorization.roledefinitions.yml
+++ b/.github/workflows/ms.authorization.roledefinitions.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.automanage.accounts.yml b/.github/workflows/ms.automanage.accounts.yml
index 7e4a2b749d..73742f656f 100644
--- a/.github/workflows/ms.automanage.accounts.yml
+++ b/.github/workflows/ms.automanage.accounts.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.automation.automationaccounts.softwareupdateconfigurations.yml b/.github/workflows/ms.automation.automationaccounts.softwareupdateconfigurations.yml
index 3a1ac358f1..3b27ec6a12 100644
--- a/.github/workflows/ms.automation.automationaccounts.softwareupdateconfigurations.yml
+++ b/.github/workflows/ms.automation.automationaccounts.softwareupdateconfigurations.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.automation.automationaccounts.yml b/.github/workflows/ms.automation.automationaccounts.yml
index 155d3193a8..96cd32064e 100644
--- a/.github/workflows/ms.automation.automationaccounts.yml
+++ b/.github/workflows/ms.automation.automationaccounts.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.batch.batchaccounts.yml b/.github/workflows/ms.batch.batchaccounts.yml
index 6fa2ea39c6..e35144bfcf 100644
--- a/.github/workflows/ms.batch.batchaccounts.yml
+++ b/.github/workflows/ms.batch.batchaccounts.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.cognitiveservices.accounts.yml b/.github/workflows/ms.cognitiveservices.accounts.yml
index 87bb3e174f..f2e4bfbb67 100644
--- a/.github/workflows/ms.cognitiveservices.accounts.yml
+++ b/.github/workflows/ms.cognitiveservices.accounts.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.compute.availabilitysets.yml b/.github/workflows/ms.compute.availabilitysets.yml
index 4417255a35..99efc69ecc 100644
--- a/.github/workflows/ms.compute.availabilitysets.yml
+++ b/.github/workflows/ms.compute.availabilitysets.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.compute.diskencryptionsets.yml b/.github/workflows/ms.compute.diskencryptionsets.yml
index 1899a23d1b..2b3bf7e26b 100644
--- a/.github/workflows/ms.compute.diskencryptionsets.yml
+++ b/.github/workflows/ms.compute.diskencryptionsets.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.compute.galleries.images.yml b/.github/workflows/ms.compute.galleries.images.yml
index d974351d32..f730022b84 100644
--- a/.github/workflows/ms.compute.galleries.images.yml
+++ b/.github/workflows/ms.compute.galleries.images.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.compute.galleries.yml b/.github/workflows/ms.compute.galleries.yml
index a0e5a8d597..0fd54197b6 100644
--- a/.github/workflows/ms.compute.galleries.yml
+++ b/.github/workflows/ms.compute.galleries.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.compute.images.yml b/.github/workflows/ms.compute.images.yml
index cfd3be0285..096eca49eb 100644
--- a/.github/workflows/ms.compute.images.yml
+++ b/.github/workflows/ms.compute.images.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.compute.proximityplacementgroups.yml b/.github/workflows/ms.compute.proximityplacementgroups.yml
index c909fd6bd0..68ab87d41f 100644
--- a/.github/workflows/ms.compute.proximityplacementgroups.yml
+++ b/.github/workflows/ms.compute.proximityplacementgroups.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.compute.virtualmachines.yml b/.github/workflows/ms.compute.virtualmachines.yml
index 0f686c8a87..3ffba2f054 100644
--- a/.github/workflows/ms.compute.virtualmachines.yml
+++ b/.github/workflows/ms.compute.virtualmachines.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.compute.virtualmachinescalesets.yml b/.github/workflows/ms.compute.virtualmachinescalesets.yml
index 3ef8e98de6..30c4b04893 100644
--- a/.github/workflows/ms.compute.virtualmachinescalesets.yml
+++ b/.github/workflows/ms.compute.virtualmachinescalesets.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.consumption.budgets.yml b/.github/workflows/ms.consumption.budgets.yml
index 11f55c074e..266cc1d7f6 100644
--- a/.github/workflows/ms.consumption.budgets.yml
+++ b/.github/workflows/ms.consumption.budgets.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.containerinstance.containergroups.yml b/.github/workflows/ms.containerinstance.containergroups.yml
index be66a7b768..ee08b8f075 100644
--- a/.github/workflows/ms.containerinstance.containergroups.yml
+++ b/.github/workflows/ms.containerinstance.containergroups.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.containerregistry.registries.yml b/.github/workflows/ms.containerregistry.registries.yml
index 5be131f049..21c1bad571 100644
--- a/.github/workflows/ms.containerregistry.registries.yml
+++ b/.github/workflows/ms.containerregistry.registries.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.containerservice.managedclusters.yml b/.github/workflows/ms.containerservice.managedclusters.yml
index a1425fe85c..ee15cac3c4 100644
--- a/.github/workflows/ms.containerservice.managedclusters.yml
+++ b/.github/workflows/ms.containerservice.managedclusters.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.databricks.workspaces.yml b/.github/workflows/ms.databricks.workspaces.yml
index ab86e971a3..104e68c7da 100644
--- a/.github/workflows/ms.databricks.workspaces.yml
+++ b/.github/workflows/ms.databricks.workspaces.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.datafactory.factories.yml b/.github/workflows/ms.datafactory.factories.yml
index f10ce616bf..36577351d0 100644
--- a/.github/workflows/ms.datafactory.factories.yml
+++ b/.github/workflows/ms.datafactory.factories.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.desktopvirtualization.applicationgroups.yml b/.github/workflows/ms.desktopvirtualization.applicationgroups.yml
index 43b96b5d1c..549a1185a4 100644
--- a/.github/workflows/ms.desktopvirtualization.applicationgroups.yml
+++ b/.github/workflows/ms.desktopvirtualization.applicationgroups.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.desktopvirtualization.hostpools.yml b/.github/workflows/ms.desktopvirtualization.hostpools.yml
index 9f7be6d49e..f971704aef 100644
--- a/.github/workflows/ms.desktopvirtualization.hostpools.yml
+++ b/.github/workflows/ms.desktopvirtualization.hostpools.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.desktopvirtualization.workspaces.yml b/.github/workflows/ms.desktopvirtualization.workspaces.yml
index f47bc13554..46d659b774 100644
--- a/.github/workflows/ms.desktopvirtualization.workspaces.yml
+++ b/.github/workflows/ms.desktopvirtualization.workspaces.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.documentdb.databaseaccounts.yml b/.github/workflows/ms.documentdb.databaseaccounts.yml
index 42a99c760f..4e88e06cfc 100644
--- a/.github/workflows/ms.documentdb.databaseaccounts.yml
+++ b/.github/workflows/ms.documentdb.databaseaccounts.yml
@@ -205,7 +205,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.eventgrid.topics.yml b/.github/workflows/ms.eventgrid.topics.yml
index 786f6e4c21..f5d245b515 100644
--- a/.github/workflows/ms.eventgrid.topics.yml
+++ b/.github/workflows/ms.eventgrid.topics.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.eventhub.namespaces.yml b/.github/workflows/ms.eventhub.namespaces.yml
index e4604a1029..f5697718a5 100644
--- a/.github/workflows/ms.eventhub.namespaces.yml
+++ b/.github/workflows/ms.eventhub.namespaces.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.healthbot.healthbots.yml b/.github/workflows/ms.healthbot.healthbots.yml
index 13b42d2873..032ee07b2d 100644
--- a/.github/workflows/ms.healthbot.healthbots.yml
+++ b/.github/workflows/ms.healthbot.healthbots.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.insights.actiongroups.yml b/.github/workflows/ms.insights.actiongroups.yml
index ce0dd1c17b..54d7de898e 100644
--- a/.github/workflows/ms.insights.actiongroups.yml
+++ b/.github/workflows/ms.insights.actiongroups.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.insights.activitylogalerts.yml b/.github/workflows/ms.insights.activitylogalerts.yml
index a6dea19409..5ecac2396a 100644
--- a/.github/workflows/ms.insights.activitylogalerts.yml
+++ b/.github/workflows/ms.insights.activitylogalerts.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.insights.components.yml b/.github/workflows/ms.insights.components.yml
index 42d24044bd..8d0214b586 100644
--- a/.github/workflows/ms.insights.components.yml
+++ b/.github/workflows/ms.insights.components.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.insights.diagnosticsettings.yml b/.github/workflows/ms.insights.diagnosticsettings.yml
index 8fc17ad375..3f4c161510 100644
--- a/.github/workflows/ms.insights.diagnosticsettings.yml
+++ b/.github/workflows/ms.insights.diagnosticsettings.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.insights.metricalerts.yml b/.github/workflows/ms.insights.metricalerts.yml
index 47e3dff93f..fdb43119ea 100644
--- a/.github/workflows/ms.insights.metricalerts.yml
+++ b/.github/workflows/ms.insights.metricalerts.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.insights.privatelinkscopes.yml b/.github/workflows/ms.insights.privatelinkscopes.yml
index 81179a82f1..5e4f841675 100644
--- a/.github/workflows/ms.insights.privatelinkscopes.yml
+++ b/.github/workflows/ms.insights.privatelinkscopes.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.insights.scheduledqueryrules.yml b/.github/workflows/ms.insights.scheduledqueryrules.yml
index d9f7435422..7d929cd087 100644
--- a/.github/workflows/ms.insights.scheduledqueryrules.yml
+++ b/.github/workflows/ms.insights.scheduledqueryrules.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.keyvault.vaults.yml b/.github/workflows/ms.keyvault.vaults.yml
index d7054a8052..9679974e29 100644
--- a/.github/workflows/ms.keyvault.vaults.yml
+++ b/.github/workflows/ms.keyvault.vaults.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.logic.workflows.yml b/.github/workflows/ms.logic.workflows.yml
index 899848a07e..0b61e30fed 100644
--- a/.github/workflows/ms.logic.workflows.yml
+++ b/.github/workflows/ms.logic.workflows.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.machinelearningservices.workspaces.yml b/.github/workflows/ms.machinelearningservices.workspaces.yml
index ca332fd304..1802a4d069 100644
--- a/.github/workflows/ms.machinelearningservices.workspaces.yml
+++ b/.github/workflows/ms.machinelearningservices.workspaces.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.managedidentity.userassignedidentities.yml b/.github/workflows/ms.managedidentity.userassignedidentities.yml
index db3f151bd0..83daef43d2 100644
--- a/.github/workflows/ms.managedidentity.userassignedidentities.yml
+++ b/.github/workflows/ms.managedidentity.userassignedidentities.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.managedservices.registrationdefinitions.yml b/.github/workflows/ms.managedservices.registrationdefinitions.yml
index 0e86fc0954..9ede213eb7 100644
--- a/.github/workflows/ms.managedservices.registrationdefinitions.yml
+++ b/.github/workflows/ms.managedservices.registrationdefinitions.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.management.managementgroups.yml b/.github/workflows/ms.management.managementgroups.yml
index 8ba04b5b2c..079bf04105 100644
--- a/.github/workflows/ms.management.managementgroups.yml
+++ b/.github/workflows/ms.management.managementgroups.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.netapp.netappaccounts.yml b/.github/workflows/ms.netapp.netappaccounts.yml
index fd90169d92..5d28346635 100644
--- a/.github/workflows/ms.netapp.netappaccounts.yml
+++ b/.github/workflows/ms.netapp.netappaccounts.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
@@ -213,4 +213,4 @@ jobs:
with:
moduleName: '${{ env.moduleName }}'
resourceGroupName: '${{ env.resourceGroupName }}'
- relativePathOfRemovalScript: 'utilities/resourceRemoval/Remove-NetAppAccount.ps1'
+ relativePathOfRemovalScript: 'utilities/pipelines/resourceRemoval/Remove-NetAppAccount.ps1'
diff --git a/.github/workflows/ms.network.applicationgateways.yml b/.github/workflows/ms.network.applicationgateways.yml
index 8b6edad32c..494fc27e7f 100644
--- a/.github/workflows/ms.network.applicationgateways.yml
+++ b/.github/workflows/ms.network.applicationgateways.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.network.applicationsecuritygroups.yml b/.github/workflows/ms.network.applicationsecuritygroups.yml
index ca26120a19..6ba02f27ea 100644
--- a/.github/workflows/ms.network.applicationsecuritygroups.yml
+++ b/.github/workflows/ms.network.applicationsecuritygroups.yml
@@ -198,7 +198,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.network.azurefirewalls.yml b/.github/workflows/ms.network.azurefirewalls.yml
index af3dd454ba..2a2d21049f 100644
--- a/.github/workflows/ms.network.azurefirewalls.yml
+++ b/.github/workflows/ms.network.azurefirewalls.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.network.bastionhosts.yml b/.github/workflows/ms.network.bastionhosts.yml
index b87ad9a398..d0e4af006d 100644
--- a/.github/workflows/ms.network.bastionhosts.yml
+++ b/.github/workflows/ms.network.bastionhosts.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.network.connections.yml b/.github/workflows/ms.network.connections.yml
index 4208889085..ef1c7ce143 100644
--- a/.github/workflows/ms.network.connections.yml
+++ b/.github/workflows/ms.network.connections.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.network.ddosprotectionplans.yml b/.github/workflows/ms.network.ddosprotectionplans.yml
index b2608016fa..c7d8c1aa80 100644
--- a/.github/workflows/ms.network.ddosprotectionplans.yml
+++ b/.github/workflows/ms.network.ddosprotectionplans.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.network.expressroutecircuits.yml b/.github/workflows/ms.network.expressroutecircuits.yml
index 48e64a788b..da7aff2ed9 100644
--- a/.github/workflows/ms.network.expressroutecircuits.yml
+++ b/.github/workflows/ms.network.expressroutecircuits.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.network.ipgroups.yml b/.github/workflows/ms.network.ipgroups.yml
index 7f26bd4714..814af83b82 100644
--- a/.github/workflows/ms.network.ipgroups.yml
+++ b/.github/workflows/ms.network.ipgroups.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.network.loadbalancers.yml b/.github/workflows/ms.network.loadbalancers.yml
index 7a9e6045b9..8b562bce58 100644
--- a/.github/workflows/ms.network.loadbalancers.yml
+++ b/.github/workflows/ms.network.loadbalancers.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.network.localnetworkgateways.yml b/.github/workflows/ms.network.localnetworkgateways.yml
index 7177bf8b57..7b2521ef2b 100644
--- a/.github/workflows/ms.network.localnetworkgateways.yml
+++ b/.github/workflows/ms.network.localnetworkgateways.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.network.natgateways.yml b/.github/workflows/ms.network.natgateways.yml
index 7d00d66163..249ffda46e 100644
--- a/.github/workflows/ms.network.natgateways.yml
+++ b/.github/workflows/ms.network.natgateways.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.network.networksecuritygroups.yml b/.github/workflows/ms.network.networksecuritygroups.yml
index f3741718e5..988880fa97 100644
--- a/.github/workflows/ms.network.networksecuritygroups.yml
+++ b/.github/workflows/ms.network.networksecuritygroups.yml
@@ -198,7 +198,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.network.networkwatchers.yml b/.github/workflows/ms.network.networkwatchers.yml
index e38e478b59..b4b1d28cbe 100644
--- a/.github/workflows/ms.network.networkwatchers.yml
+++ b/.github/workflows/ms.network.networkwatchers.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.network.privatednszones.yml b/.github/workflows/ms.network.privatednszones.yml
index 81b03dd104..ffa4b30995 100644
--- a/.github/workflows/ms.network.privatednszones.yml
+++ b/.github/workflows/ms.network.privatednszones.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.network.privateendpoints.yml b/.github/workflows/ms.network.privateendpoints.yml
index b6d0d29f63..8d57fd9813 100644
--- a/.github/workflows/ms.network.privateendpoints.yml
+++ b/.github/workflows/ms.network.privateendpoints.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.network.publicipaddresses.yml b/.github/workflows/ms.network.publicipaddresses.yml
index 47fd7b9c77..4f21355b3a 100644
--- a/.github/workflows/ms.network.publicipaddresses.yml
+++ b/.github/workflows/ms.network.publicipaddresses.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.network.publicipprefixes.yml b/.github/workflows/ms.network.publicipprefixes.yml
index 9711764bfb..13c406ef63 100644
--- a/.github/workflows/ms.network.publicipprefixes.yml
+++ b/.github/workflows/ms.network.publicipprefixes.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.network.routetables.yml b/.github/workflows/ms.network.routetables.yml
index 791fdd13fa..541cab96f7 100644
--- a/.github/workflows/ms.network.routetables.yml
+++ b/.github/workflows/ms.network.routetables.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.network.trafficmanagerprofiles.yml b/.github/workflows/ms.network.trafficmanagerprofiles.yml
index 7fe91916a6..851f762447 100644
--- a/.github/workflows/ms.network.trafficmanagerprofiles.yml
+++ b/.github/workflows/ms.network.trafficmanagerprofiles.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.network.virtualnetworkgateways.yml b/.github/workflows/ms.network.virtualnetworkgateways.yml
index 1240bfa985..2e0a70472c 100644
--- a/.github/workflows/ms.network.virtualnetworkgateways.yml
+++ b/.github/workflows/ms.network.virtualnetworkgateways.yml
@@ -197,7 +197,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.network.virtualnetworks.yml b/.github/workflows/ms.network.virtualnetworks.yml
index 8236eaa43f..650e0c5002 100644
--- a/.github/workflows/ms.network.virtualnetworks.yml
+++ b/.github/workflows/ms.network.virtualnetworks.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.network.virtualwans.yml b/.github/workflows/ms.network.virtualwans.yml
index 0bd9ffe6d6..71d6de937c 100644
--- a/.github/workflows/ms.network.virtualwans.yml
+++ b/.github/workflows/ms.network.virtualwans.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
@@ -213,4 +213,4 @@ jobs:
with:
moduleName: '${{ env.moduleName }}'
resourceGroupName: '${{ env.resourceGroupName }}'
- relativePathOfRemovalScript: 'utilities/resourceRemoval/Remove-vWan.ps1'
+ relativePathOfRemovalScript: 'utilities/pipelines/resourceRemoval/Remove-vWan.ps1'
diff --git a/.github/workflows/ms.operationalinsights.workspaces.yml b/.github/workflows/ms.operationalinsights.workspaces.yml
index 2d141fb30f..f874d090c0 100644
--- a/.github/workflows/ms.operationalinsights.workspaces.yml
+++ b/.github/workflows/ms.operationalinsights.workspaces.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.recoveryservices.vaults.yml b/.github/workflows/ms.recoveryservices.vaults.yml
index f971f45f4f..808afef0ae 100644
--- a/.github/workflows/ms.recoveryservices.vaults.yml
+++ b/.github/workflows/ms.recoveryservices.vaults.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.resources.deploymentscripts.yml b/.github/workflows/ms.resources.deploymentscripts.yml
index ce80c35dbb..4aadb419d2 100644
--- a/.github/workflows/ms.resources.deploymentscripts.yml
+++ b/.github/workflows/ms.resources.deploymentscripts.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.resources.resourcegroups.yml b/.github/workflows/ms.resources.resourcegroups.yml
index c833490d39..8bdb0337e8 100644
--- a/.github/workflows/ms.resources.resourcegroups.yml
+++ b/.github/workflows/ms.resources.resourcegroups.yml
@@ -194,7 +194,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.security.azuresecuritycenter.yml b/.github/workflows/ms.security.azuresecuritycenter.yml
index fb304bfcaa..e5fda4baca 100644
--- a/.github/workflows/ms.security.azuresecuritycenter.yml
+++ b/.github/workflows/ms.security.azuresecuritycenter.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.servicebus.namespaces.yml b/.github/workflows/ms.servicebus.namespaces.yml
index 986b8834c2..dc6f6159f0 100644
--- a/.github/workflows/ms.servicebus.namespaces.yml
+++ b/.github/workflows/ms.servicebus.namespaces.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.sql.managedinstances.databases.yml b/.github/workflows/ms.sql.managedinstances.databases.yml
index 0aa670233b..eed4075169 100644
--- a/.github/workflows/ms.sql.managedinstances.databases.yml
+++ b/.github/workflows/ms.sql.managedinstances.databases.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.sql.managedinstances.yml b/.github/workflows/ms.sql.managedinstances.yml
index 32f439b7e9..720d6e3b3e 100644
--- a/.github/workflows/ms.sql.managedinstances.yml
+++ b/.github/workflows/ms.sql.managedinstances.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.sql.servers.yml b/.github/workflows/ms.sql.servers.yml
index 1b54fada92..e374892020 100644
--- a/.github/workflows/ms.sql.servers.yml
+++ b/.github/workflows/ms.sql.servers.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.storage.storageaccounts.yml b/.github/workflows/ms.storage.storageaccounts.yml
index 991e25ba0f..210a639189 100644
--- a/.github/workflows/ms.storage.storageaccounts.yml
+++ b/.github/workflows/ms.storage.storageaccounts.yml
@@ -198,7 +198,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.virtualmachineimages.imagetemplates.yml b/.github/workflows/ms.virtualmachineimages.imagetemplates.yml
index f2d345325a..275548198d 100644
--- a/.github/workflows/ms.virtualmachineimages.imagetemplates.yml
+++ b/.github/workflows/ms.virtualmachineimages.imagetemplates.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.web.connections.yml b/.github/workflows/ms.web.connections.yml
index 39320afdf4..25ca8e1f1d 100644
--- a/.github/workflows/ms.web.connections.yml
+++ b/.github/workflows/ms.web.connections.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.web.hostingenvironments.yml b/.github/workflows/ms.web.hostingenvironments.yml
index 3dd95b90f2..f979c5bfd6 100644
--- a/.github/workflows/ms.web.hostingenvironments.yml
+++ b/.github/workflows/ms.web.hostingenvironments.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.web.serverfarms.yml b/.github/workflows/ms.web.serverfarms.yml
index 97b67639d8..1e178c3e6b 100644
--- a/.github/workflows/ms.web.serverfarms.yml
+++ b/.github/workflows/ms.web.serverfarms.yml
@@ -195,7 +195,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/ms.web.sites.yml b/.github/workflows/ms.web.sites.yml
index 64b7dbe542..f8b22b2f9e 100644
--- a/.github/workflows/ms.web.sites.yml
+++ b/.github/workflows/ms.web.sites.yml
@@ -197,7 +197,7 @@ jobs:
job_remove_module:
runs-on: ubuntu-20.04
name: 'Remove module'
- if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.*.result, 'success') || contains(needs.*.result, 'failure')) }}
+ if: ${{ always() && !cancelled() && needs.job_set_workflow_param.outputs.removeDeployment == 'true' && (contains(needs.job_deploy_module.result, 'success') || contains(needs.job_deploy_module.result, 'failure')) }}
needs:
- job_deploy_module
steps:
diff --git a/.github/workflows/platform.dependencies.yml b/.github/workflows/platform.dependencies.yml
index 09e7f038bc..7ddfdd46b0 100644
--- a/.github/workflows/platform.dependencies.yml
+++ b/.github/workflows/platform.dependencies.yml
@@ -9,7 +9,7 @@ on:
# paths:
# - '.github/actions/templates/**'
# - '.github/workflows/platform.dependencies.yml'
- # - 'utilities/dependencies/**'
+ # - 'utilities/pipelines/dependencies/**'
env:
defaultLocation: 'WestEurope'
@@ -50,7 +50,7 @@ jobs:
with:
moduleName: '${{ env.moduleName }}'
templateFilePath: 'arm/${{ env.namespace }}/deploy.bicep'
- parameterFilePath: 'utilities/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
+ parameterFilePath: 'utilities/pipelines/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
location: '${{ env.defaultLocation }}'
resourceGroupName: '${{ env.resourceGroupName }}'
subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}'
@@ -113,7 +113,7 @@ jobs:
$Settings = Get-Content -Path "$env:GITHUB_WORKSPACE/settings.json" | ConvertFrom-Json
# Load used functions
. "$env:GITHUB_WORKSPACE/.github/actions/sharedScripts/Set-EnvironmentOnAgent.ps1"
- . "$env:GITHUB_WORKSPACE/utilities/tokensReplacement/Set-LocalCustomParameterFileTokensInKeyVault.ps1"
+ . "$env:GITHUB_WORKSPACE/utilities/pipelines/tokensReplacement/Set-LocalCustomParameterFileTokensInKeyVault.ps1"
# Set agent up
Set-EnvironmentOnAgent
# Create Tokens in Key Vault
@@ -149,7 +149,7 @@ jobs:
with:
moduleName: '${{ env.moduleName }}'
templateFilePath: 'arm/${{ env.namespace }}/deploy.bicep'
- parameterFilePath: 'utilities/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
+ parameterFilePath: 'utilities/pipelines/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
location: '${{ env.defaultLocation }}'
resourceGroupName: '${{ env.resourceGroupName }}'
subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}'
@@ -178,7 +178,7 @@ jobs:
with:
moduleName: '${{ env.moduleName }}'
templateFilePath: 'arm/${{ env.namespace }}/deploy.bicep'
- parameterFilePath: 'utilities/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
+ parameterFilePath: 'utilities/pipelines/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
location: '${{ env.defaultLocation }}'
resourceGroupName: '${{ env.resourceGroupNameArtifacts }}'
subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}'
@@ -207,7 +207,7 @@ jobs:
with:
moduleName: '${{ env.moduleName }}'
templateFilePath: 'arm/${{ env.namespace }}/deploy.bicep'
- parameterFilePath: 'utilities/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
+ parameterFilePath: 'utilities/pipelines/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
location: '${{ env.defaultLocation }}'
resourceGroupName: '${{ env.resourceGroupName }}'
subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}'
@@ -236,7 +236,7 @@ jobs:
with:
moduleName: '${{ env.moduleName }}'
templateFilePath: 'arm/${{ env.namespace }}/deploy.bicep'
- parameterFilePath: 'utilities/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
+ parameterFilePath: 'utilities/pipelines/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
location: '${{ env.defaultLocation }}'
resourceGroupName: '${{ env.resourceGroupName }}'
subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}'
@@ -265,7 +265,7 @@ jobs:
with:
moduleName: '${{ env.moduleName }}'
templateFilePath: 'arm/${{ env.namespace }}/deploy.bicep'
- parameterFilePath: 'utilities/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
+ parameterFilePath: 'utilities/pipelines/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
location: '${{ env.defaultLocation }}'
resourceGroupName: '${{ env.resourceGroupName }}'
subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}'
@@ -294,7 +294,7 @@ jobs:
with:
moduleName: '${{ env.moduleName }}'
templateFilePath: 'arm/${{ env.namespace }}/deploy.bicep'
- parameterFilePath: 'utilities/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
+ parameterFilePath: 'utilities/pipelines/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
location: '${{ env.defaultLocation }}'
resourceGroupName: '${{ env.resourceGroupName }}'
subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}'
@@ -323,7 +323,7 @@ jobs:
with:
moduleName: '${{ env.moduleName }}'
templateFilePath: 'arm/${{ env.namespace }}/deploy.bicep'
- parameterFilePath: 'utilities/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
+ parameterFilePath: 'utilities/pipelines/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
location: '${{ env.defaultLocation }}'
resourceGroupName: '${{ env.resourceGroupName }}'
subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}'
@@ -352,7 +352,7 @@ jobs:
with:
moduleName: '${{ env.moduleName }}'
templateFilePath: 'arm/${{ env.namespace }}/deploy.bicep'
- parameterFilePath: 'utilities/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
+ parameterFilePath: 'utilities/pipelines/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
location: '${{ env.defaultLocation }}'
resourceGroupName: '${{ env.resourceGroupName }}'
subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}'
@@ -381,7 +381,7 @@ jobs:
with:
moduleName: '${{ env.moduleName }}'
templateFilePath: 'arm/${{ env.namespace }}/deploy.bicep'
- parameterFilePath: 'utilities/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
+ parameterFilePath: 'utilities/pipelines/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
location: '${{ env.defaultLocation }}'
resourceGroupName: '${{ env.resourceGroupName }}'
subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}'
@@ -410,7 +410,7 @@ jobs:
with:
moduleName: '${{ env.moduleName }}'
templateFilePath: 'arm/${{ env.namespace }}/deploy.bicep'
- parameterFilePath: 'utilities/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
+ parameterFilePath: 'utilities/pipelines/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
location: '${{ env.defaultLocation }}'
resourceGroupName: '${{ env.resourceGroupName }}'
subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}'
@@ -448,7 +448,7 @@ jobs:
with:
moduleName: '${{ env.moduleName }}'
templateFilePath: 'arm/${{ env.namespace }}/deploy.bicep'
- parameterFilePath: 'utilities/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
+ parameterFilePath: 'utilities/pipelines/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
location: '${{ env.defaultLocation }}'
resourceGroupName: '${{ env.resourceGroupName }}'
subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}'
@@ -480,7 +480,7 @@ jobs:
with:
moduleName: '${{ env.moduleName }}'
templateFilePath: 'arm/${{ env.namespace }}/deploy.bicep'
- parameterFilePath: 'utilities/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
+ parameterFilePath: 'utilities/pipelines/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
location: '${{ env.defaultLocation }}'
resourceGroupName: '${{ env.resourceGroupName }}'
subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}'
@@ -511,7 +511,7 @@ jobs:
with:
moduleName: '${{ env.moduleName }}'
templateFilePath: 'arm/${{ env.namespace }}/deploy.bicep'
- parameterFilePath: 'utilities/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
+ parameterFilePath: 'utilities/pipelines/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
location: '${{ env.defaultLocation }}'
resourceGroupName: '${{ env.resourceGroupName }}'
subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}'
@@ -542,7 +542,7 @@ jobs:
with:
moduleName: '${{ env.moduleName }}'
templateFilePath: 'arm/${{ env.namespace }}/deploy.bicep'
- parameterFilePath: 'utilities/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
+ parameterFilePath: 'utilities/pipelines/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
location: '${{ env.defaultLocation }}'
resourceGroupName: '${{ env.resourceGroupName }}'
subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}'
@@ -573,7 +573,7 @@ jobs:
with:
moduleName: '${{ env.moduleName }}'
templateFilePath: 'arm/${{ env.namespace }}/deploy.bicep'
- parameterFilePath: 'utilities/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
+ parameterFilePath: 'utilities/pipelines/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
location: '${{ env.defaultLocation }}'
resourceGroupName: '${{ env.resourceGroupName }}'
subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}'
@@ -604,7 +604,7 @@ jobs:
with:
moduleName: '${{ env.moduleName }}'
templateFilePath: 'arm/${{ env.namespace }}/deploy.bicep'
- parameterFilePath: 'utilities/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
+ parameterFilePath: 'utilities/pipelines/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
location: '${{ env.defaultLocation }}'
resourceGroupName: '${{ env.resourceGroupName }}'
subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}'
@@ -635,7 +635,7 @@ jobs:
with:
moduleName: '${{ env.moduleName }}'
templateFilePath: 'arm/${{ env.namespace }}/deploy.bicep'
- parameterFilePath: 'utilities/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
+ parameterFilePath: 'utilities/pipelines/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
location: '${{ env.defaultLocation }}'
resourceGroupName: '${{ env.resourceGroupName }}'
subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}'
@@ -706,7 +706,7 @@ jobs:
with:
moduleName: '${{ env.moduleName }}'
templateFilePath: 'arm/${{ env.namespace }}/deploy.bicep'
- parameterFilePath: 'utilities/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
+ parameterFilePath: 'utilities/pipelines/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
location: '${{ env.defaultLocation }}'
resourceGroupName: '${{ env.resourceGroupName }}'
subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}'
@@ -735,7 +735,7 @@ jobs:
with:
moduleName: '${{ env.moduleName }}'
templateFilePath: 'arm/${{ env.namespace }}/.bicep/nested_rbac_sub.bicep'
- parameterFilePath: 'utilities/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
+ parameterFilePath: 'utilities/pipelines/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
location: '${{ env.defaultLocation }}'
resourceGroupName: '${{ env.resourceGroupName }}'
subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}'
@@ -764,7 +764,7 @@ jobs:
with:
moduleName: '${{ env.moduleName }}'
templateFilePath: 'arm/${{ env.namespace }}/deploy.bicep'
- parameterFilePath: 'utilities/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
+ parameterFilePath: 'utilities/pipelines/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
location: '${{ env.defaultLocation }}'
resourceGroupName: '${{ env.resourceGroupName }}'
subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}'
@@ -802,7 +802,7 @@ jobs:
with:
moduleName: '${{ env.moduleName }}'
templateFilePath: 'arm/${{ env.namespace }}/deploy.bicep'
- parameterFilePath: 'utilities/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
+ parameterFilePath: 'utilities/pipelines/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
location: '${{ env.defaultLocation }}'
resourceGroupName: '${{ env.resourceGroupName }}'
subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}'
@@ -831,7 +831,7 @@ jobs:
with:
moduleName: '${{ env.moduleName }}'
templateFilePath: 'arm/${{ env.namespace }}/deploy.bicep'
- parameterFilePath: 'utilities/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
+ parameterFilePath: 'utilities/pipelines/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
location: '${{ env.defaultLocation }}'
resourceGroupName: '${{ env.resourceGroupName }}'
subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}'
@@ -862,7 +862,7 @@ jobs:
with:
moduleName: '${{ env.moduleName }}'
templateFilePath: 'arm/${{ env.namespace }}/deploy.bicep'
- parameterFilePath: 'utilities/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
+ parameterFilePath: 'utilities/pipelines/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
location: '${{ env.defaultLocation }}'
resourceGroupName: '${{ env.resourceGroupName }}'
subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}'
diff --git a/arm/.global/global.module.tests.ps1 b/arm/.global/global.module.tests.ps1
index 85f9eaf919..5c2e9f7abf 100644
--- a/arm/.global/global.module.tests.ps1
+++ b/arm/.global/global.module.tests.ps1
@@ -246,7 +246,7 @@ Describe 'Readme tests' -Tag Readme {
($ComparisonFlag -gt 2) | Should -Be $false
}
- It '[] parameters section should contain all parameters from the deploy.json file' -TestCases $readmeFolderTestCases {
+ It '[] parameters section should contain all parameters from the template file' -TestCases $readmeFolderTestCases {
param(
$moduleFolderName,
$templateContent,
@@ -254,7 +254,7 @@ Describe 'Readme tests' -Tag Readme {
)
$ReadmeHTML = ($readMeContent | ConvertFrom-Markdown -ErrorAction SilentlyContinue).Html
- $parameters = Get-Member -InputObject $templateContent.parameters -MemberType NoteProperty
+ $parameters = $templateContent.parameters.Keys
$Headings = @(@())
foreach ($H in $ReadmeHTML) {
if ($H.Contains('| ', '').Replace('|
', '').Replace('', '').Split('|')[0].Trim()
}
- $differentiatingItems = $parameters.Name | Where-Object { $parametersList -notcontains $_ }
+ $differentiatingItems = $parameters | Where-Object { $parametersList -notcontains $_ }
$differentiatingItems.Count | Should -Be 0 -Because ('list of template parameters missing in the ReadMe file [{0}] should be empty' -f ($differentiatingItems -join ','))
}
@@ -302,7 +302,7 @@ Describe 'Readme tests' -Tag Readme {
$differentiatingItems.Count | Should -Be 0 -Because ('list of "Outputs" table columns missing in the ReadMe file [{0}] should be empty' -f ($differentiatingItems -join ','))
}
- It '[] Output section should contain all outputs defined in the deploy.json file' -TestCases $readmeFolderTestCases {
+ It '[] Output section should contain all outputs defined in the template file' -TestCases $readmeFolderTestCases {
param(
$moduleFolderName,
$templateContent,
@@ -413,11 +413,11 @@ Describe 'Deployment template tests' -Tag Template {
foreach ($moduleFolderPath in $moduleFolderPathsFiltered) {
$deploymentFolderTestCasesException += @{
moduleFolderNameException = $moduleFolderPath.Replace('\', '/').Split('/arm/')[1]
- templateContentException = $templateContent
+ templateContent = $templateContent
}
}
- It '[] The deploy.json file should not be empty' -TestCases $deploymentFolderTestCases {
+ It '[] the template file should not be empty' -TestCases $deploymentFolderTestCases {
param(
$moduleFolderName,
$templateContent
@@ -484,7 +484,7 @@ Describe 'Deployment template tests' -Tag Template {
$ApiVersionArray | Should -Not -Contain $false
}
- It '[] The deploy.json file should contain required elements: schema, contentVersion, resources' -TestCases $deploymentFolderTestCases {
+ It '[] the template file should contain required elements: schema, contentVersion, resources' -TestCases $deploymentFolderTestCases {
param(
$moduleFolderName,
$templateContent
@@ -517,7 +517,7 @@ Describe 'Deployment template tests' -Tag Template {
}
$CamelCasingFlag = @()
- $Parameter = ($templateContent.parameters | Get-Member | Where-Object { $_.MemberType -eq 'NoteProperty' }).Name
+ $Parameter = $templateContent.parameters.keys
foreach ($Param in $Parameter) {
if ($Param.substring(0, 1) -cnotmatch '[a-z]' -or $Param -match '-' -or $Param -match '_') {
$CamelCasingFlag += $false
@@ -540,7 +540,7 @@ Describe 'Deployment template tests' -Tag Template {
}
$CamelCasingFlag = @()
- $Variable = ($templateContent.variables | Get-Member | Where-Object { $_.MemberType -eq 'NoteProperty' }).Name
+ $Variable = $templateContent.variables.Keys
foreach ($Variab in $Variable) {
if ($Variab.substring(0, 1) -cnotmatch '[a-z]' -or $Variab -match '-') {
@@ -558,7 +558,7 @@ Describe 'Deployment template tests' -Tag Template {
$templateContent
)
$CamelCasingFlag = @()
- $Outputs = ($templateContent.outputs | Get-Member | Where-Object { $_.MemberType -eq 'NoteProperty' }).Name
+ $Outputs = $templateContent.outputs.Keys
foreach ($Output in $Outputs) {
if ($Output.substring(0, 1) -cnotmatch '[a-z]' -or $Output -match '-' -or $Output -match '_') {
@@ -595,8 +595,8 @@ Describe 'Deployment template tests' -Tag Template {
$LocationFlag = $true
$Schemaverion = $templateContent.'$schema'
if ((($Schemaverion.Split('/')[5]).Split('.')[0]) -eq (($RGdeployment.Split('/')[5]).Split('.')[0])) {
- $Locationparamoutputvalue = $templateContent.parameters.Location.defaultValue
- $Locationparamoutput = ($templateContent.parameters | Get-Member | Where-Object { $_.MemberType -eq 'NoteProperty' }).Name
+ $Locationparamoutputvalue = $templateContent.parameters.location.defaultValue
+ $Locationparamoutput = $templateContent.parameters.keys
if ($Locationparamoutput -contains 'Location') {
if ($Locationparamoutputvalue -eq '[resourceGroup().Location]' -or $Locationparamoutputvalue -eq 'global') {
$LocationFlag = $true
@@ -612,24 +612,24 @@ Describe 'Deployment template tests' -Tag Template {
It "[] All resources that have a Location property should refer to the Location parameter 'parameters('Location')'" -TestCases $deploymentFolderTestCasesException {
param(
$moduleFolderNameException,
- $templateContentException
+ $templateContent
)
$LocationParamFlag = @()
$Locmandoutput = $templateContent.resources
foreach ($Locmand in $Locmandoutput) {
- if (($Locmand | Get-Member | Where-Object { $_.MemberType -eq 'NoteProperty' }).Name -contains 'Location' -and $Locmand.Location -eq "[parameters('Location')]") {
+ if ($Locmand.Keys -contains 'Location' -and $Locmand.Location -eq "[parameters('Location')]") {
$LocationParamFlag += $true
- } elseif (($Locmand | Get-Member | Where-Object { $_.MemberType -eq 'NoteProperty' }).Name -notcontains 'Location') {
+ } elseif ($Locmand.Keys -notcontains 'Location') {
$LocationParamFlag += $true
- } elseif (($Locmand | Get-Member | Where-Object { $_.MemberType -eq 'NoteProperty' }).Name -notcontains 'resourceGroup') {
+ } elseif ($Locmand.Keys -notcontains 'resourceGroup') {
$LocationParamFlag += $true
} else {
$LocationParamFlag += $false
}
foreach ($Locm in $Locmand.resources) {
- if (($Locm | Get-Member | Where-Object { $_.MemberType -eq 'NoteProperty' }).Name -contains 'Location' -and $Locm.Location -eq "[parameters('Location')]") {
+ if ($Locm.Keys -contains 'Location' -and $Locm.Location -eq "[parameters('Location')]") {
$LocationParamFlag += $true
- } elseif (($Locm | Get-Member | Where-Object { $_.MemberType -eq 'NoteProperty' }).Name -notcontains 'Location') {
+ } elseif ($Locm.Keys -notcontains 'Location') {
$LocationParamFlag += $true
} else {
$LocationParamFlag += $false
@@ -676,7 +676,7 @@ Describe 'Deployment template tests' -Tag Template {
}
$ParamDescriptionFlag = @()
- $Paramdescoutput = ($templateContent.parameters | Get-Member | Where-Object { $_.MemberType -eq 'NoteProperty' }).Name
+ $Paramdescoutput = $templateContent.parameters.keys
foreach ($Param in $Paramdescoutput) {
$Data = ($templateContent.parameters.$Param.metadata).description
if ($Data -like 'Optional. [a-zA-Z]*' -or $Data -like 'Required. [a-zA-Z]*' -or $Data -like 'Generated. [a-zA-Z]*') {
diff --git a/arm/Microsoft.AnalysisServices/servers/.parameters/min.parameters.json b/arm/Microsoft.AnalysisServices/servers/.parameters/min.parameters.json
new file mode 100644
index 0000000000..c5ac3e471b
--- /dev/null
+++ b/arm/Microsoft.AnalysisServices/servers/.parameters/min.parameters.json
@@ -0,0 +1,9 @@
+{
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
+ "contentVersion": "1.0.0.0",
+ "parameters": {
+ "analysisServicesName": {
+ "value": "sxxazasweux003"
+ }
+ }
+}
diff --git a/arm/Microsoft.Compute/virtualMachines/.parameters/min.parameters.json b/arm/Microsoft.Compute/virtualMachines/.parameters/min.parameters.json
new file mode 100644
index 0000000000..cb456b2c63
--- /dev/null
+++ b/arm/Microsoft.Compute/virtualMachines/.parameters/min.parameters.json
@@ -0,0 +1,53 @@
+{
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
+ "contentVersion": "1.0.0.0",
+ "parameters": {
+ "virtualMachineName": {
+ "value": "sxx-vm-002"
+ },
+ "osDisk": {
+ "value": {
+ "createOption": "fromImage",
+ "diskSizeGB": "128",
+ "managedDisk": {
+ "storageAccountType": "Premium_LRS"
+ }
+ }
+ },
+ "imageReference": {
+ "value": {
+ "publisher": "MicrosoftWindowsServer",
+ "offer": "WindowsServer",
+ "sku": "2016-Datacenter",
+ "version": "latest"
+ }
+ },
+ "adminUsername": {
+ "value": "localAdminUser"
+ },
+ "adminPassword": {
+ "reference": {
+ "keyVault": {
+ "id": "/subscriptions/<>/resourceGroups/validation-rg/providers/Microsoft.KeyVault/vaults/adp-sxx-az-kv-x-001"
+ },
+ "secretName": "adminPassword"
+ }
+ },
+ "nicConfigurations": {
+ "value": [
+ {
+ "nicSuffix": "-nic-01",
+ "ipConfigurations": [
+ {
+ "name": "ipconfig01",
+ "subnetId": "/subscriptions/<>/resourceGroups/validation-rg/providers/Microsoft.Network/virtualNetworks/adp-sxx-az-vnet-x-001/subnets/sxx-az-subnet-x-001",
+ "pipConfiguration": {
+ "publicIpNameSuffix": "-pip-01"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+}
diff --git a/arm/Microsoft.Compute/virtualMachines/deploy.bicep b/arm/Microsoft.Compute/virtualMachines/deploy.bicep
index ebe778a4f2..fd6a259fd6 100644
--- a/arm/Microsoft.Compute/virtualMachines/deploy.bicep
+++ b/arm/Microsoft.Compute/virtualMachines/deploy.bicep
@@ -8,8 +8,8 @@ param vmComputerNamesTransformation string = 'none'
@description('Optional. Specifies the size for the VMs')
param vmSize string = 'Standard_D2s_v3'
-@description('Optional. OS image reference. In case of marketplace images, it\'s the combination of the publisher, offer, sku, version attributes. In case of custom images it\'s the resource ID of the custom image.')
-param imageReference object = {}
+@description('Required. OS image reference. In case of marketplace images, it\'s the combination of the publisher, offer, sku, version attributes. In case of custom images it\'s the resource ID of the custom image.')
+param imageReference object
@description('Optional. Specifies information about the marketplace image used to create the virtual machine. This element is only used for marketplace images. Before you can use a marketplace image from an API, you must enable the image for programmatic use.')
param plan object = {}
diff --git a/arm/Microsoft.Compute/virtualMachines/readme.md b/arm/Microsoft.Compute/virtualMachines/readme.md
index 63ab44545c..66053f38bf 100644
--- a/arm/Microsoft.Compute/virtualMachines/readme.md
+++ b/arm/Microsoft.Compute/virtualMachines/readme.md
@@ -61,7 +61,7 @@ This module deploys one Virtual Machine with one or multiple nics and optionally
| `eventHubAuthorizationRuleId` | string | | | Optional. Resource ID of the event hub authorization rule for the Event Hubs namespace in which the event hub should be created or streamed to. |
| `eventHubName` | string | | | Optional. Name of the event hub within the namespace to which logs are streamed. Without this, an event hub is created for each log category. |
| `forceUpdateTag` | string | `1.0` | | Optional. Pass in an unique value like a GUID everytime the operation needs to be force run |
-| `imageReference` | object | `{object}` | | Optional. OS image reference. In case of marketplace images, it's the combination of the publisher, offer, sku, version attributes. In case of custom images it's the resource ID of the custom image. |
+| `imageReference` | object | `{object}` | | Required. OS image reference. In case of marketplace images, it's the combination of the publisher, offer, sku, version attributes. In case of custom images it's the resource ID of the custom image. |
| `licenseType` | string | | `[Windows_Client, Windows_Server, ]` | Optional. Specifies that the image or disk that is being used was licensed on-premises. This element is only used for images that contain the Windows Server operating system. |
| `linuxConfiguration` | object | `{object}` | | Optional. Specifies the Linux operating system settings on the virtual machine. |
| `location` | string | `[resourceGroup().location]` | | Optional. Location for all resources. |
diff --git a/arm/README.md b/arm/README.md
index 22528ebc33..2dd542c49a 100644
--- a/arm/README.md
+++ b/arm/README.md
@@ -6,95 +6,95 @@ The following table provides you with an outline of all Modules that are current
| Name | Provider namespace | Resource Type |
| - | - | - |
-| [Analysis Services](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.AnalysisServices/servers) | `MS.AnalysisServices` | [servers](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.AnalysisServices/servers) |
-| [Api Management](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/service) | `MS.ApiManagement` | [service](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/service) |
-| [Api Management Service Apis](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/apis) | | [service/apis](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/apis) |
-| [Api Management Service Authorization Servers](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/authorizationServers) | | [service/authorizationServers](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/authorizationServers) |
-| [Api Management Service Backends](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/backends) | | [service/backends](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/backends) |
-| [Api Management Service Cache](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/caches) | | [service/caches](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/caches) |
-| [Api Management Service Named Values](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/namedValues) | | [service/namedValues](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/namedValues) |
-| [Api Management Service Products](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/products) | | [service/products](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/products) |
-| [Api Management Subscriptions](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/subscriptions) | | [service/subscriptions](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/subscriptions) |
-| [PolicyAssignment](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/policyAssignments) | `MS.Authorization` | [policyAssignments](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/policyAssignments) |
-| [PolicyDefinition](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/policyDefinitions) | | [policyDefinitions](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/policyDefinitions) |
-| [PolicyExemption](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/policyExemptions) | | [policyExemptions](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/policyExemptions) |
-| [policySetDefinition](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/policySetDefinitions) | | [policySetDefinitions](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/policySetDefinitions) |
-| [Role Assignments](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/roleAssignments) | | [roleAssignments](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/roleAssignments) |
-| [Role Definitions](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/roleDefinitions) | | [roleDefinitions](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/roleDefinitions) |
-| [AutoManage](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Automanage/accounts) | `MS.Automanage` | [accounts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Automanage/accounts) |
-| [Automation Accounts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Automation/automationAccounts) | `MS.Automation` | [automationAccounts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Automation/automationAccounts) |
-| [Software Update Configuration](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Automation/automationAccountsResources/softwareUpdateConfigurations) | | [automationAccounts/softwareUpdateConfigurations](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Automation/automationAccountsResources/softwareUpdateConfigurations) |
-| [Batch Accounts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Batch/batchAccounts) | `MS.Batch` | [batchAccounts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Batch/batchAccounts) |
-| [CognitiveServices](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.CognitiveServices/accounts) | `MS.CognitiveServices` | [accounts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.CognitiveServices/accounts) |
-| [AvailabilitySet](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/availabilitySets) | `MS.Compute` | [availabilitySets](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/availabilitySets) |
-| [DiskEncryptionSet](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/diskEncryptionSets) | | [diskEncryptionSets](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/diskEncryptionSets) |
-| [Shared Image Gallery](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/galleries) | | [galleries](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/galleries) |
-| [Shared Image Definition](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/galleriesResources/images) | | [galleries/images](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/galleriesResources/images) |
-| [Image](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/images) | | [images](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/images) |
-| [ProximityPlacementGroup](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/proximityPlacementGroups) | | [proximityPlacementGroups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/proximityPlacementGroups) |
-| [Virtual Machines](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/virtualMachines) | | [virtualMachines](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/virtualMachines) |
-| [Virtual Machine Scale Sets](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/virtualMachineScaleSets) | | [virtualMachineScaleSets](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/virtualMachineScaleSets) |
-| [Budgets](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Consumption/budgets) | `MS.Consumption` | [budgets](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Consumption/budgets) |
-| [ContainerInstances](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ContainerInstance/containerGroups) | `MS.ContainerInstance` | [containerGroups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ContainerInstance/containerGroups) |
-| [ContainerRegistry](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ContainerRegistry/registries) | `MS.ContainerRegistry` | [registries](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ContainerRegistry/registries) |
-| [AzureKubernetesService](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ContainerService/managedClusters) | `MS.ContainerService` | [managedClusters](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ContainerService/managedClusters) |
-| [Azure Databricks](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Databricks/workspaces) | `MS.Databricks` | [workspaces](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Databricks/workspaces) |
-| [DataFactory](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.DataFactory/factories) | `MS.DataFactory` | [factories](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.DataFactory/factories) |
-| [AVD Application Groups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/applicationgroups) | `MS.DesktopVirtualization` | [applicationgroups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/applicationgroups) |
-| [AVD HostPools](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/hostpools) | | [hostpools](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/hostpools) |
-| [AVD Workspaces](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/workspaces) | | [workspaces](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/workspaces) |
-| [DocumentDB Database Account](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.DocumentDB/databaseAccounts) | `MS.DocumentDB` | [databaseAccounts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.DocumentDB/databaseAccounts) |
-| [Event Grid](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.EventGrid/topics) | `MS.EventGrid` | [topics](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.EventGrid/topics) |
-| [EventHub Namespace](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.EventHub/namespaces) | `MS.EventHub` | [namespaces](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.EventHub/namespaces) |
-| [Azure Health Bot](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.HealthBot/healthBots) | `MS.HealthBot` | [healthBots](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.HealthBot/healthBots) |
-| [Action Group](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/actionGroups) | `MS.Insights` | [actionGroups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/actionGroups) |
-| [Activity Log Alert](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/activityLogAlerts) | | [activityLogAlerts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/activityLogAlerts) |
-| [Application Insights](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/components) | | [components](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/components) |
-| [ActivityLog](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/diagnosticSettings) | | [diagnosticSettings](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/diagnosticSettings) |
-| [Metric Alert](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/metricAlerts) | | [metricAlerts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/metricAlerts) |
-| [Azure Monitor Private Link Scope](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/privateLinkScopes) | | [privateLinkScopes](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/privateLinkScopes) |
-| [Scheduled Query Rules](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/scheduledQueryRules) | | [scheduledQueryRules](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/scheduledQueryRules) |
-| [KeyVault](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.KeyVault/vaults) | `MS.KeyVault` | [vaults](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.KeyVault/vaults) |
-| [LogicApp](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Logic/workflows) | `MS.Logic` | [workflows](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Logic/workflows) |
-| [Machine Learning Services](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.MachineLearningServices/workspaces) | `MS.achineLearningServices` | [workspaces](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.MachineLearningServices/workspaces) |
-| [User Assigned Identities](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ManagedIdentity/userAssignedIdentities) | `MS.anagedIdentity` | [userAssignedIdentities](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ManagedIdentity/userAssignedIdentities) |
-| [registrationDefinitions](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ManagedServices/registrationDefinitions) | `MS.anagedServices` | [registrationDefinitions](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ManagedServices/registrationDefinitions) |
-| [Management groups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Management/managementGroups) | `MS.anagement` | [managementGroups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Management/managementGroups) |
-| [AzureNetAppFiles](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.NetApp/netAppAccounts) | `MS.NetApp` | [netAppAccounts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.NetApp/netAppAccounts) |
-| [ApplicationGateway](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/applicationGateways) | `MS.Network` | [applicationGateways](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/applicationGateways) |
-| [ApplicationSecurityGroups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/applicationSecurityGroups) | | [applicationSecurityGroups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/applicationSecurityGroups) |
-| [AzureFirewall](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/azureFirewalls) | | [azureFirewalls](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/azureFirewalls) |
-| [AzureBastion](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/bastionHosts) | | [bastionHosts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/bastionHosts) |
-| [VirtualNetworkGatewayConnection](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/connections) | | [connections](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/connections) |
-| [DDoS Protection Plans](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/ddosProtectionPlans) | | [ddosProtectionPlans](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/ddosProtectionPlans) |
-| [ExpressRoute Circuit](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/expressRouteCircuits) | | [expressRouteCircuits](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/expressRouteCircuits) |
-| [IP Groups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/ipGroups) | | [ipGroups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/ipGroups) |
-| [LoadBalancer](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/loadBalancers) | | [loadBalancers](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/loadBalancers) |
-| [Local Network Gateway](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/localNetworkGateways) | | [localNetworkGateways](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/localNetworkGateways) |
-| [NAT Gateway](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/natGateways) | | [natGateways](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/natGateways) |
-| [NetworkSecurityGroups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/networkSecurityGroups) | | [networkSecurityGroups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/networkSecurityGroups) |
-| [Network Watcher](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/networkWatchers) | | [networkWatchers](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/networkWatchers) |
-| [PrivateDnsZones](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/privateDnsZones) | | [privateDnsZones](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/privateDnsZones) |
-| [PrivateEndpoints](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/privateEndpoints) | | [privateEndpoints](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/privateEndpoints) |
-| [Public IP Addresses](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/publicIPAddresses) | | [publicIPAddresses](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/publicIPAddresses) |
-| [Public IP Prefixes](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/publicIPPrefixes) | | [publicIPPrefixes](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/publicIPPrefixes) |
-| [RouteTables](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/routeTables) | | [routeTables](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/routeTables) |
-| [TrafficManager](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/trafficmanagerprofiles) | | [trafficmanagerprofiles](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/trafficmanagerprofiles) |
-| [VirtualNetworkGateway](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/virtualNetworkGateways) | | [virtualNetworkGateways](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/virtualNetworkGateways) |
-| [Virtual Network](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/virtualNetworks) | | [virtualNetworks](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/virtualNetworks) |
-| [Virtual Wan](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/virtualWans) | | [virtualWans](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/virtualWans) |
-| [LogAnalytics](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.OperationalInsights/workspaces) | `MS.OperationalInsights` | [workspaces](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.OperationalInsights/workspaces) |
-| [RecoveryServicesVaults](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.RecoveryServices/vaults) | `MS.RecoveryServices` | [vaults](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.RecoveryServices/vaults) |
-| [Deployment Scripts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Resources/deploymentScripts) | `MS.Resources` | [deploymentScripts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Resources/deploymentScripts) |
-| [Resource Group](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Resources/resourceGroups) | | [resourceGroups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Resources/resourceGroups) |
-| [AzureSecurityCenter](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Security/azureSecurityCenter) | `MS.Security` | [azureSecurityCenter](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Security/azureSecurityCenter) |
-| [ServiceBusNamespaces](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ServiceBus/namespaces) | `MS.ServiceBus` | [namespaces](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ServiceBus/namespaces) |
-| [SQL Managed Instances](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Sql/managedInstances) | `MS.Sql` | [managedInstances](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Sql/managedInstances) |
-| [SQL Managed Instances Database](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Sql/managedInstancesResources/databases) | | [managedInstances/databases](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Sql/managedInstancesResources/databases) |
-| [AzureSQLServer](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Sql/servers) | | [servers](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Sql/servers) |
-| [StorageAccounts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Storage/storageAccounts) | `MS.Storage` | [storageAccounts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Storage/storageAccounts) |
-| [Image Templates](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.VirtualMachineImages/imageTemplates) | `MS.VirtualMachineImages` | [imageTemplates](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.VirtualMachineImages/imageTemplates) |
-| [API Connection](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Web/connections) | `MS.Web` | [connections](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Web/connections) |
-| [App Service Environment](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Web/hostingEnvironments) | | [hostingEnvironments](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Web/hostingEnvironments) |
-| [AppServicePlan](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Web/serverfarms) | | [serverfarms](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Web/serverfarms) |
-| [Web/Function App](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Web/sites) | | [sites](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Web/sites) |
+| [Analysis Services](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.AnalysisServices/servers) | `MS.AnalysisServices` | [servers](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.AnalysisServices/servers) |
+| [Api Management](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/service) | `MS.ApiManagement` | [service](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/service) |
+| [Api Management Service Apis](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/apis) | | [service/apis](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/apis) |
+| [Api Management Service Authorization Servers](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/authorizationServers) | | [service/authorizationServers](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/authorizationServers) |
+| [Api Management Service Backends](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/backends) | | [service/backends](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/backends) |
+| [Api Management Service Cache](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/caches) | | [service/caches](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/caches) |
+| [Api Management Service Named Values](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/namedValues) | | [service/namedValues](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/namedValues) |
+| [Api Management Service Products](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/products) | | [service/products](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/products) |
+| [Api Management Subscriptions](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/subscriptions) | | [service/subscriptions](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/subscriptions) |
+| [PolicyAssignment](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/policyAssignments) | `MS.Authorization` | [policyAssignments](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/policyAssignments) |
+| [PolicyDefinition](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/policyDefinitions) | | [policyDefinitions](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/policyDefinitions) |
+| [PolicyExemption](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/policyExemptions) | | [policyExemptions](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/policyExemptions) |
+| [policySetDefinition](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/policySetDefinitions) | | [policySetDefinitions](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/policySetDefinitions) |
+| [Role Assignments](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/roleAssignments) | | [roleAssignments](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/roleAssignments) |
+| [Role Definitions](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/roleDefinitions) | | [roleDefinitions](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/roleDefinitions) |
+| [AutoManage](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Automanage/accounts) | `MS.Automanage` | [accounts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Automanage/accounts) |
+| [AutomationAccounts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Automation/automationAccounts) | `MS.Automation` | [automationAccounts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Automation/automationAccounts) |
+| [Software Update Configuration](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Automation/automationAccountsResources/softwareUpdateConfigurations) | | [automationAccounts/softwareUpdateConfigurations](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Automation/automationAccountsResources/softwareUpdateConfigurations) |
+| [Batch Accounts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Batch/batchAccounts) | `MS.Batch` | [batchAccounts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Batch/batchAccounts) |
+| [CognitiveServices](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.CognitiveServices/accounts) | `MS.CognitiveServices` | [accounts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.CognitiveServices/accounts) |
+| [AvailabilitySet](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/availabilitySets) | `MS.Compute` | [availabilitySets](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/availabilitySets) |
+| [DiskEncryptionSet](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/diskEncryptionSets) | | [diskEncryptionSets](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/diskEncryptionSets) |
+| [Shared Image Gallery](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/galleries) | | [galleries](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/galleries) |
+| [Shared Image Definition](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/galleriesResources/images) | | [galleries/images](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/galleriesResources/images) |
+| [Image](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/images) | | [images](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/images) |
+| [ProximityPlacementGroup](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/proximityPlacementGroups) | | [proximityPlacementGroups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/proximityPlacementGroups) |
+| [Virtual Machines](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/virtualMachines) | | [virtualMachines](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/virtualMachines) |
+| [Virtual Machine Scale Sets](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/virtualMachineScaleSets) | | [virtualMachineScaleSets](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/virtualMachineScaleSets) |
+| [Budgets](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Consumption/budgets) | `MS.Consumption` | [budgets](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Consumption/budgets) |
+| [ContainerInstances](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ContainerInstance/containerGroups) | `MS.ContainerInstance` | [containerGroups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ContainerInstance/containerGroups) |
+| [ContainerRegistry](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ContainerRegistry/registries) | `MS.ContainerRegistry` | [registries](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ContainerRegistry/registries) |
+| [AzureKubernetesService](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ContainerService/managedClusters) | `MS.ContainerService` | [managedClusters](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ContainerService/managedClusters) |
+| [Azure Databricks](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Databricks/workspaces) | `MS.Databricks` | [workspaces](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Databricks/workspaces) |
+| [DataFactory](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.DataFactory/factories) | `MS.DataFactory` | [factories](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.DataFactory/factories) |
+| [AVD Application Groups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/applicationgroups) | `MS.DesktopVirtualization` | [applicationgroups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/applicationgroups) |
+| [AVD HostPools](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/hostpools) | | [hostpools](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/hostpools) |
+| [AVD Workspaces](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/workspaces) | | [workspaces](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/workspaces) |
+| [DocumentDB Database Account](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.DocumentDB/databaseAccounts) | `MS.DocumentDB` | [databaseAccounts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.DocumentDB/databaseAccounts) |
+| [Event Grid](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.EventGrid/topics) | `MS.EventGrid` | [topics](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.EventGrid/topics) |
+| [EventHub Namespace](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.EventHub/namespaces) | `MS.EventHub` | [namespaces](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.EventHub/namespaces) |
+| [Azure Health Bot](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.HealthBot/healthBots) | `MS.HealthBot` | [healthBots](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.HealthBot/healthBots) |
+| [Action Group](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/actionGroups) | `MS.Insights` | [actionGroups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/actionGroups) |
+| [Activity Log Alert](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/activityLogAlerts) | | [activityLogAlerts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/activityLogAlerts) |
+| [Application Insights](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/components) | | [components](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/components) |
+| [ActivityLog](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/diagnosticSettings) | | [diagnosticSettings](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/diagnosticSettings) |
+| [Metric Alert](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/metricAlerts) | | [metricAlerts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/metricAlerts) |
+| [Azure Monitor Private Link Scope](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/privateLinkScopes) | | [privateLinkScopes](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/privateLinkScopes) |
+| [Scheduled Query Rules](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/scheduledQueryRules) | | [scheduledQueryRules](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/scheduledQueryRules) |
+| [KeyVault](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.KeyVault/vaults) | `MS.KeyVault` | [vaults](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.KeyVault/vaults) |
+| [LogicApp](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Logic/workflows) | `MS.Logic` | [workflows](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Logic/workflows) |
+| [Machine Learning Services](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.MachineLearningServices/workspaces) | `MS.achineLearningServices` | [workspaces](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.MachineLearningServices/workspaces) |
+| [User Assigned Identities](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ManagedIdentity/userAssignedIdentities) | `MS.anagedIdentity` | [userAssignedIdentities](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ManagedIdentity/userAssignedIdentities) |
+| [registrationDefinitions](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ManagedServices/registrationDefinitions) | `MS.anagedServices` | [registrationDefinitions](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ManagedServices/registrationDefinitions) |
+| [Management groups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Management/managementGroups) | `MS.anagement` | [managementGroups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Management/managementGroups) |
+| [AzureNetAppFiles](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.NetApp/netAppAccounts) | `MS.NetApp` | [netAppAccounts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.NetApp/netAppAccounts) |
+| [ApplicationGateway](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/applicationGateways) | `MS.Network` | [applicationGateways](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/applicationGateways) |
+| [ApplicationSecurityGroups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/applicationSecurityGroups) | | [applicationSecurityGroups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/applicationSecurityGroups) |
+| [AzureFirewall](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/azureFirewalls) | | [azureFirewalls](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/azureFirewalls) |
+| [AzureBastion](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/bastionHosts) | | [bastionHosts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/bastionHosts) |
+| [VirtualNetworkGatewayConnection](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/connections) | | [connections](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/connections) |
+| [DDoS Protection Plans](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/ddosProtectionPlans) | | [ddosProtectionPlans](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/ddosProtectionPlans) |
+| [ExpressRoute Circuit](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/expressRouteCircuits) | | [expressRouteCircuits](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/expressRouteCircuits) |
+| [IP Groups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/ipGroups) | | [ipGroups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/ipGroups) |
+| [LoadBalancer](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/loadBalancers) | | [loadBalancers](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/loadBalancers) |
+| [Local Network Gateway](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/localNetworkGateways) | | [localNetworkGateways](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/localNetworkGateways) |
+| [NAT Gateway](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/natGateways) | | [natGateways](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/natGateways) |
+| [NetworkSecurityGroups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/networkSecurityGroups) | | [networkSecurityGroups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/networkSecurityGroups) |
+| [Network Watcher](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/networkWatchers) | | [networkWatchers](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/networkWatchers) |
+| [PrivateDnsZones](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/privateDnsZones) | | [privateDnsZones](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/privateDnsZones) |
+| [PrivateEndpoints](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/privateEndpoints) | | [privateEndpoints](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/privateEndpoints) |
+| [Public IP Addresses](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/publicIPAddresses) | | [publicIPAddresses](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/publicIPAddresses) |
+| [Public IP Prefixes](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/publicIPPrefixes) | | [publicIPPrefixes](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/publicIPPrefixes) |
+| [RouteTables](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/routeTables) | | [routeTables](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/routeTables) |
+| [TrafficManager](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/trafficmanagerprofiles) | | [trafficmanagerprofiles](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/trafficmanagerprofiles) |
+| [VirtualNetworkGateway](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/virtualNetworkGateways) | | [virtualNetworkGateways](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/virtualNetworkGateways) |
+| [Virtual Network](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/virtualNetworks) | | [virtualNetworks](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/virtualNetworks) |
+| [Virtual Wan](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/virtualWans) | | [virtualWans](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/virtualWans) |
+| [LogAnalytics](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.OperationalInsights/workspaces) | `MS.OperationalInsights` | [workspaces](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.OperationalInsights/workspaces) |
+| [RecoveryServicesVaults](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.RecoveryServices/vaults) | `MS.RecoveryServices` | [vaults](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.RecoveryServices/vaults) |
+| [Deployment Scripts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Resources/deploymentScripts) | `MS.Resources` | [deploymentScripts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Resources/deploymentScripts) |
+| [Resource Group](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Resources/resourceGroups) | | [resourceGroups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Resources/resourceGroups) |
+| [AzureSecurityCenter](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Security/azureSecurityCenter) | `MS.Security` | [azureSecurityCenter](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Security/azureSecurityCenter) |
+| [ServiceBusNamespaces](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ServiceBus/namespaces) | `MS.ServiceBus` | [namespaces](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ServiceBus/namespaces) |
+| [SQL Managed Instances](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Sql/managedInstances) | `MS.Sql` | [managedInstances](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Sql/managedInstances) |
+| [SQL Managed Instances Database](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Sql/managedInstancesResources/databases) | | [managedInstances/databases](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Sql/managedInstancesResources/databases) |
+| [AzureSQLServer](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Sql/servers) | | [servers](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Sql/servers) |
+| [StorageAccounts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Storage/storageAccounts) | `MS.Storage` | [storageAccounts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Storage/storageAccounts) |
+| [Image Templates](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.VirtualMachineImages/imageTemplates) | `MS.VirtualMachineImages` | [imageTemplates](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.VirtualMachineImages/imageTemplates) |
+| [API Connection](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Web/connections) | `MS.Web` | [connections](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Web/connections) |
+| [App Service Environment](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Web/hostingEnvironments) | | [hostingEnvironments](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Web/hostingEnvironments) |
+| [AppServicePlan](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Web/serverfarms) | | [serverfarms](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Web/serverfarms) |
+| [Web/Function App](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Web/sites) | | [sites](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Web/sites) |
diff --git a/utilities/dependencies/Microsoft.ApiManagement/service/parameters/parameters.json b/utilities/pipelines/dependencies/Microsoft.ApiManagement/service/parameters/parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.ApiManagement/service/parameters/parameters.json
rename to utilities/pipelines/dependencies/Microsoft.ApiManagement/service/parameters/parameters.json
diff --git a/utilities/dependencies/Microsoft.Authorization/roleAssignments/parameters/parameters.json b/utilities/pipelines/dependencies/Microsoft.Authorization/roleAssignments/parameters/parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Authorization/roleAssignments/parameters/parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Authorization/roleAssignments/parameters/parameters.json
diff --git a/utilities/dependencies/Microsoft.Compute/galleries/parameters/parameters.json b/utilities/pipelines/dependencies/Microsoft.Compute/galleries/parameters/parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Compute/galleries/parameters/parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Compute/galleries/parameters/parameters.json
diff --git a/utilities/dependencies/Microsoft.Compute/galleriesResources/images/parameters/parameters.json b/utilities/pipelines/dependencies/Microsoft.Compute/galleriesResources/images/parameters/parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Compute/galleriesResources/images/parameters/parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Compute/galleriesResources/images/parameters/parameters.json
diff --git a/utilities/dependencies/Microsoft.Compute/virtualMachines/parameters/parameters.json b/utilities/pipelines/dependencies/Microsoft.Compute/virtualMachines/parameters/parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Compute/virtualMachines/parameters/parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Compute/virtualMachines/parameters/parameters.json
diff --git a/utilities/dependencies/Microsoft.ContainerRegistry/registries/parameters/parameters.json b/utilities/pipelines/dependencies/Microsoft.ContainerRegistry/registries/parameters/parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.ContainerRegistry/registries/parameters/parameters.json
rename to utilities/pipelines/dependencies/Microsoft.ContainerRegistry/registries/parameters/parameters.json
diff --git a/utilities/dependencies/Microsoft.DesktopVirtualization/applicationgroups/parameters/parameters.json b/utilities/pipelines/dependencies/Microsoft.DesktopVirtualization/applicationgroups/parameters/parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.DesktopVirtualization/applicationgroups/parameters/parameters.json
rename to utilities/pipelines/dependencies/Microsoft.DesktopVirtualization/applicationgroups/parameters/parameters.json
diff --git a/utilities/dependencies/Microsoft.DesktopVirtualization/hostpools/parameters/parameters.json b/utilities/pipelines/dependencies/Microsoft.DesktopVirtualization/hostpools/parameters/parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.DesktopVirtualization/hostpools/parameters/parameters.json
rename to utilities/pipelines/dependencies/Microsoft.DesktopVirtualization/hostpools/parameters/parameters.json
diff --git a/utilities/dependencies/Microsoft.EventHub/namespaces/parameters/parameters.json b/utilities/pipelines/dependencies/Microsoft.EventHub/namespaces/parameters/parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.EventHub/namespaces/parameters/parameters.json
rename to utilities/pipelines/dependencies/Microsoft.EventHub/namespaces/parameters/parameters.json
diff --git a/utilities/dependencies/Microsoft.EventHub/namespacesResources/eventhubs/parameters/parameters.json b/utilities/pipelines/dependencies/Microsoft.EventHub/namespacesResources/eventhubs/parameters/parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.EventHub/namespacesResources/eventhubs/parameters/parameters.json
rename to utilities/pipelines/dependencies/Microsoft.EventHub/namespacesResources/eventhubs/parameters/parameters.json
diff --git a/utilities/dependencies/Microsoft.Insights/actionGroups/parameters/parameters.json b/utilities/pipelines/dependencies/Microsoft.Insights/actionGroups/parameters/parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Insights/actionGroups/parameters/parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Insights/actionGroups/parameters/parameters.json
diff --git a/utilities/dependencies/Microsoft.Insights/components/parameters/parameters.json b/utilities/pipelines/dependencies/Microsoft.Insights/components/parameters/parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Insights/components/parameters/parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Insights/components/parameters/parameters.json
diff --git a/utilities/dependencies/Microsoft.KeyVault/vaults/parameters/parameters.json b/utilities/pipelines/dependencies/Microsoft.KeyVault/vaults/parameters/parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.KeyVault/vaults/parameters/parameters.json
rename to utilities/pipelines/dependencies/Microsoft.KeyVault/vaults/parameters/parameters.json
diff --git a/utilities/dependencies/Microsoft.KeyVault/vaults/parameters/platform.parameters.json b/utilities/pipelines/dependencies/Microsoft.KeyVault/vaults/parameters/platform.parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.KeyVault/vaults/parameters/platform.parameters.json
rename to utilities/pipelines/dependencies/Microsoft.KeyVault/vaults/parameters/platform.parameters.json
diff --git a/utilities/dependencies/Microsoft.ManagedIdentity/userAssignedIdentities/parameters/parameters.json b/utilities/pipelines/dependencies/Microsoft.ManagedIdentity/userAssignedIdentities/parameters/parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.ManagedIdentity/userAssignedIdentities/parameters/parameters.json
rename to utilities/pipelines/dependencies/Microsoft.ManagedIdentity/userAssignedIdentities/parameters/parameters.json
diff --git a/utilities/dependencies/Microsoft.Network/applicationSecurityGroups/parameters/parameters.json b/utilities/pipelines/dependencies/Microsoft.Network/applicationSecurityGroups/parameters/parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Network/applicationSecurityGroups/parameters/parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Network/applicationSecurityGroups/parameters/parameters.json
diff --git a/utilities/dependencies/Microsoft.Network/networkSecurityGroups/parameters/apgw.parameters.json b/utilities/pipelines/dependencies/Microsoft.Network/networkSecurityGroups/parameters/apgw.parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Network/networkSecurityGroups/parameters/apgw.parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Network/networkSecurityGroups/parameters/apgw.parameters.json
diff --git a/utilities/dependencies/Microsoft.Network/networkSecurityGroups/parameters/ase.parameters.json b/utilities/pipelines/dependencies/Microsoft.Network/networkSecurityGroups/parameters/ase.parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Network/networkSecurityGroups/parameters/ase.parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Network/networkSecurityGroups/parameters/ase.parameters.json
diff --git a/utilities/dependencies/Microsoft.Network/networkSecurityGroups/parameters/bastion.parameters.json b/utilities/pipelines/dependencies/Microsoft.Network/networkSecurityGroups/parameters/bastion.parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Network/networkSecurityGroups/parameters/bastion.parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Network/networkSecurityGroups/parameters/bastion.parameters.json
diff --git a/utilities/dependencies/Microsoft.Network/networkSecurityGroups/parameters/parameters.json b/utilities/pipelines/dependencies/Microsoft.Network/networkSecurityGroups/parameters/parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Network/networkSecurityGroups/parameters/parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Network/networkSecurityGroups/parameters/parameters.json
diff --git a/utilities/dependencies/Microsoft.Network/networkSecurityGroups/parameters/sqlmi.parameters.json b/utilities/pipelines/dependencies/Microsoft.Network/networkSecurityGroups/parameters/sqlmi.parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Network/networkSecurityGroups/parameters/sqlmi.parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Network/networkSecurityGroups/parameters/sqlmi.parameters.json
diff --git a/utilities/dependencies/Microsoft.Network/networkWatchers/parameters/parameters.json b/utilities/pipelines/dependencies/Microsoft.Network/networkWatchers/parameters/parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Network/networkWatchers/parameters/parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Network/networkWatchers/parameters/parameters.json
diff --git a/utilities/dependencies/Microsoft.Network/privateDnsZones/parameters/parameters.json b/utilities/pipelines/dependencies/Microsoft.Network/privateDnsZones/parameters/parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Network/privateDnsZones/parameters/parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Network/privateDnsZones/parameters/parameters.json
diff --git a/utilities/dependencies/Microsoft.Network/publicIPAddresses/parameters/apgw.parameters.json b/utilities/pipelines/dependencies/Microsoft.Network/publicIPAddresses/parameters/apgw.parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Network/publicIPAddresses/parameters/apgw.parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Network/publicIPAddresses/parameters/apgw.parameters.json
diff --git a/utilities/dependencies/Microsoft.Network/publicIPAddresses/parameters/bas.parameters.json b/utilities/pipelines/dependencies/Microsoft.Network/publicIPAddresses/parameters/bas.parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Network/publicIPAddresses/parameters/bas.parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Network/publicIPAddresses/parameters/bas.parameters.json
diff --git a/utilities/dependencies/Microsoft.Network/publicIPAddresses/parameters/lb.parameters.json b/utilities/pipelines/dependencies/Microsoft.Network/publicIPAddresses/parameters/lb.parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Network/publicIPAddresses/parameters/lb.parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Network/publicIPAddresses/parameters/lb.parameters.json
diff --git a/utilities/dependencies/Microsoft.Network/routeTables/parameters/parameters.json b/utilities/pipelines/dependencies/Microsoft.Network/routeTables/parameters/parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Network/routeTables/parameters/parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Network/routeTables/parameters/parameters.json
diff --git a/utilities/dependencies/Microsoft.Network/virtualNetworks/parameters/2.vnetpeer01.parameters.json b/utilities/pipelines/dependencies/Microsoft.Network/virtualNetworks/parameters/2.vnetpeer01.parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Network/virtualNetworks/parameters/2.vnetpeer01.parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Network/virtualNetworks/parameters/2.vnetpeer01.parameters.json
diff --git a/utilities/dependencies/Microsoft.Network/virtualNetworks/parameters/3.vnetpeer02.parameters.json b/utilities/pipelines/dependencies/Microsoft.Network/virtualNetworks/parameters/3.vnetpeer02.parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Network/virtualNetworks/parameters/3.vnetpeer02.parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Network/virtualNetworks/parameters/3.vnetpeer02.parameters.json
diff --git a/utilities/dependencies/Microsoft.Network/virtualNetworks/parameters/4.azfw.parameters.json b/utilities/pipelines/dependencies/Microsoft.Network/virtualNetworks/parameters/4.azfw.parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Network/virtualNetworks/parameters/4.azfw.parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Network/virtualNetworks/parameters/4.azfw.parameters.json
diff --git a/utilities/dependencies/Microsoft.Network/virtualNetworks/parameters/5.aks.parameters.json b/utilities/pipelines/dependencies/Microsoft.Network/virtualNetworks/parameters/5.aks.parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Network/virtualNetworks/parameters/5.aks.parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Network/virtualNetworks/parameters/5.aks.parameters.json
diff --git a/utilities/dependencies/Microsoft.Network/virtualNetworks/parameters/6.sqlmi.parameters.json b/utilities/pipelines/dependencies/Microsoft.Network/virtualNetworks/parameters/6.sqlmi.parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Network/virtualNetworks/parameters/6.sqlmi.parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Network/virtualNetworks/parameters/6.sqlmi.parameters.json
diff --git a/utilities/dependencies/Microsoft.Network/virtualNetworks/parameters/parameters.json b/utilities/pipelines/dependencies/Microsoft.Network/virtualNetworks/parameters/parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Network/virtualNetworks/parameters/parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Network/virtualNetworks/parameters/parameters.json
diff --git a/utilities/dependencies/Microsoft.OperationalInsights/workspaces/parameters/parameters.json b/utilities/pipelines/dependencies/Microsoft.OperationalInsights/workspaces/parameters/parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.OperationalInsights/workspaces/parameters/parameters.json
rename to utilities/pipelines/dependencies/Microsoft.OperationalInsights/workspaces/parameters/parameters.json
diff --git a/utilities/dependencies/Microsoft.RecoveryServices/vaults/parameters/parameters.json b/utilities/pipelines/dependencies/Microsoft.RecoveryServices/vaults/parameters/parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.RecoveryServices/vaults/parameters/parameters.json
rename to utilities/pipelines/dependencies/Microsoft.RecoveryServices/vaults/parameters/parameters.json
diff --git a/utilities/dependencies/Microsoft.Resources/resourceGroups/parameters/artifacts.parameters.json b/utilities/pipelines/dependencies/Microsoft.Resources/resourceGroups/parameters/artifacts.parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Resources/resourceGroups/parameters/artifacts.parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Resources/resourceGroups/parameters/artifacts.parameters.json
diff --git a/utilities/dependencies/Microsoft.Resources/resourceGroups/parameters/platform-core.parameters.json b/utilities/pipelines/dependencies/Microsoft.Resources/resourceGroups/parameters/platform-core.parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Resources/resourceGroups/parameters/platform-core.parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Resources/resourceGroups/parameters/platform-core.parameters.json
diff --git a/utilities/dependencies/Microsoft.Resources/resourceGroups/parameters/validation.parameters.json b/utilities/pipelines/dependencies/Microsoft.Resources/resourceGroups/parameters/validation.parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Resources/resourceGroups/parameters/validation.parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Resources/resourceGroups/parameters/validation.parameters.json
diff --git a/utilities/dependencies/Microsoft.Storage/storageAccounts/parameters/fa.parameters.json b/utilities/pipelines/dependencies/Microsoft.Storage/storageAccounts/parameters/fa.parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Storage/storageAccounts/parameters/fa.parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Storage/storageAccounts/parameters/fa.parameters.json
diff --git a/utilities/dependencies/Microsoft.Storage/storageAccounts/parameters/parameters.json b/utilities/pipelines/dependencies/Microsoft.Storage/storageAccounts/parameters/parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Storage/storageAccounts/parameters/parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Storage/storageAccounts/parameters/parameters.json
diff --git a/utilities/dependencies/Microsoft.Web/serverfarms/parameters/parameters.json b/utilities/pipelines/dependencies/Microsoft.Web/serverfarms/parameters/parameters.json
similarity index 100%
rename from utilities/dependencies/Microsoft.Web/serverfarms/parameters/parameters.json
rename to utilities/pipelines/dependencies/Microsoft.Web/serverfarms/parameters/parameters.json
diff --git a/.github/actions/templates/deployModule/scripts/New-ModuleDeployment.ps1 b/utilities/pipelines/resourceDeployment/New-ModuleDeployment.ps1
similarity index 100%
rename from .github/actions/templates/deployModule/scripts/New-ModuleDeployment.ps1
rename to utilities/pipelines/resourceDeployment/New-ModuleDeployment.ps1
diff --git a/utilities/pipelines/resourcePublish/Initialize-UniversalArtifactPublish.ps1 b/utilities/pipelines/resourcePublish/Initialize-UniversalArtifactPublish.ps1
new file mode 100644
index 0000000000..e68e84c306
--- /dev/null
+++ b/utilities/pipelines/resourcePublish/Initialize-UniversalArtifactPublish.ps1
@@ -0,0 +1,144 @@
+<#
+.SYNOPSIS
+Prepare to publish a module as an universal package to a DevOps artifact feed
+
+.DESCRIPTION
+Prepare to publish a module as an universal package to a DevOps artifact feed
+The function will take evaluate which version should be published based on the provided input parameters (customVersion, versioningOption) and the version currently deployed to the feed
+The customVersion is considered only if it is higher than the latest version deployed to the artifact feed
+Otherwise, one of the provided version options is chosen and applied with the default being 'patch'
+
+The function returns
+- the name of the artifact to publish
+- the version option to be applied if applicable
+- the version to be applied if applicable
+
+.PARAMETER templateFilePath
+Mandatory. Path to the module deployment file from root.
+
+.PARAMETER vstsOrganization
+Mandatory. Name of the organization hosting the artifacts feed.
+
+.PARAMETER vstsProject
+Optional. Name of the project hosting the artifacts feed. May be empty.
+
+.PARAMETER vstsFeedName
+Mandatory. Name to the feed to publish to.
+
+.PARAMETER customVersion
+Optional. A custom version the can be provided as a value in the pipeline file.
+
+.PARAMETER versioningOption
+Optional. A version option that can be specified in the UI. Defaults to 'patch'
+
+.EXAMPLE
+Initialize-UniversalArtifactPublish -templateFilePath 'C:/KeyVault/deploy.json' -vstsOrganization 'servicescode' -vstsProject '$(System.TeamProject)' -vstsFeedName 'Modules' -customVersion '3.0.0'
+
+Try to publish the key vault module with version 3.0.0 to the module feed 'servicescode/$(System.TeamProject)/Modules' based on a value provided in the UI
+
+.EXAMPLE
+Initialize-UniversalArtifactPublish -templateFilePath 'C:/KeyVault/deploy.json' -vstsOrganization 'servicescode' -vstsProject '$(System.TeamProject)' -vstsFeedName 'Modules' -customVersion '1.0.0'
+
+Try to publish the key vault module with version 1.0.0 to the module feed 'servicescode/$(System.TeamProject)/Modules' based on a value provided in the pipeline file
+
+.EXAMPLE
+Initialize-UniversalArtifactPublish -templateFilePath 'C:/KeyVault/deploy.json' -vstsOrganization 'servicescode' -vstsProject '$(System.TeamProject)' -vstsFeedName 'Modules'
+
+Try to publish the next key vault module version to the module feed 'servicescode/$(System.TeamProject)/Modules' based on the default versioning behavior
+#>
+function Initialize-UniversalArtifactPublish {
+
+ [CmdletBinding()]
+ param (
+ [Parameter(Mandatory)]
+ [string] $templateFilePath,
+
+ [Parameter(Mandatory)]
+ [string] $vstsOrganization,
+
+ [Parameter(Mandatory = $false)]
+ [string] $vstsProject = '',
+
+ [Parameter(Mandatory)]
+ [string] $vstsFeedName,
+
+ [Parameter(Mandatory = $false)]
+ [string] $customVersion = '0.0.1',
+
+ [Parameter(Mandatory = $false)]
+ [ValidateSet('Major', 'Minor', 'Patch', 'Custom')]
+ [string] $versioningOption = 'Patch'
+ )
+
+ begin {
+ Write-Debug ('{0} entered' -f $MyInvocation.MyCommand)
+ }
+
+ process {
+ # For function output
+ $resultSet = @{}
+
+ $moduleIdentifier = (Split-Path $templateFilePath -Parent).Replace('\', '/').Split('/arm/')[1]
+ $universalPackageModuleName = $moduleIdentifier.Replace('\', '/').Replace('/', '.').ToLower()
+ $resultSet['universalPackageModuleName'] = $universalPackageModuleName
+
+ #################################
+ ## FIND AVAILABLE VERSION ##
+ #################################
+ try {
+ $head = @{ Authorization = "Bearer $env:TOKEN" }
+ $url = "https://feeds.dev.azure.com/$vstsOrganization/$vstsProject/_apis/packaging/Feeds/$vstsFeedName/packages?packageNameQuery=$universalPackageModuleName&api-version=6.0-preview"
+ $packages = Invoke-RestMethod -Uri $url -Method Get -Headers $head -ContentType application/json
+ if ($packages) {
+ if ($packages.value.id.count -gt 1) {
+ # Handle the case where multiple modules in the feed start with with the same packageName. In this case we have to filter the result of the REST query even further.
+ $packages.value = $packages.value | Where-Object { $_.Name -eq $universalPackageModuleName }
+ }
+
+ $latestFeedVersion = ($packages.value.versions.Where( { $_.isLatest -eq $True })).version
+ Write-Verbose ('Package Id of [{0}] is [{1}]' -f $universalPackageModuleName, $packages.value.Id) -Verbose
+ Write-Verbose "The latest version is [$latestFeedVersion]" -Verbose
+ } else {
+ Write-Verbose "No packages via url [$url] found" -Verbose
+ }
+ } catch {
+ $_
+ }
+
+ ############################
+ ## EVALUATE VERSION ##
+ ############################
+
+ if ([String]::IsNullOrEmpty($latestFeedVersion)) {
+ Write-Verbose ('No version for module [{0}] found in feed [{1}]. Assuming intial publish' -f $universalPackageModuleName, $vstsFeedName) -Verbose
+ $latestFeedVersion = New-Object System.Version('0.0.1')
+ } elseif (-not (([String]::IsNullOrEmpty($customVersion)) -or ([String]::IsNullOrEmpty($latestFeedVersion))) -and ((New-Object System.Version($customVersion)) -gt (New-Object System.Version($latestFeedVersion))) ) {
+ Write-Verbose "A custom version [$customVersion] was specified in the pipeline script and is higher than the current latest. Using it." -Verbose
+ $versioningOption = 'custom'
+ $newVersion = $customVersion
+ } else {
+ Write-Verbose 'No custom version set. Using default versioning.'
+ }
+
+ # Test if mode custom
+ # -------------------
+ if ($versioningOption -eq 'custom') {
+ $newVersionObject = New-Object System.Version($newVersion)
+ $latestFeedVersionObject = New-Object System.Version($latestFeedVersion)
+ if ($newVersionObject -lt $latestFeedVersionObject -or $newVersionObject -eq $latestFeedVersionObject) {
+ throw ('The provided custom version [{0}] must be higher than the current latest version [{1}] published in the artifacts feed [{2}]' -f $newVersionObject.ToString(), $latestFeedVersionObject.ToString(), $vstsFeedName)
+ }
+ Write-Verbose "Using publish version [$newVersionObject]" -Verbose
+ $resultSet['newVersionObject'] = $newVersionObject
+ }
+ Write-Verbose "Using publish mode [$versioningOption]" -Verbose
+ $resultSet['publishingMode'] = $versioningOption
+
+ return $resultSet
+ }
+
+ end {
+ Write-Debug ('{0} exited' -f $MyInvocation.MyCommand)
+
+ }
+}
diff --git a/utilities/pipelines/resourcePublish/Publish-ModuleToNuget.ps1 b/utilities/pipelines/resourcePublish/Publish-ModuleToNuget.ps1
new file mode 100644
index 0000000000..aedad1f602
--- /dev/null
+++ b/utilities/pipelines/resourcePublish/Publish-ModuleToNuget.ps1
@@ -0,0 +1,524 @@
+
+#region functions
+function Set-DefinedPSRepository {
+
+ <#
+.SYNOPSIS
+Add a given repository as a source for modules
+
+.DESCRIPTION
+Add a given repository as a source for modules
+
+.PARAMETER feedurl
+Url to the feed to add
+
+.PARAMETER systemAccessToken
+Access token required to access the feed
+
+.PARAMETER queueById
+Id/Email of the instance that wants to access the feed
+
+.EXAMPLE
+Set-DefinedPSRepository -feedname "Release-Modules" -feedurl $feedurl -systemAccessToken $systemAccessToken -queueById $queueById
+
+Set the feed Release-Modules as a nuget and repo source with the specified credentials
+#>
+
+ [CmdletBinding(SupportsShouldProcess = $true)]
+ param (
+ [Parameter(Mandatory = $true)]
+ [string] $feedname,
+ [Parameter(Mandatory = $true)]
+ [string] $feedurl,
+ [Parameter(Mandatory = $true)]
+ [string] $systemAccessToken,
+ [Parameter(Mandatory = $true)]
+ [PSCredential] $credential,
+ [Parameter(Mandatory = $true)]
+ [string] $queueById
+ )
+
+ Write-Verbose "Register sources with feed-url [$feedurl]"
+
+ Write-Verbose 'Check registerd nuget sources'
+ if ($isLinux) {
+ # Assume linux with dotnet installation
+ $nugetSources = dotnet nuget list source
+ } else {
+ # Assume windows with nuget installation
+ $nugetSources = nuget sources
+ }
+
+ if (-not ("$nugetSources" -Match $feedName)) {
+ if ($PSCmdlet.ShouldProcess("Nuget source definition [$feedname]", 'Add')) {
+ if ($isLinux) {
+ # Assume linux with dotnet installation
+ dotnet nuget add source $feedurl -n $feedName -u $queueById -p $systemAccessToken --store-password-in-clear-text
+ } else {
+ # Assume windows with nuget installation
+ nuget sources add -name $feedname -Source $feedurl -Username $queueById -Password $systemAccessToken
+ }
+ }
+ } else {
+ Write-Verbose "NuGet source $feedname already registered"
+ }
+
+ if ($isLinux) {
+ # Assume linux with dotnet installation
+ dotnet nuget list source # Print registered
+ } else {
+ # Assume windows with nuget installation
+ nuget sources # Print registered
+ }
+
+ Write-Verbose 'Check registered repositories'
+ Import-Module 'PackageManagement' -Verbose:$false # Explicit import to suppress verbose
+ Import-Module 'PowerShellGet' -Verbose:$false # Explicit import to suppress verbose
+ $regRepos = (Get-PSRepository).Name
+ if ($regRepos -notcontains $feedName) {
+ if ($PSCmdlet.ShouldProcess('PSRepository', 'Register new')) {
+ Write-Verbose 'Registering script folder as Nuget repo'
+ $registrationInputObject = @{
+ Name = $feedname
+ SourceLocation = $feedurl
+ PublishLocation = $feedurl
+ Credential = $credential
+ InstallationPolicy = 'Trusted'
+ PackageManagementProvider = 'Nuget'
+ }
+ Register-PSRepository @registrationInputObject
+ Write-Verbose "Repository $feedname registered"
+ }
+ } else {
+ Write-Verbose "Repository $feedname already registered"
+ }
+
+ Write-Verbose ('Available PS repositories:')
+ (Get-PSRepository) | Select-Object Name, SourceLocation | Format-Table
+}
+
+function Confirm-CustomVersionIfSet {
+ <#
+.SYNOPSIS
+Validate if a given custom version is higher than a given current version
+
+.DESCRIPTION
+Validate if a given custom version is higher than a given current version.
+E.g.
+- 0.0.1 > 0.0.2
+- 2.3.5 > 2.1.6
+
+.PARAMETER currentFeedVersion
+The selected custom version that must be higher than the given current version
+
+.PARAMETER currentVersion
+The given current version that must be lower than the selected custom version
+
+.EXAMPLE
+Confirm-CustomVersionIfSet -customVersion "1.0.0" -currentVersion "0.0.15"
+
+Check if the selected version "1.0.0" is valid with regards to the current version "0.0.15"
+#>
+ [CmdletBinding()]
+ [OutputType([System.Boolean])]
+ param (
+ [Parameter(Mandatory = $false)]
+ [string] $customVersion,
+ [Parameter(Mandatory = $true)]
+ [System.Version] $currentFeedVersion
+ )
+
+ # Check CustomVersion if set
+ if ([string]::IsNullOrEmpty($customVersion) -or ($customVersion -eq '-')) {
+ Write-Verbose 'Custom Version not set. Skip check'
+ return;
+ }
+
+ Write-Verbose '### Get custom version'
+ Write-Verbose "Specified version is $customVersion"
+ $singleValues = $customVersion.Split('.')
+ $customBuild = $singleValues[2]
+ $customMinor = $singleValues[1]
+ $customMajor = $singleValues[0]
+
+ $oldBuild = $currentFeedVersion.Build
+ $oldMinor = $currentFeedVersion.Minor
+ $oldMajor = $currentFeedVersion.Major
+
+ Write-Verbose 'Compare Versions'
+ if ($customMajor -gt $oldMajor) {
+ Write-Verbose 'Specified version is valid'
+ return $true
+ } elseif ($customMajor -lt $oldMajor) {
+ throw "Specified major version must not be older than than the existing version: Specified $customVersion > Current $currentFeedVersion"
+ } else {
+ if ($customMinor -gt $oldMinor) {
+ Write-Verbose 'Specified version is valid'
+ return $true
+ } elseif ($customMinor -lt $oldMinor) {
+ throw "Specified minor version must not be older than than the existing version: Specified $customVersion > Current $currentFeedVersion"
+ } else {
+ if ($customBuild -gt $oldBuild) {
+ Write-Verbose 'Specified version is valid'
+ return $true
+ } else {
+ throw "Specified build version must be newer than than the existing version: Specified $customVersion > Current $currentFeedVersion"
+ }
+ }
+ }
+}
+
+function Get-CurrentVersion {
+ <#
+.SYNOPSIS
+Search for a certain module in the given feed to check it's version.
+
+.DESCRIPTION
+Search for a certain module in the given feed to check it's version. If no module can be found, version 0.0.0 is returned
+
+.PARAMETER feedname
+Name of the feed to search in
+
+.PARAMETER moduleName
+Name of the module to search for
+
+.PARAMETER credential
+The credentials required to access the feed
+
+.EXAMPLE
+$currentFeedVersion = Get-CurrentVersion -moduleName "aks" -feedname "moduleFeed" -credential $credential
+
+Search for module AKS in the feed moduleFeed to receive its version
+#>
+ [CmdletBinding()]
+ param (
+ [Parameter(Mandatory = $true)]
+ [string] $feedname,
+ [Parameter(Mandatory = $true)]
+ [string] $moduleName,
+ [Parameter(Mandatory = $true)]
+ [PSCredential] $credential
+ )
+
+ Write-Verbose "Search for module [$moduleName] in feed [$feedname]"
+ try {
+ $module = Find-Module -Name $moduleName -Repository $feedname -Credential $credential
+ return $module.Version
+ } catch {
+ if ($_.Exception.Message -like '*No match was found*') {
+ Write-Verbose "Module $moduleName not found. Assuming first deployment"
+ return New-Object System.Version('0.0.0')
+ } else {
+ throw $_
+ }
+ }
+}
+
+function Get-NewVersion {
+ <#
+.SYNOPSIS
+Get a new version object
+
+.DESCRIPTION
+This function handels different cases:
+- If the custom version is set, it is returned as a version object
+- If the custom version is not set, but the local manifest version is higher than the current feed version, the local manifest version is returned
+- If the custom version is not set, and the feed has the highest available version, this version is increased and returned as a version object
+
+.PARAMETER customVersion
+The optionally set custom version
+
+.PARAMETER versioningOption
+The version update. Patch, Minor or Major.
+
+.PARAMETER currentFeedVersion
+The current version of the module
+
+.PARAMETER moduleBase
+The root folder of the module
+
+.PARAMETER moduleName
+The name of the module
+
+.EXAMPLE
+Get-NewVersion -customVersion '-' -currentFeedVersion 0.0.4 -moduleBase "c:\modules\aks" -moduleName "aks"
+
+If the current manifest version is 1.0.0 the function returns the 1.0.0 version object
+else get the new version 0.0.5
+
+.EXAMPLE
+Get-NewVersion -customVersion 0.0.6 -currentFeedVersion 0.0.4 -moduleBase "c:\modules\aks" -moduleName "aks"
+
+Get the new version 0.0.6
+#>
+ [CmdletBinding()]
+ param (
+ [Parameter(Mandatory = $false)]
+ [string] $customVersion,
+
+ [Parameter(Mandatory = $false)]
+ [ValidateSet('patch', 'minor', 'major')]
+ [string] $versioningOption = 'patch',
+
+ [Parameter(Mandatory = $true)]
+ [version] $currentFeedVersion,
+
+ [Parameter(Mandatory = $true)]
+ [string] $moduleBase,
+
+ [Parameter(Mandatory = $true)]
+ [string] $moduleName
+ )
+
+ $localVersion = (Import-LocalizedData -BaseDirectory "$moduleBase" -FileName "$moduleName.psd1").ModuleVersion
+
+ if ((-not ([string]::IsNullOrEmpty($customVersion))) -and (-not ($customVersion -eq '-'))) {
+ Write-Verbose "Apply custom version $customVersion"
+ $newVersion = New-Object System.Version($customVersion)
+ } elseif ($localVersion -gt $currentFeedVersion.ToString()) {
+ Write-Verbose "Apply local manifest version $localVersion"
+ $newVersion = $localVersion
+ } else {
+ Write-Verbose "Versioning option is set to [$versioningOption]. Applying."
+ $build = $currentFeedVersion.Build
+ $minor = $currentFeedVersion.Minor
+ $major = $currentFeedVersion.Major
+
+ if ($versioningOption -eq 'patch') {
+ $build++
+ } elseif ($versioningOption -eq 'minor') {
+ $minor++
+ $build = 0
+ } else {
+ $major++
+ $minor = 0
+ $build = 0
+ }
+
+ $newVersion = New-Object System.Version('{0}.{1}.{2}' -f $major, $minor, $build)
+ }
+ return $newVersion
+}
+function Publish-NuGetModule {
+
+ <#
+.SYNOPSIS
+Publish a given module to specified feed
+
+.DESCRIPTION
+Publish a given module to specified feed
+
+.PARAMETER feedname
+Nanm of the feed to push to
+
+.PARAMETER credential
+Credentials required by the feed
+
+.EXAMPLE
+Publish-NuGetModule -feedname "Release-Modules" -credential $credential -moduleName "Aks"
+
+Push the module AKS to the feed 'Release-Modules'
+#>
+ [CmdletBinding()]
+ param (
+ [Parameter(Mandatory = $true)]
+ [string] $feedname,
+ [Parameter(Mandatory = $true)]
+ [PSCredential] $credential,
+ [Parameter(Mandatory = $true)]
+ [string] $moduleBase,
+ [Parameter(Mandatory = $true)]
+ [string] $moduleName
+ )
+
+ try {
+ Write-Verbose "Try pushing module [$moduleName] from base [$moduleBase] to feed [$feedname]"
+ Publish-Module -Path "$moduleBase" -NuGetApiKey 'VSTS' -Repository $feedname -Credential $credential -Force
+ Write-Verbose 'Published module'
+ } catch {
+ Write-Verbose ('Unable to upload module {0}' -f (Split-Path $PSScriptRoot -Leaf))
+ $_.Exception | Format-List -Force
+ }
+}
+function Set-LocalVersion {
+ <#
+.SYNOPSIS
+Set the specified version to the module manifest
+
+.DESCRIPTION
+Set the specified version to the module manifest
+
+.PARAMETER newVersion
+The version to set
+
+.PARAMETER moduleBase
+The root folder of the module
+
+.PARAMETER moduleName
+The name of the module
+
+.EXAMPLE
+Set-LocalVersion -newVersion $newVersion -moduleBase "c:\modules\aks" -moduleName "aks"
+
+Set the provided moduleVersion to the manifest of module aks in the folder 'c:\modules\aks'
+#>
+ [CmdletBinding(
+ SupportsShouldProcess = $true
+ )]
+ param (
+ [Parameter(Mandatory = $true)]
+ [version] $newVersion,
+ [Parameter(Mandatory = $true)]
+ [string] $moduleBase,
+ [Parameter(Mandatory = $true)]
+ [string] $moduleName
+ )
+
+ $modulefile = "$moduleBase/$moduleName.psd1"
+ if ($PSCmdlet.ShouldProcess('Module manifest', 'Update')) {
+ Update-ModuleManifest -Path $modulefile -ModuleVersion $newVersion -Verbose
+ }
+}
+function Update-ManifestExportedFunction {
+ <#
+.SYNOPSIS
+Add the module's public functions to its manifest
+
+.DESCRIPTION
+Extracts all functions in the module's public folder to add them as 'FunctionsToExport' int he manifest
+
+.PARAMETER moduleBase
+The root folder of the module
+
+.PARAMETER moduleName
+The name of the module
+
+.EXAMPLE
+Update-ManifestExportedFunction -moduleBase "c:\modules\aks" -moduleName "aks"
+
+Add all public functions of module AKS to its manifest
+#>
+ [CmdletBinding(
+ SupportsShouldProcess = $true
+ )]
+ param (
+ [Parameter(Mandatory = $true)]
+ [string] $moduleBase,
+ [Parameter(Mandatory = $true)]
+ [string] $moduleName
+ )
+
+ $publicFunctions = (Get-ChildItem -Path "$moduleBase\Public" -Filter '*.ps1').BaseName
+
+ $modulefile = "$moduleBase\$moduleName.psd1"
+ if ($PSCmdlet.ShouldProcess('Module manifest', 'Update')) {
+ Write-Verbose "Update Manifest $moduleFile"
+ Update-ModuleManifest -Path $modulefile -FunctionsToExport $publicFunctions -Verbose | Out-Null
+ }
+}
+#endregion
+
+function Publish-ModuleToNuget {
+
+ <#
+.SYNOPSIS
+Build the current powershell module as an artifact and push it to a designated feed
+
+.DESCRIPTION
+This method adjusts the module's manifest in two ways:
+- It assigns a new given or generated module version to the manifest
+- It extracts all public functions from this module and lists them in the manifest
+
+Subsequently it pushes the module as an artifact to a corresponding module feed as a nuget package where it can be downloaded from.
+
+.PARAMETER feedName
+Name of the feed to push the module to. By default it's 'Release-Modules'
+
+.PARAMETER feedurl
+Optional feedurl to set by pipeline. Use {0} in path to specify the feedname
+e.g. "https://apps-custom.pkgs.visualstudio.com/_packaging/{0}/nuget/v2"
+
+.PARAMETER customVersion
+If the new version should not be generated you can specify a custom version. It must be higher than the latest version inside the module feed.
+
+.PARAMETER versioningOption
+The version update. Patch, Minor or Major.
+
+.PARAMETER systemAccessToken
+Personal-Access-Token provieded by the pipeline or user to interact with the module feed
+
+.PARAMETER queueById
+Name/Email/Id of the user interacting with the module feed
+
+.PARAMETER test
+An optional parameter used by tests to only run code that is required for testing
+
+.PARAMETER moduleBase
+Root folder of the modbule to publish
+
+.PARAMETER moduleName
+Name of the module to publish
+#>
+
+ [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingConvertToSecureStringWithPlainText', '', Justification = 'Is provided by the pipeline as an encoded string')]
+ [CmdletBinding()]
+ param (
+ [Parameter(Mandatory = $true)]
+ [string] $feedName,
+
+ [Parameter(Mandatory = $true)]
+ [string] $feedurl,
+
+ [Parameter(Mandatory = $false)]
+ [string] $customVersion = '-',
+
+ [Parameter(Mandatory = $false)]
+ [ValidateSet('patch', 'minor', 'major')]
+ [string] $versioningOption = 'patch',
+
+ [Parameter(Mandatory = $true)]
+ [string] $systemAccessToken,
+
+ [Parameter(Mandatory = $true)]
+ [string] $queueById,
+
+ [Parameter(Mandatory = $true)]
+ [string] $moduleBase,
+
+ [Parameter(Mandatory = $true)]
+ [string] $moduleName
+ )
+
+ $oldPreferences = $VerbosePreference
+ $VerbosePreference = 'Continue'
+
+ try {
+ $feedurl = $feedurl -f $feedName
+ Write-Verbose "Feed-Url: $feedurl"
+
+ $password = ConvertTo-SecureString $systemAccessToken -AsPlainText -Force
+ $credential = New-Object System.Management.Automation.PSCredential ($queueById, $password)
+
+ Write-Verbose 'Register feed'
+ Set-DefinedPSRepository -feedname $feedName -feedurl $feedurl -systemAccessToken $systemAccessToken -Credential $credential -queueById $queueById
+
+ $currentFeedVersion = Get-CurrentVersion -feedname $feedName -moduleName $moduleName -credential $credential
+ Write-Verbose "Current version of module '$moduleName' in feed '$feedName' is $currentFeedVersion"
+
+ Confirm-CustomVersionIfSet -customVersion $customVersion -currentFeedVersion $currentFeedVersion
+
+ $newVersion = Get-NewVersion -customVersion $customVersion -versioningOption $versioningOption -currentFeedVersion $currentFeedVersion -moduleName $moduleName -moduleBase $moduleBase
+ Write-Verbose "New version is $newVersion"
+
+ Set-LocalVersion -newVersion $newVersion -moduleName $moduleName -moduleBase $moduleBase
+ Write-Verbose "Updated local version to $newVersion"
+
+ Update-ManifestExportedFunction -moduleName $moduleName -moduleBase $moduleBase
+
+ Test-ModuleManifest -Path "$moduleBase\$moduleName.psd1" | Format-List
+
+ Publish-NuGetModule -feedname $feedname -credential $credential -moduleName $moduleName -moduleBase $moduleBase
+ } finally {
+ $VerbosePreference = $oldPreferences
+ }
+}
diff --git a/.github/actions/templates/publishModule/scripts/Publish-ModuleToPrivateBicepRegistry.ps1 b/utilities/pipelines/resourcePublish/Publish-ModuleToPrivateBicepRegistry.ps1
similarity index 100%
rename from .github/actions/templates/publishModule/scripts/Publish-ModuleToPrivateBicepRegistry.ps1
rename to utilities/pipelines/resourcePublish/Publish-ModuleToPrivateBicepRegistry.ps1
diff --git a/.github/actions/templates/publishModule/scripts/Publish-ModuleToTemplateSpec.ps1 b/utilities/pipelines/resourcePublish/Publish-ModuleToTemplateSpec.ps1
similarity index 99%
rename from .github/actions/templates/publishModule/scripts/Publish-ModuleToTemplateSpec.ps1
rename to utilities/pipelines/resourcePublish/Publish-ModuleToTemplateSpec.ps1
index 6176efceda..19cfa37b7d 100644
--- a/.github/actions/templates/publishModule/scripts/Publish-ModuleToTemplateSpec.ps1
+++ b/utilities/pipelines/resourcePublish/Publish-ModuleToTemplateSpec.ps1
@@ -135,7 +135,7 @@ function Publish-ModuleToTemplateSpec {
Location = $templateSpecsRgLocation
TemplateFile = $templateFilePath
}
- New-AzTemplateSpec @templateSpecInputObject
+ New-AzTemplateSpec @templateSpecInputObject -Force
}
Write-Verbose 'Publish complete'
}
diff --git a/utilities/resourceRemoval/Remove-DeployedModule.ps1 b/utilities/pipelines/resourceRemoval/Remove-DeployedModule.ps1
similarity index 100%
rename from utilities/resourceRemoval/Remove-DeployedModule.ps1
rename to utilities/pipelines/resourceRemoval/Remove-DeployedModule.ps1
diff --git a/utilities/resourceRemoval/Remove-NetAppAccount.ps1 b/utilities/pipelines/resourceRemoval/Remove-NetAppAccount.ps1
similarity index 100%
rename from utilities/resourceRemoval/Remove-NetAppAccount.ps1
rename to utilities/pipelines/resourceRemoval/Remove-NetAppAccount.ps1
diff --git a/utilities/resourceRemoval/Remove-vWan.ps1 b/utilities/pipelines/resourceRemoval/Remove-vWan.ps1
similarity index 100%
rename from utilities/resourceRemoval/Remove-vWan.ps1
rename to utilities/pipelines/resourceRemoval/Remove-vWan.ps1
diff --git a/utilities/resourceRemoval/helper/Remove-Resource.ps1 b/utilities/pipelines/resourceRemoval/helper/Remove-Resource.ps1
similarity index 100%
rename from utilities/resourceRemoval/helper/Remove-Resource.ps1
rename to utilities/pipelines/resourceRemoval/helper/Remove-Resource.ps1
diff --git a/.github/actions/templates/validateModuleDeploy/scripts/Test-TemplateWithParameterFile.ps1 b/utilities/pipelines/resourceValidation/Test-TemplateWithParameterFile.ps1
similarity index 100%
rename from .github/actions/templates/validateModuleDeploy/scripts/Test-TemplateWithParameterFile.ps1
rename to utilities/pipelines/resourceValidation/Test-TemplateWithParameterFile.ps1
diff --git a/.github/actions/sharedScripts/Set-EnvironmentOnAgent.ps1 b/utilities/pipelines/sharedScripts/Set-EnvironmentOnAgent.ps1
similarity index 96%
rename from .github/actions/sharedScripts/Set-EnvironmentOnAgent.ps1
rename to utilities/pipelines/sharedScripts/Set-EnvironmentOnAgent.ps1
index 8ece4d4c42..590d5181a8 100644
--- a/.github/actions/sharedScripts/Set-EnvironmentOnAgent.ps1
+++ b/utilities/pipelines/sharedScripts/Set-EnvironmentOnAgent.ps1
@@ -50,7 +50,7 @@ function Install-CustomModule {
$localModuleVersions = Get-Module $foundModule.Name -ListAvailable
if ($localModuleVersions -and $localModuleVersions.Version -contains $foundModule.Version ) {
- Write-Verbose ('Module [{0}] already installed with latest version [{1}]' -f $foundModule.Name, $foundModule.Version) -Verbose
+ Write-Verbose ('Module [{0}] already installed with version [{1}]' -f $foundModule.Name, $foundModule.Version) -Verbose
continue
}
if ($module.ExcludeModules -and $module.excludeModules.contains($foundModule.Name)) {
@@ -100,8 +100,9 @@ function Set-EnvironmentOnAgent {
@{ Name = 'Az.Resources' },
@{ Name = 'Az.NetAppFiles' },
@{ Name = 'Az.Network' },
- @{ Name = 'Az.ContainerRegistry' }
- @{ Name = 'Az.KeyVault' }
+ @{ Name = 'Az.ContainerRegistry' },
+ @{ Name = 'Az.KeyVault' },
+ @{ Name = 'Pester'; Version = '5.3.0' }
)
)
diff --git a/utilities/tokensReplacement/Convert-TokensInParameterFile.ps1 b/utilities/pipelines/tokensReplacement/Convert-TokensInParameterFile.ps1
similarity index 100%
rename from utilities/tokensReplacement/Convert-TokensInParameterFile.ps1
rename to utilities/pipelines/tokensReplacement/Convert-TokensInParameterFile.ps1
diff --git a/utilities/tokensReplacement/Set-LocalCustomParameterFileTokensInKeyVault.ps1 b/utilities/pipelines/tokensReplacement/Set-LocalCustomParameterFileTokensInKeyVault.ps1
similarity index 100%
rename from utilities/tokensReplacement/Set-LocalCustomParameterFileTokensInKeyVault.ps1
rename to utilities/pipelines/tokensReplacement/Set-LocalCustomParameterFileTokensInKeyVault.ps1
diff --git a/utilities/tokensReplacement/helper/Convert-TokensInFileList.ps1 b/utilities/pipelines/tokensReplacement/helper/Convert-TokensInFileList.ps1
similarity index 100%
rename from utilities/tokensReplacement/helper/Convert-TokensInFileList.ps1
rename to utilities/pipelines/tokensReplacement/helper/Convert-TokensInFileList.ps1
diff --git a/utilities/tokensReplacement/helper/Get-RemoteCustomParameterFileTokens.ps1 b/utilities/pipelines/tokensReplacement/helper/Get-RemoteCustomParameterFileTokens.ps1
similarity index 100%
rename from utilities/tokensReplacement/helper/Get-RemoteCustomParameterFileTokens.ps1
rename to utilities/pipelines/tokensReplacement/helper/Get-RemoteCustomParameterFileTokens.ps1
diff --git a/utilities/tools/Test-ModuleLocally.ps1 b/utilities/tools/Test-ModuleLocally.ps1
index cee32e5ffa..776cad6a0e 100644
--- a/utilities/tools/Test-ModuleLocally.ps1
+++ b/utilities/tools/Test-ModuleLocally.ps1
@@ -99,8 +99,8 @@ function Test-ModuleLocally {
begin {
Write-Verbose "Running Local Tests for $($ModuleName.Split('\')[-1])"
# Load Tokens Converter Script
- . (Join-Path $PSScriptRoot '../tokensReplacement/Convert-TokensInParameterFile.ps1')
- . (Join-Path $PSScriptRoot '../tokensReplacement/helper/Convert-TokensInFileList.ps1')
+ . (Join-Path $PSScriptRoot '../pipelines/tokensReplacement/Convert-TokensInParameterFile.ps1')
+ . (Join-Path $PSScriptRoot '../pipelines/tokensReplacement/helper/Convert-TokensInFileList.ps1')
}
process {
# Test Module
From 48e899aad44bc4e8d27f424b81243d5ce43d8fc3 Mon Sep 17 00:00:00 2001
From: MrMCake
Date: Mon, 15 Nov 2021 16:00:54 +0100
Subject: [PATCH 002/112] Update to latest
---
arm/README.md | 184 +++++++++++++++++++++++++-------------------------
1 file changed, 92 insertions(+), 92 deletions(-)
diff --git a/arm/README.md b/arm/README.md
index 2dd542c49a..22528ebc33 100644
--- a/arm/README.md
+++ b/arm/README.md
@@ -6,95 +6,95 @@ The following table provides you with an outline of all Modules that are current
| Name | Provider namespace | Resource Type |
| - | - | - |
-| [Analysis Services](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.AnalysisServices/servers) | `MS.AnalysisServices` | [servers](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.AnalysisServices/servers) |
-| [Api Management](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/service) | `MS.ApiManagement` | [service](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/service) |
-| [Api Management Service Apis](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/apis) | | [service/apis](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/apis) |
-| [Api Management Service Authorization Servers](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/authorizationServers) | | [service/authorizationServers](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/authorizationServers) |
-| [Api Management Service Backends](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/backends) | | [service/backends](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/backends) |
-| [Api Management Service Cache](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/caches) | | [service/caches](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/caches) |
-| [Api Management Service Named Values](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/namedValues) | | [service/namedValues](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/namedValues) |
-| [Api Management Service Products](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/products) | | [service/products](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/products) |
-| [Api Management Subscriptions](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/subscriptions) | | [service/subscriptions](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/subscriptions) |
-| [PolicyAssignment](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/policyAssignments) | `MS.Authorization` | [policyAssignments](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/policyAssignments) |
-| [PolicyDefinition](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/policyDefinitions) | | [policyDefinitions](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/policyDefinitions) |
-| [PolicyExemption](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/policyExemptions) | | [policyExemptions](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/policyExemptions) |
-| [policySetDefinition](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/policySetDefinitions) | | [policySetDefinitions](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/policySetDefinitions) |
-| [Role Assignments](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/roleAssignments) | | [roleAssignments](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/roleAssignments) |
-| [Role Definitions](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/roleDefinitions) | | [roleDefinitions](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/roleDefinitions) |
-| [AutoManage](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Automanage/accounts) | `MS.Automanage` | [accounts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Automanage/accounts) |
-| [AutomationAccounts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Automation/automationAccounts) | `MS.Automation` | [automationAccounts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Automation/automationAccounts) |
-| [Software Update Configuration](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Automation/automationAccountsResources/softwareUpdateConfigurations) | | [automationAccounts/softwareUpdateConfigurations](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Automation/automationAccountsResources/softwareUpdateConfigurations) |
-| [Batch Accounts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Batch/batchAccounts) | `MS.Batch` | [batchAccounts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Batch/batchAccounts) |
-| [CognitiveServices](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.CognitiveServices/accounts) | `MS.CognitiveServices` | [accounts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.CognitiveServices/accounts) |
-| [AvailabilitySet](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/availabilitySets) | `MS.Compute` | [availabilitySets](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/availabilitySets) |
-| [DiskEncryptionSet](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/diskEncryptionSets) | | [diskEncryptionSets](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/diskEncryptionSets) |
-| [Shared Image Gallery](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/galleries) | | [galleries](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/galleries) |
-| [Shared Image Definition](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/galleriesResources/images) | | [galleries/images](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/galleriesResources/images) |
-| [Image](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/images) | | [images](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/images) |
-| [ProximityPlacementGroup](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/proximityPlacementGroups) | | [proximityPlacementGroups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/proximityPlacementGroups) |
-| [Virtual Machines](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/virtualMachines) | | [virtualMachines](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/virtualMachines) |
-| [Virtual Machine Scale Sets](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/virtualMachineScaleSets) | | [virtualMachineScaleSets](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/virtualMachineScaleSets) |
-| [Budgets](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Consumption/budgets) | `MS.Consumption` | [budgets](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Consumption/budgets) |
-| [ContainerInstances](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ContainerInstance/containerGroups) | `MS.ContainerInstance` | [containerGroups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ContainerInstance/containerGroups) |
-| [ContainerRegistry](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ContainerRegistry/registries) | `MS.ContainerRegistry` | [registries](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ContainerRegistry/registries) |
-| [AzureKubernetesService](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ContainerService/managedClusters) | `MS.ContainerService` | [managedClusters](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ContainerService/managedClusters) |
-| [Azure Databricks](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Databricks/workspaces) | `MS.Databricks` | [workspaces](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Databricks/workspaces) |
-| [DataFactory](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.DataFactory/factories) | `MS.DataFactory` | [factories](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.DataFactory/factories) |
-| [AVD Application Groups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/applicationgroups) | `MS.DesktopVirtualization` | [applicationgroups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/applicationgroups) |
-| [AVD HostPools](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/hostpools) | | [hostpools](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/hostpools) |
-| [AVD Workspaces](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/workspaces) | | [workspaces](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/workspaces) |
-| [DocumentDB Database Account](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.DocumentDB/databaseAccounts) | `MS.DocumentDB` | [databaseAccounts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.DocumentDB/databaseAccounts) |
-| [Event Grid](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.EventGrid/topics) | `MS.EventGrid` | [topics](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.EventGrid/topics) |
-| [EventHub Namespace](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.EventHub/namespaces) | `MS.EventHub` | [namespaces](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.EventHub/namespaces) |
-| [Azure Health Bot](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.HealthBot/healthBots) | `MS.HealthBot` | [healthBots](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.HealthBot/healthBots) |
-| [Action Group](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/actionGroups) | `MS.Insights` | [actionGroups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/actionGroups) |
-| [Activity Log Alert](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/activityLogAlerts) | | [activityLogAlerts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/activityLogAlerts) |
-| [Application Insights](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/components) | | [components](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/components) |
-| [ActivityLog](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/diagnosticSettings) | | [diagnosticSettings](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/diagnosticSettings) |
-| [Metric Alert](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/metricAlerts) | | [metricAlerts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/metricAlerts) |
-| [Azure Monitor Private Link Scope](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/privateLinkScopes) | | [privateLinkScopes](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/privateLinkScopes) |
-| [Scheduled Query Rules](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/scheduledQueryRules) | | [scheduledQueryRules](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/scheduledQueryRules) |
-| [KeyVault](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.KeyVault/vaults) | `MS.KeyVault` | [vaults](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.KeyVault/vaults) |
-| [LogicApp](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Logic/workflows) | `MS.Logic` | [workflows](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Logic/workflows) |
-| [Machine Learning Services](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.MachineLearningServices/workspaces) | `MS.achineLearningServices` | [workspaces](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.MachineLearningServices/workspaces) |
-| [User Assigned Identities](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ManagedIdentity/userAssignedIdentities) | `MS.anagedIdentity` | [userAssignedIdentities](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ManagedIdentity/userAssignedIdentities) |
-| [registrationDefinitions](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ManagedServices/registrationDefinitions) | `MS.anagedServices` | [registrationDefinitions](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ManagedServices/registrationDefinitions) |
-| [Management groups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Management/managementGroups) | `MS.anagement` | [managementGroups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Management/managementGroups) |
-| [AzureNetAppFiles](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.NetApp/netAppAccounts) | `MS.NetApp` | [netAppAccounts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.NetApp/netAppAccounts) |
-| [ApplicationGateway](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/applicationGateways) | `MS.Network` | [applicationGateways](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/applicationGateways) |
-| [ApplicationSecurityGroups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/applicationSecurityGroups) | | [applicationSecurityGroups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/applicationSecurityGroups) |
-| [AzureFirewall](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/azureFirewalls) | | [azureFirewalls](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/azureFirewalls) |
-| [AzureBastion](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/bastionHosts) | | [bastionHosts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/bastionHosts) |
-| [VirtualNetworkGatewayConnection](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/connections) | | [connections](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/connections) |
-| [DDoS Protection Plans](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/ddosProtectionPlans) | | [ddosProtectionPlans](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/ddosProtectionPlans) |
-| [ExpressRoute Circuit](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/expressRouteCircuits) | | [expressRouteCircuits](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/expressRouteCircuits) |
-| [IP Groups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/ipGroups) | | [ipGroups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/ipGroups) |
-| [LoadBalancer](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/loadBalancers) | | [loadBalancers](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/loadBalancers) |
-| [Local Network Gateway](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/localNetworkGateways) | | [localNetworkGateways](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/localNetworkGateways) |
-| [NAT Gateway](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/natGateways) | | [natGateways](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/natGateways) |
-| [NetworkSecurityGroups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/networkSecurityGroups) | | [networkSecurityGroups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/networkSecurityGroups) |
-| [Network Watcher](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/networkWatchers) | | [networkWatchers](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/networkWatchers) |
-| [PrivateDnsZones](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/privateDnsZones) | | [privateDnsZones](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/privateDnsZones) |
-| [PrivateEndpoints](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/privateEndpoints) | | [privateEndpoints](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/privateEndpoints) |
-| [Public IP Addresses](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/publicIPAddresses) | | [publicIPAddresses](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/publicIPAddresses) |
-| [Public IP Prefixes](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/publicIPPrefixes) | | [publicIPPrefixes](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/publicIPPrefixes) |
-| [RouteTables](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/routeTables) | | [routeTables](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/routeTables) |
-| [TrafficManager](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/trafficmanagerprofiles) | | [trafficmanagerprofiles](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/trafficmanagerprofiles) |
-| [VirtualNetworkGateway](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/virtualNetworkGateways) | | [virtualNetworkGateways](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/virtualNetworkGateways) |
-| [Virtual Network](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/virtualNetworks) | | [virtualNetworks](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/virtualNetworks) |
-| [Virtual Wan](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/virtualWans) | | [virtualWans](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/virtualWans) |
-| [LogAnalytics](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.OperationalInsights/workspaces) | `MS.OperationalInsights` | [workspaces](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.OperationalInsights/workspaces) |
-| [RecoveryServicesVaults](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.RecoveryServices/vaults) | `MS.RecoveryServices` | [vaults](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.RecoveryServices/vaults) |
-| [Deployment Scripts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Resources/deploymentScripts) | `MS.Resources` | [deploymentScripts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Resources/deploymentScripts) |
-| [Resource Group](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Resources/resourceGroups) | | [resourceGroups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Resources/resourceGroups) |
-| [AzureSecurityCenter](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Security/azureSecurityCenter) | `MS.Security` | [azureSecurityCenter](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Security/azureSecurityCenter) |
-| [ServiceBusNamespaces](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ServiceBus/namespaces) | `MS.ServiceBus` | [namespaces](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ServiceBus/namespaces) |
-| [SQL Managed Instances](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Sql/managedInstances) | `MS.Sql` | [managedInstances](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Sql/managedInstances) |
-| [SQL Managed Instances Database](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Sql/managedInstancesResources/databases) | | [managedInstances/databases](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Sql/managedInstancesResources/databases) |
-| [AzureSQLServer](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Sql/servers) | | [servers](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Sql/servers) |
-| [StorageAccounts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Storage/storageAccounts) | `MS.Storage` | [storageAccounts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Storage/storageAccounts) |
-| [Image Templates](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.VirtualMachineImages/imageTemplates) | `MS.VirtualMachineImages` | [imageTemplates](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.VirtualMachineImages/imageTemplates) |
-| [API Connection](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Web/connections) | `MS.Web` | [connections](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Web/connections) |
-| [App Service Environment](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Web/hostingEnvironments) | | [hostingEnvironments](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Web/hostingEnvironments) |
-| [AppServicePlan](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Web/serverfarms) | | [serverfarms](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Web/serverfarms) |
-| [Web/Function App](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Web/sites) | | [sites](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Web/sites) |
+| [Analysis Services](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.AnalysisServices/servers) | `MS.AnalysisServices` | [servers](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.AnalysisServices/servers) |
+| [Api Management](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/service) | `MS.ApiManagement` | [service](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/service) |
+| [Api Management Service Apis](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/apis) | | [service/apis](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/apis) |
+| [Api Management Service Authorization Servers](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/authorizationServers) | | [service/authorizationServers](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/authorizationServers) |
+| [Api Management Service Backends](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/backends) | | [service/backends](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/backends) |
+| [Api Management Service Cache](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/caches) | | [service/caches](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/caches) |
+| [Api Management Service Named Values](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/namedValues) | | [service/namedValues](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/namedValues) |
+| [Api Management Service Products](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/products) | | [service/products](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/products) |
+| [Api Management Subscriptions](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/subscriptions) | | [service/subscriptions](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/serviceResources/subscriptions) |
+| [PolicyAssignment](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/policyAssignments) | `MS.Authorization` | [policyAssignments](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/policyAssignments) |
+| [PolicyDefinition](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/policyDefinitions) | | [policyDefinitions](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/policyDefinitions) |
+| [PolicyExemption](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/policyExemptions) | | [policyExemptions](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/policyExemptions) |
+| [policySetDefinition](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/policySetDefinitions) | | [policySetDefinitions](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/policySetDefinitions) |
+| [Role Assignments](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/roleAssignments) | | [roleAssignments](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/roleAssignments) |
+| [Role Definitions](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/roleDefinitions) | | [roleDefinitions](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/roleDefinitions) |
+| [AutoManage](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Automanage/accounts) | `MS.Automanage` | [accounts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Automanage/accounts) |
+| [Automation Accounts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Automation/automationAccounts) | `MS.Automation` | [automationAccounts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Automation/automationAccounts) |
+| [Software Update Configuration](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Automation/automationAccountsResources/softwareUpdateConfigurations) | | [automationAccounts/softwareUpdateConfigurations](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Automation/automationAccountsResources/softwareUpdateConfigurations) |
+| [Batch Accounts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Batch/batchAccounts) | `MS.Batch` | [batchAccounts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Batch/batchAccounts) |
+| [CognitiveServices](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.CognitiveServices/accounts) | `MS.CognitiveServices` | [accounts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.CognitiveServices/accounts) |
+| [AvailabilitySet](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/availabilitySets) | `MS.Compute` | [availabilitySets](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/availabilitySets) |
+| [DiskEncryptionSet](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/diskEncryptionSets) | | [diskEncryptionSets](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/diskEncryptionSets) |
+| [Shared Image Gallery](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/galleries) | | [galleries](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/galleries) |
+| [Shared Image Definition](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/galleriesResources/images) | | [galleries/images](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/galleriesResources/images) |
+| [Image](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/images) | | [images](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/images) |
+| [ProximityPlacementGroup](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/proximityPlacementGroups) | | [proximityPlacementGroups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/proximityPlacementGroups) |
+| [Virtual Machines](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/virtualMachines) | | [virtualMachines](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/virtualMachines) |
+| [Virtual Machine Scale Sets](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/virtualMachineScaleSets) | | [virtualMachineScaleSets](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/virtualMachineScaleSets) |
+| [Budgets](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Consumption/budgets) | `MS.Consumption` | [budgets](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Consumption/budgets) |
+| [ContainerInstances](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ContainerInstance/containerGroups) | `MS.ContainerInstance` | [containerGroups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ContainerInstance/containerGroups) |
+| [ContainerRegistry](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ContainerRegistry/registries) | `MS.ContainerRegistry` | [registries](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ContainerRegistry/registries) |
+| [AzureKubernetesService](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ContainerService/managedClusters) | `MS.ContainerService` | [managedClusters](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ContainerService/managedClusters) |
+| [Azure Databricks](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Databricks/workspaces) | `MS.Databricks` | [workspaces](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Databricks/workspaces) |
+| [DataFactory](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.DataFactory/factories) | `MS.DataFactory` | [factories](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.DataFactory/factories) |
+| [AVD Application Groups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/applicationgroups) | `MS.DesktopVirtualization` | [applicationgroups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/applicationgroups) |
+| [AVD HostPools](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/hostpools) | | [hostpools](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/hostpools) |
+| [AVD Workspaces](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/workspaces) | | [workspaces](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/workspaces) |
+| [DocumentDB Database Account](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.DocumentDB/databaseAccounts) | `MS.DocumentDB` | [databaseAccounts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.DocumentDB/databaseAccounts) |
+| [Event Grid](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.EventGrid/topics) | `MS.EventGrid` | [topics](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.EventGrid/topics) |
+| [EventHub Namespace](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.EventHub/namespaces) | `MS.EventHub` | [namespaces](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.EventHub/namespaces) |
+| [Azure Health Bot](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.HealthBot/healthBots) | `MS.HealthBot` | [healthBots](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.HealthBot/healthBots) |
+| [Action Group](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/actionGroups) | `MS.Insights` | [actionGroups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/actionGroups) |
+| [Activity Log Alert](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/activityLogAlerts) | | [activityLogAlerts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/activityLogAlerts) |
+| [Application Insights](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/components) | | [components](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/components) |
+| [ActivityLog](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/diagnosticSettings) | | [diagnosticSettings](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/diagnosticSettings) |
+| [Metric Alert](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/metricAlerts) | | [metricAlerts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/metricAlerts) |
+| [Azure Monitor Private Link Scope](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/privateLinkScopes) | | [privateLinkScopes](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/privateLinkScopes) |
+| [Scheduled Query Rules](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/scheduledQueryRules) | | [scheduledQueryRules](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/scheduledQueryRules) |
+| [KeyVault](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.KeyVault/vaults) | `MS.KeyVault` | [vaults](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.KeyVault/vaults) |
+| [LogicApp](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Logic/workflows) | `MS.Logic` | [workflows](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Logic/workflows) |
+| [Machine Learning Services](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.MachineLearningServices/workspaces) | `MS.achineLearningServices` | [workspaces](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.MachineLearningServices/workspaces) |
+| [User Assigned Identities](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ManagedIdentity/userAssignedIdentities) | `MS.anagedIdentity` | [userAssignedIdentities](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ManagedIdentity/userAssignedIdentities) |
+| [registrationDefinitions](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ManagedServices/registrationDefinitions) | `MS.anagedServices` | [registrationDefinitions](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ManagedServices/registrationDefinitions) |
+| [Management groups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Management/managementGroups) | `MS.anagement` | [managementGroups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Management/managementGroups) |
+| [AzureNetAppFiles](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.NetApp/netAppAccounts) | `MS.NetApp` | [netAppAccounts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.NetApp/netAppAccounts) |
+| [ApplicationGateway](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/applicationGateways) | `MS.Network` | [applicationGateways](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/applicationGateways) |
+| [ApplicationSecurityGroups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/applicationSecurityGroups) | | [applicationSecurityGroups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/applicationSecurityGroups) |
+| [AzureFirewall](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/azureFirewalls) | | [azureFirewalls](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/azureFirewalls) |
+| [AzureBastion](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/bastionHosts) | | [bastionHosts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/bastionHosts) |
+| [VirtualNetworkGatewayConnection](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/connections) | | [connections](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/connections) |
+| [DDoS Protection Plans](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/ddosProtectionPlans) | | [ddosProtectionPlans](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/ddosProtectionPlans) |
+| [ExpressRoute Circuit](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/expressRouteCircuits) | | [expressRouteCircuits](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/expressRouteCircuits) |
+| [IP Groups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/ipGroups) | | [ipGroups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/ipGroups) |
+| [LoadBalancer](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/loadBalancers) | | [loadBalancers](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/loadBalancers) |
+| [Local Network Gateway](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/localNetworkGateways) | | [localNetworkGateways](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/localNetworkGateways) |
+| [NAT Gateway](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/natGateways) | | [natGateways](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/natGateways) |
+| [NetworkSecurityGroups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/networkSecurityGroups) | | [networkSecurityGroups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/networkSecurityGroups) |
+| [Network Watcher](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/networkWatchers) | | [networkWatchers](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/networkWatchers) |
+| [PrivateDnsZones](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/privateDnsZones) | | [privateDnsZones](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/privateDnsZones) |
+| [PrivateEndpoints](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/privateEndpoints) | | [privateEndpoints](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/privateEndpoints) |
+| [Public IP Addresses](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/publicIPAddresses) | | [publicIPAddresses](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/publicIPAddresses) |
+| [Public IP Prefixes](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/publicIPPrefixes) | | [publicIPPrefixes](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/publicIPPrefixes) |
+| [RouteTables](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/routeTables) | | [routeTables](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/routeTables) |
+| [TrafficManager](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/trafficmanagerprofiles) | | [trafficmanagerprofiles](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/trafficmanagerprofiles) |
+| [VirtualNetworkGateway](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/virtualNetworkGateways) | | [virtualNetworkGateways](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/virtualNetworkGateways) |
+| [Virtual Network](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/virtualNetworks) | | [virtualNetworks](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/virtualNetworks) |
+| [Virtual Wan](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/virtualWans) | | [virtualWans](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/virtualWans) |
+| [LogAnalytics](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.OperationalInsights/workspaces) | `MS.OperationalInsights` | [workspaces](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.OperationalInsights/workspaces) |
+| [RecoveryServicesVaults](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.RecoveryServices/vaults) | `MS.RecoveryServices` | [vaults](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.RecoveryServices/vaults) |
+| [Deployment Scripts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Resources/deploymentScripts) | `MS.Resources` | [deploymentScripts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Resources/deploymentScripts) |
+| [Resource Group](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Resources/resourceGroups) | | [resourceGroups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Resources/resourceGroups) |
+| [AzureSecurityCenter](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Security/azureSecurityCenter) | `MS.Security` | [azureSecurityCenter](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Security/azureSecurityCenter) |
+| [ServiceBusNamespaces](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ServiceBus/namespaces) | `MS.ServiceBus` | [namespaces](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ServiceBus/namespaces) |
+| [SQL Managed Instances](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Sql/managedInstances) | `MS.Sql` | [managedInstances](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Sql/managedInstances) |
+| [SQL Managed Instances Database](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Sql/managedInstancesResources/databases) | | [managedInstances/databases](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Sql/managedInstancesResources/databases) |
+| [AzureSQLServer](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Sql/servers) | | [servers](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Sql/servers) |
+| [StorageAccounts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Storage/storageAccounts) | `MS.Storage` | [storageAccounts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Storage/storageAccounts) |
+| [Image Templates](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.VirtualMachineImages/imageTemplates) | `MS.VirtualMachineImages` | [imageTemplates](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.VirtualMachineImages/imageTemplates) |
+| [API Connection](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Web/connections) | `MS.Web` | [connections](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Web/connections) |
+| [App Service Environment](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Web/hostingEnvironments) | | [hostingEnvironments](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Web/hostingEnvironments) |
+| [AppServicePlan](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Web/serverfarms) | | [serverfarms](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Web/serverfarms) |
+| [Web/Function App](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Web/sites) | | [sites](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Web/sites) |
From 82f101de5ce683b6f94001ecb36e989324344ce9 Mon Sep 17 00:00:00 2001
From: MrMCake
Date: Mon, 15 Nov 2021 16:04:18 +0100
Subject: [PATCH 003/112] Fixed ref
---
.azuredevops/pipelineTemplates/module.jobs.deploy.yml | 2 +-
.azuredevops/pipelineTemplates/module.jobs.validate.yml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/.azuredevops/pipelineTemplates/module.jobs.deploy.yml b/.azuredevops/pipelineTemplates/module.jobs.deploy.yml
index aadb33da93..70a9ec4e7a 100644
--- a/.azuredevops/pipelineTemplates/module.jobs.deploy.yml
+++ b/.azuredevops/pipelineTemplates/module.jobs.deploy.yml
@@ -168,7 +168,7 @@ jobs:
verbose = $true
}
# Add Remote Custom Parameter File Tokens
- if ('${{ env.PLATFORM_KEYVAULT }}' -and '${{ inputs.subscriptionId }}') {
+ if ('${{ env.PLATFORM_KEYVAULT }}' -and '${{ parameters.subscriptionId }}') {
$ConvertTokensInputs += @{
TokensKeyVaultName = '${{ variables.PLATFORM_KEYVAULT }}'
TokensKeyVaultSubscriptionId = '${{ parameters.subscriptionId }}'
diff --git a/.azuredevops/pipelineTemplates/module.jobs.validate.yml b/.azuredevops/pipelineTemplates/module.jobs.validate.yml
index c68862198d..96201a2ba9 100644
--- a/.azuredevops/pipelineTemplates/module.jobs.validate.yml
+++ b/.azuredevops/pipelineTemplates/module.jobs.validate.yml
@@ -340,7 +340,7 @@ jobs:
verbose = $true
}
# Add Remote Custom Parameter File Tokens
- if ('${{ env.PLATFORM_KEYVAULT }}' -and '${{ inputs.subscriptionId }}') {
+ if ('${{ env.PLATFORM_KEYVAULT }}' -and '${{ parameters.subscriptionId }}') {
$ConvertTokensInputs += @{
TokensKeyVaultName = '${{ variables.PLATFORM_KEYVAULT }}'
TokensKeyVaultSubscriptionId = '${{ parameters.subscriptionId }}'
From fdf8ba719b99b1e88ce911d9173106aea9de0fba Mon Sep 17 00:00:00 2001
From: MrMCake
Date: Mon, 15 Nov 2021 16:08:21 +0100
Subject: [PATCH 004/112] Updated join path
---
.github/actions/templates/deployModule/action.yml | 4 ++--
.github/actions/templates/publishModule/action.yml | 6 +++---
.github/actions/templates/removeModule/action.yml | 2 +-
.github/actions/templates/validateModuleApis/action.yml | 2 +-
.github/actions/templates/validateModuleDeploy/action.yml | 4 ++--
.github/actions/templates/validateModuleGeneral/action.yml | 2 +-
6 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/.github/actions/templates/deployModule/action.yml b/.github/actions/templates/deployModule/action.yml
index a54a798d1b..a025612842 100644
--- a/.github/actions/templates/deployModule/action.yml
+++ b/.github/actions/templates/deployModule/action.yml
@@ -35,7 +35,7 @@ runs:
shell: pwsh
run: |
# Load used functions
- . (Join-Path $env:GITHUB_WORKSPACE 'utilities/pipelines/sharedScripts/Set-EnvironmentOnAgent.ps1')
+ . (Join-Path $env:GITHUB_WORKSPACE 'utilities' 'pipelines' 'sharedScripts' 'Set-EnvironmentOnAgent.ps1')
# Set agent up
Set-EnvironmentOnAgent
@@ -87,7 +87,7 @@ runs:
shell: pwsh
run: |
# Load used functions
- . (Join-Path $env:GITHUB_WORKSPACE 'utilities/pipelines/resourceDeployment/New-ModuleDeployment.ps1')
+ . (Join-Path $env:GITHUB_WORKSPACE 'utilities' 'pipelines' 'resourceDeployment' 'New-ModuleDeployment.ps1')
$functionInput = @{
moduleName = '${{ inputs.moduleName }}'
diff --git a/.github/actions/templates/publishModule/action.yml b/.github/actions/templates/publishModule/action.yml
index d4f968f325..873aa8358d 100644
--- a/.github/actions/templates/publishModule/action.yml
+++ b/.github/actions/templates/publishModule/action.yml
@@ -44,7 +44,7 @@ runs:
shell: pwsh
run: |
# Load used functions
- . (Join-Path $env:GITHUB_WORKSPACE 'utilities/pipelines/sharedScripts/Set-EnvironmentOnAgent.ps1')
+ . (Join-Path $env:GITHUB_WORKSPACE 'utilities' 'pipelines' 'sharedScripts' 'Set-EnvironmentOnAgent.ps1')
# Set agent up
Set-EnvironmentOnAgent
@@ -64,7 +64,7 @@ runs:
if('${{ inputs.templateSpecsDoPublish }}' -eq 'true') {
# Load used functions
- . (Join-Path $env:GITHUB_WORKSPACE 'utilities/pipelines/resourcePublish/Publish-ModuleToTemplateSpec.ps1')
+ . (Join-Path $env:GITHUB_WORKSPACE 'utilities' 'pipelines' 'resourcePublish' 'Publish-ModuleToTemplateSpec.ps1')
$functionInput = @{
templateFilePath = Join-Path $env:GITHUB_WORKSPACE "${{ inputs.templateFilePath }}"
@@ -92,7 +92,7 @@ runs:
if('${{ inputs.bicepRegistryDoPublish }}' -eq 'true') {
# Load used functions
- . (Join-Path $env:GITHUB_WORKSPACE 'utilities/pipelines/resourcePublish/Publish-ModuleToPrivateBicepRegistry.ps1')
+ . (Join-Path $env:GITHUB_WORKSPACE 'utilities' 'pipelines' 'resourcePublish' 'Publish-ModuleToPrivateBicepRegistry.ps1')
$functionInput = @{
templateFilePath = Join-Path $env:GITHUB_WORKSPACE "${{ inputs.templateFilePath }}"
diff --git a/.github/actions/templates/removeModule/action.yml b/.github/actions/templates/removeModule/action.yml
index fc28d383ff..d1e3641a3f 100644
--- a/.github/actions/templates/removeModule/action.yml
+++ b/.github/actions/templates/removeModule/action.yml
@@ -23,7 +23,7 @@ runs:
shell: pwsh
run: |
# Load used functions
- . (Join-Path $env:GITHUB_WORKSPACE 'utilities/pipelines/sharedScripts/Set-EnvironmentOnAgent.ps1')
+ . (Join-Path $env:GITHUB_WORKSPACE 'utilities' 'pipelines' 'sharedScripts' 'Set-EnvironmentOnAgent.ps1')
# Set agent up
Set-EnvironmentOnAgent
diff --git a/.github/actions/templates/validateModuleApis/action.yml b/.github/actions/templates/validateModuleApis/action.yml
index 610ce6d3e7..03f9dd7bea 100644
--- a/.github/actions/templates/validateModuleApis/action.yml
+++ b/.github/actions/templates/validateModuleApis/action.yml
@@ -16,7 +16,7 @@ runs:
shell: pwsh
run: |
# Load used functions
- . (Join-Path $env:GITHUB_WORKSPACE 'utilities/pipelines/sharedScripts/Set-EnvironmentOnAgent.ps1')
+ . (Join-Path $env:GITHUB_WORKSPACE 'utilities' 'pipelines' 'sharedScripts' 'Set-EnvironmentOnAgent.ps1')
# Set agent up
Set-EnvironmentOnAgent
diff --git a/.github/actions/templates/validateModuleDeploy/action.yml b/.github/actions/templates/validateModuleDeploy/action.yml
index 806851a0c1..142699b68c 100644
--- a/.github/actions/templates/validateModuleDeploy/action.yml
+++ b/.github/actions/templates/validateModuleDeploy/action.yml
@@ -28,7 +28,7 @@ runs:
shell: pwsh
run: |
# Load used functions
- . (Join-Path $env:GITHUB_WORKSPACE 'utilities/pipelines/sharedScripts/Set-EnvironmentOnAgent.ps1')
+ . (Join-Path $env:GITHUB_WORKSPACE 'utilities' 'pipelines' 'sharedScripts' 'Set-EnvironmentOnAgent.ps1')
# Set agent up
Set-EnvironmentOnAgent
@@ -83,7 +83,7 @@ runs:
shell: pwsh
run: |
# Load used functions
- . (Join-Path $env:GITHUB_WORKSPACE 'utilities/pipelines/resourceValidation/Test-TemplateWithParameterFile.ps1')
+ . (Join-Path $env:GITHUB_WORKSPACE 'utilities' 'pipelines' 'resourceValidation' 'Test-TemplateWithParameterFile.ps1')
# ----------- #
# INVOKE TEST #
diff --git a/.github/actions/templates/validateModuleGeneral/action.yml b/.github/actions/templates/validateModuleGeneral/action.yml
index cb16b51b91..eaea72ee10 100644
--- a/.github/actions/templates/validateModuleGeneral/action.yml
+++ b/.github/actions/templates/validateModuleGeneral/action.yml
@@ -18,7 +18,7 @@ runs:
shell: pwsh
run: |
# Load used functions
- . (Join-Path $env:GITHUB_WORKSPACE 'utilities/pipelines/sharedScripts/Set-EnvironmentOnAgent.ps1')
+ . (Join-Path $env:GITHUB_WORKSPACE 'utilities' 'pipelines' 'sharedScripts' 'Set-EnvironmentOnAgent.ps1')
# Set agent up
Set-EnvironmentOnAgent
From 9177ac51ebb2abc4ec6e1e196483e765e571a4c8 Mon Sep 17 00:00:00 2001
From: MrMCake
Date: Mon, 15 Nov 2021 16:09:53 +0100
Subject: [PATCH 005/112] Minor fix
---
.azuredevops/pipelineTemplates/module.jobs.deploy.yml | 2 +-
.azuredevops/pipelineTemplates/module.jobs.validate.yml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/.azuredevops/pipelineTemplates/module.jobs.deploy.yml b/.azuredevops/pipelineTemplates/module.jobs.deploy.yml
index 70a9ec4e7a..333aa6a6c6 100644
--- a/.azuredevops/pipelineTemplates/module.jobs.deploy.yml
+++ b/.azuredevops/pipelineTemplates/module.jobs.deploy.yml
@@ -168,7 +168,7 @@ jobs:
verbose = $true
}
# Add Remote Custom Parameter File Tokens
- if ('${{ env.PLATFORM_KEYVAULT }}' -and '${{ parameters.subscriptionId }}') {
+ if ('${{ variables.PLATFORM_KEYVAULT }}' -and '${{ parameters.subscriptionId }}') {
$ConvertTokensInputs += @{
TokensKeyVaultName = '${{ variables.PLATFORM_KEYVAULT }}'
TokensKeyVaultSubscriptionId = '${{ parameters.subscriptionId }}'
diff --git a/.azuredevops/pipelineTemplates/module.jobs.validate.yml b/.azuredevops/pipelineTemplates/module.jobs.validate.yml
index 96201a2ba9..fb073c325d 100644
--- a/.azuredevops/pipelineTemplates/module.jobs.validate.yml
+++ b/.azuredevops/pipelineTemplates/module.jobs.validate.yml
@@ -340,7 +340,7 @@ jobs:
verbose = $true
}
# Add Remote Custom Parameter File Tokens
- if ('${{ env.PLATFORM_KEYVAULT }}' -and '${{ parameters.subscriptionId }}') {
+ if ('${{ variables.PLATFORM_KEYVAULT }}' -and '${{ parameters.subscriptionId }}') {
$ConvertTokensInputs += @{
TokensKeyVaultName = '${{ variables.PLATFORM_KEYVAULT }}'
TokensKeyVaultSubscriptionId = '${{ parameters.subscriptionId }}'
From 82552d0cbf705812db5871e9b238e408c7b01ead Mon Sep 17 00:00:00 2001
From: MrMCake
Date: Mon, 15 Nov 2021 16:52:15 +0100
Subject: [PATCH 006/112] Updated pipe
---
.azuredevops/pipelineTemplates/module.jobs.deploy.yml | 10 +++++-----
.../pipelineTemplates/module.jobs.validate.yml | 10 +++++-----
2 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/.azuredevops/pipelineTemplates/module.jobs.deploy.yml b/.azuredevops/pipelineTemplates/module.jobs.deploy.yml
index 333aa6a6c6..2e62066c30 100644
--- a/.azuredevops/pipelineTemplates/module.jobs.deploy.yml
+++ b/.azuredevops/pipelineTemplates/module.jobs.deploy.yml
@@ -153,9 +153,9 @@ jobs:
@{ Name = 'resourceGroupName'; Value = '${{ parameters.resourceGroupName }}' }
@{ Name = 'subscriptionId'; Value = '${{ parameters.subscriptionId }}' }
@{ Name = 'managementGroupId'; Value = '${{ parameters.managementGroupId }}' }
- @{ Name = "tenantId"; Value = '${{ variables.ARM_TENANT_ID }}' }
- @{ Name = "deploymentSpId"; Value = '${{ variables.DEPLOYMENT_SP_ID }}' }
- @{ Name = "platformKeyVault"; Value = '${{ variables.PLATFORM_KEYVAULT }}' }
+ @{ Name = "tenantId"; Value = '$(ARM_TENANT_ID)' }
+ @{ Name = "deploymentSpId"; Value = '$(DEPLOYMENT_SP_ID)' }
+ @{ Name = "platformKeyVault"; Value = '$(PLATFORM_KEYVAULT)' }
) | ForEach-Object { [PSCustomObject]$PSItem }
# Construct Token Function Input
@@ -168,9 +168,9 @@ jobs:
verbose = $true
}
# Add Remote Custom Parameter File Tokens
- if ('${{ variables.PLATFORM_KEYVAULT }}' -and '${{ parameters.subscriptionId }}') {
+ if ('$(PLATFORM_KEYVAULT)' -and '${{ parameters.subscriptionId }}') {
$ConvertTokensInputs += @{
- TokensKeyVaultName = '${{ variables.PLATFORM_KEYVAULT }}'
+ TokensKeyVaultName = '$(PLATFORM_KEYVAULT)'
TokensKeyVaultSubscriptionId = '${{ parameters.subscriptionId }}'
TokensKeyVaultSecretNamePrefix = $Settings.parameterFileTokens.remoteTokens.keyVaultSecretNamePrefix
}
diff --git a/.azuredevops/pipelineTemplates/module.jobs.validate.yml b/.azuredevops/pipelineTemplates/module.jobs.validate.yml
index fb073c325d..8bbd2a67e4 100644
--- a/.azuredevops/pipelineTemplates/module.jobs.validate.yml
+++ b/.azuredevops/pipelineTemplates/module.jobs.validate.yml
@@ -325,9 +325,9 @@ jobs:
@{ Name = 'resourceGroupName'; Value = '${{ parameters.resourceGroupName }}' }
@{ Name = 'subscriptionId'; Value = '${{ parameters.subscriptionId }}' }
@{ Name = 'managementGroupId'; Value = '${{ parameters.managementGroupId }}' }
- @{ Name = "tenantId"; Value = '${{ variables.ARM_TENANT_ID }}' }
- @{ Name = "deploymentSpId"; Value = '${{ variables.DEPLOYMENT_SP_ID }}' }
- @{ Name = "platformKeyVault"; Value = '${{ variables.PLATFORM_KEYVAULT }}' }
+ @{ Name = "tenantId"; Value = '$(ARM_TENANT_ID)' }
+ @{ Name = "deploymentSpId"; Value = '$(DEPLOYMENT_SP_ID)' }
+ @{ Name = "platformKeyVault"; Value = '$(PLATFORM_KEYVAULT)' }
) | ForEach-Object { [PSCustomObject]$PSItem }
# Construct Token Function Input
@@ -340,9 +340,9 @@ jobs:
verbose = $true
}
# Add Remote Custom Parameter File Tokens
- if ('${{ variables.PLATFORM_KEYVAULT }}' -and '${{ parameters.subscriptionId }}') {
+ if ('$(PLATFORM_KEYVAULT)' -and '${{ parameters.subscriptionId }}') {
$ConvertTokensInputs += @{
- TokensKeyVaultName = '${{ variables.PLATFORM_KEYVAULT }}'
+ TokensKeyVaultName = '$(PLATFORM_KEYVAULT)'
TokensKeyVaultSubscriptionId = '${{ parameters.subscriptionId }}'
TokensKeyVaultSecretNamePrefix = $Settings.parameterFileTokens.remoteTokens.keyVaultSecretNamePrefix
}
From 0602aaccb63c4a0bdb56ef492950c87d91fe781e Mon Sep 17 00:00:00 2001
From: MrMCake
Date: Mon, 15 Nov 2021 22:01:26 +0100
Subject: [PATCH 007/112] Replaced task to use connection
---
.azuredevops/pipelineTemplates/module.jobs.deploy.yml | 11 +++++++----
.../pipelineTemplates/module.jobs.validate.yml | 11 +++++++----
2 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/.azuredevops/pipelineTemplates/module.jobs.deploy.yml b/.azuredevops/pipelineTemplates/module.jobs.deploy.yml
index 2e62066c30..9e2b78d430 100644
--- a/.azuredevops/pipelineTemplates/module.jobs.deploy.yml
+++ b/.azuredevops/pipelineTemplates/module.jobs.deploy.yml
@@ -136,12 +136,15 @@ jobs:
# [Agent] Replace tokens
#-----------------------
- - task: PowerShell@2
- displayName: 'Replace Tokens [${{ deploymentBlock.path }}]'
+ - task: AzurePowerShell@5
+ displayName: 'Replace Tokens [${{ deploymentBlock.path }}] via connection [${{ parameters.serviceConnection }}]'
inputs:
- targetType: inline
+ azureSubscription: ${{ parameters.serviceConnection }}
+ azurePowerShellVersion: ${{ parameters.azurePowerShellVersion }}
+ preferredAzurePowerShellVersion: ${{ parameters.preferredAzurePowerShellVersion }}
+ ScriptType: InlineScript
pwsh: true
- script: |
+ inline: |
# Load used functions
. (Join-Path '$(System.DefaultWorkingDirectory)' 'utilities' 'pipelines' 'tokensReplacement' 'Convert-TokensInParameterFile.ps1')
diff --git a/.azuredevops/pipelineTemplates/module.jobs.validate.yml b/.azuredevops/pipelineTemplates/module.jobs.validate.yml
index 8bbd2a67e4..88820d1df1 100644
--- a/.azuredevops/pipelineTemplates/module.jobs.validate.yml
+++ b/.azuredevops/pipelineTemplates/module.jobs.validate.yml
@@ -308,12 +308,15 @@ jobs:
# [Agent] Replace tokens
#-----------------------
- - task: PowerShell@2
- displayName: 'Replace Tokens [${{ deploymentBlock.path }}]'
+ - task: AzurePowerShell@5
+ displayName: 'Replace Tokens [${{ deploymentBlock.path }}] via connection [${{ parameters.serviceConnection }}]'
inputs:
- targetType: inline
+ azureSubscription: ${{ parameters.serviceConnection }}
+ azurePowerShellVersion: ${{ parameters.azurePowerShellVersion }}
+ preferredAzurePowerShellVersion: ${{ parameters.preferredAzurePowerShellVersion }}
+ ScriptType: InlineScript
pwsh: true
- script: |
+ inline: |
# Load used functions
. (Join-Path '$(System.DefaultWorkingDirectory)' 'utilities' 'pipelines' 'tokensReplacement' 'Convert-TokensInParameterFile.ps1')
From fe8cfd2feaa4b551848d2b8a7c6190440fcebb85 Mon Sep 17 00:00:00 2001
From: MrMCake
Date: Mon, 15 Nov 2021 22:05:20 +0100
Subject: [PATCH 008/112] Update to latest
---
.../tokensReplacement/Convert-TokensInParameterFile.ps1 | 1 +
1 file changed, 1 insertion(+)
diff --git a/utilities/pipelines/tokensReplacement/Convert-TokensInParameterFile.ps1 b/utilities/pipelines/tokensReplacement/Convert-TokensInParameterFile.ps1
index dba81b7eda..5d1f66f8bf 100644
--- a/utilities/pipelines/tokensReplacement/Convert-TokensInParameterFile.ps1
+++ b/utilities/pipelines/tokensReplacement/Convert-TokensInParameterFile.ps1
@@ -149,6 +149,7 @@ function Convert-TokensInParameterFile {
$ConversionStatus = $true
} catch {
$ConversionStatus = $false
+ Write-Verbose $_.Exception.Message -Verbose
}
}
end {
From 64cd2e6b66e71c51ec45f18b4798bc1ec5aa32a8 Mon Sep 17 00:00:00 2001
From: MrMCake
Date: Mon, 15 Nov 2021 22:08:20 +0100
Subject: [PATCH 009/112] Update to latest
---
.azuredevops/pipelineTemplates/module.jobs.deploy.yml | 2 +-
.azuredevops/pipelineTemplates/module.jobs.validate.yml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/.azuredevops/pipelineTemplates/module.jobs.deploy.yml b/.azuredevops/pipelineTemplates/module.jobs.deploy.yml
index 9e2b78d430..b265c57395 100644
--- a/.azuredevops/pipelineTemplates/module.jobs.deploy.yml
+++ b/.azuredevops/pipelineTemplates/module.jobs.deploy.yml
@@ -163,7 +163,7 @@ jobs:
# Construct Token Function Input
$ConvertTokensInputs = @{
- ParameterFilePath = '${{ deploymentBlock.path }}'
+ ParameterFilePath = Join-Path '$(parametersRepoRoot)' '${{ deploymentBlock.path }}'
DefaultParameterFileTokens = $DefaultParameterFileTokens
LocalCustomParameterFileTokens = $Settings.parameterFileTokens.localTokens.tokens
TokenPrefix = $Settings.parameterFileTokens.tokenPrefix
diff --git a/.azuredevops/pipelineTemplates/module.jobs.validate.yml b/.azuredevops/pipelineTemplates/module.jobs.validate.yml
index 88820d1df1..44a7ea2e40 100644
--- a/.azuredevops/pipelineTemplates/module.jobs.validate.yml
+++ b/.azuredevops/pipelineTemplates/module.jobs.validate.yml
@@ -335,7 +335,7 @@ jobs:
# Construct Token Function Input
$ConvertTokensInputs = @{
- ParameterFilePath = '${{ deploymentBlock.path }}'
+ ParameterFilePath = Join-Path '$(parametersRepoRoot)' '${{ deploymentBlock.path }}'
DefaultParameterFileTokens = $DefaultParameterFileTokens
LocalCustomParameterFileTokens = $Settings.parameterFileTokens.localTokens.tokens
TokenPrefix = $Settings.parameterFileTokens.tokenPrefix
From ba10661aeb8f17d0749489d21b7d7ff40b6634d7 Mon Sep 17 00:00:00 2001
From: MrMCake
Date: Tue, 16 Nov 2021 14:24:09 +0100
Subject: [PATCH 010/112] Minor update
---
.azuredevops/pipelineTemplates/module.jobs.deploy.yml | 2 +-
.azuredevops/pipelineTemplates/module.jobs.validate.yml | 2 +-
.github/actions/templates/deployModule/action.yml | 2 +-
.github/actions/templates/validateModuleDeploy/action.yml | 2 +-
.../helper/Get-RemoteCustomParameterFileTokens.ps1 | 2 +-
5 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/.azuredevops/pipelineTemplates/module.jobs.deploy.yml b/.azuredevops/pipelineTemplates/module.jobs.deploy.yml
index b265c57395..969e668797 100644
--- a/.azuredevops/pipelineTemplates/module.jobs.deploy.yml
+++ b/.azuredevops/pipelineTemplates/module.jobs.deploy.yml
@@ -183,7 +183,7 @@ jobs:
Write-Verbose ($ConvertTokensInputs | ConvertTo-Json | Out-String) -Verbose
# Invoke Token Replacement Functionality
- Convert-TokensInParameterFile @ConvertTokensInputs -Verbose
+ $null = Convert-TokensInParameterFile @ConvertTokensInputs -Verbose
# [Deployment] task(s)
#---------------------
diff --git a/.azuredevops/pipelineTemplates/module.jobs.validate.yml b/.azuredevops/pipelineTemplates/module.jobs.validate.yml
index 44a7ea2e40..09eb33446c 100644
--- a/.azuredevops/pipelineTemplates/module.jobs.validate.yml
+++ b/.azuredevops/pipelineTemplates/module.jobs.validate.yml
@@ -355,7 +355,7 @@ jobs:
Write-Verbose ($ConvertTokensInputs | ConvertTo-Json | Out-String) -Verbose
# Invoke Token Replacement Functionality
- Convert-TokensInParameterFile @ConvertTokensInputs -Verbose
+ $null = Convert-TokensInParameterFile @ConvertTokensInputs -Verbose
# [Test Deployment] task(s)
#--------------------------
diff --git a/.github/actions/templates/deployModule/action.yml b/.github/actions/templates/deployModule/action.yml
index a025612842..5a1526acf7 100644
--- a/.github/actions/templates/deployModule/action.yml
+++ b/.github/actions/templates/deployModule/action.yml
@@ -81,7 +81,7 @@ runs:
}
}
# Invoke Token Replacement Functionality
- Convert-TokensInParameterFile @ConvertTokensInputs -Verbose
+ $null = Convert-TokensInParameterFile @ConvertTokensInputs -Verbose
- name: 'Deploy [${{ inputs.templateFilePath }}]'
shell: pwsh
diff --git a/.github/actions/templates/validateModuleDeploy/action.yml b/.github/actions/templates/validateModuleDeploy/action.yml
index 142699b68c..3ac7b66d3b 100644
--- a/.github/actions/templates/validateModuleDeploy/action.yml
+++ b/.github/actions/templates/validateModuleDeploy/action.yml
@@ -75,7 +75,7 @@ runs:
}
}
# Invoke Token Replacement Functionality
- Convert-TokensInParameterFile @ConvertTokensInputs -Verbose
+ $null = Convert-TokensInParameterFile @ConvertTokensInputs -Verbose
# [Test Deployment] task(s)
#--------------------------
diff --git a/utilities/pipelines/tokensReplacement/helper/Get-RemoteCustomParameterFileTokens.ps1 b/utilities/pipelines/tokensReplacement/helper/Get-RemoteCustomParameterFileTokens.ps1
index f3fafdbc83..bb69c61017 100644
--- a/utilities/pipelines/tokensReplacement/helper/Get-RemoteCustomParameterFileTokens.ps1
+++ b/utilities/pipelines/tokensReplacement/helper/Get-RemoteCustomParameterFileTokens.ps1
@@ -51,7 +51,7 @@ function Get-RemoteCustomParameterFileTokens {
## Remote Custom Parameter File Tokens (Should Not Contain Sensitive Information if being passed to regular strings)
Write-Verbose "Finding Tokens Key Vault by Name: $TokensKeyVaultName"
## Find Token Key Vault by Name
- $TokensKeyVault = Get-AzKeyVault -VaultName $TokensKeyVaultName -ErrorAction SilentlyContinue
+ $TokensKeyVault = Get-AzKeyVault -VaultName $TokensKeyVaultName -ErrorAction 'SilentlyContinue'
# If no Key Vault exists. Exit
if (!$TokensKeyVault) {
Write-Verbose('No Tokens Key Vault Detected in the current Subscription Context')
From 01377da0abd1331a00a0f1c898c06aed63ccd99a Mon Sep 17 00:00:00 2001
From: MrMCake
Date: Tue, 16 Nov 2021 14:28:23 +0100
Subject: [PATCH 011/112] Update to latest
---
.github/workflows/platform.dependencies.yml | 41 +--------------------
1 file changed, 1 insertion(+), 40 deletions(-)
diff --git a/.github/workflows/platform.dependencies.yml b/.github/workflows/platform.dependencies.yml
index 7ddfdd46b0..f8b64e31a9 100644
--- a/.github/workflows/platform.dependencies.yml
+++ b/.github/workflows/platform.dependencies.yml
@@ -81,52 +81,13 @@ jobs:
with:
moduleName: '${{ env.moduleName }}'
templateFilePath: 'arm/${{ env.namespace }}/deploy.bicep'
- parameterFilePath: 'utilities/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
+ parameterFilePath: 'utilities/pipelines/dependencies/${{ env.namespace }}/parameters/${{ matrix.parameterFilePaths }}'
location: '${{ env.defaultLocation }}'
resourceGroupName: '${{ env.resourceGroupNamePlatform }}'
subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}'
managementGroupId: '${{ secrets.ARM_MGMTGROUP_ID }}'
removeDeployment: '${{ env.removeDeployment }}'
- job_deploy_kv_tokens_secrets:
- runs-on: ubuntu-20.04
- name: 'Set Local Tokens in Key Vault'
- needs:
- - job_deploy_kv_platform
- steps:
- - name: 'Checkout'
- if: '${{ env.PLATFORM_KEYVAULT }}'
- uses: actions/checkout@v2
- with:
- fetch-depth: 0
- - name: Azure Login
- if: '${{ env.PLATFORM_KEYVAULT }}'
- uses: azure/login@v1
- with:
- creds: ${{ secrets.AZURE_CREDENTIALS }}
- enable-AzPSSession: true
- - name: 'Create Token Secrets in Key Vault'
- if: '${{ env.PLATFORM_KEYVAULT }}'
- shell: pwsh
- run: |
- # Load Settings File
- $Settings = Get-Content -Path "$env:GITHUB_WORKSPACE/settings.json" | ConvertFrom-Json
- # Load used functions
- . "$env:GITHUB_WORKSPACE/.github/actions/sharedScripts/Set-EnvironmentOnAgent.ps1"
- . "$env:GITHUB_WORKSPACE/utilities/pipelines/tokensReplacement/Set-LocalCustomParameterFileTokensInKeyVault.ps1"
- # Set agent up
- Set-EnvironmentOnAgent
- # Create Tokens in Key Vault
- if('${{ env.PLATFORM_KEYVAULT }}' -and $Settings.parameterFileTokens.remoteTokens.syncLocalTokens){
- write-verbose "Syncing Local Parameter File Tokens to Key Vault"
- Set-LocalCustomParameterFileTokensInKeyVault `
- -TokenKeyVaultName '${{ env.PLATFORM_KEYVAULT }}' `
- -SubscriptionId '${{ secrets.ARM_SUBSCRIPTION_ID }}' `
- -LocalCustomParameterFileTokens $Settings.parameterFileTokens.localTokens.tokens `
- -TokenKeyVaultSecretNamePrefix $Settings.parameterFileTokens.remoteTokens.keyVaultSecretNamePrefix `
- -verbose
- }
-
job_deploy_msi:
runs-on: ubuntu-20.04
name: 'Deploy user assigned identity'
From fdc078ba3f527276be5b69aca44a02b7b3180c7d Mon Sep 17 00:00:00 2001
From: MrMCake
Date: Tue, 16 Nov 2021 14:29:37 +0100
Subject: [PATCH 012/112] Update to latest
---
.../helper/Convert-TokensInFileList.ps1 | 1 +
.../helper/Get-RemoteCustomParameterFileTokens.ps1 | 14 ++++----------
2 files changed, 5 insertions(+), 10 deletions(-)
diff --git a/utilities/pipelines/tokensReplacement/helper/Convert-TokensInFileList.ps1 b/utilities/pipelines/tokensReplacement/helper/Convert-TokensInFileList.ps1
index b6e1a80f5e..439add4458 100644
--- a/utilities/pipelines/tokensReplacement/helper/Convert-TokensInFileList.ps1
+++ b/utilities/pipelines/tokensReplacement/helper/Convert-TokensInFileList.ps1
@@ -75,6 +75,7 @@ function Convert-TokensInFileList {
# Perform the Replace of Tokens in the File
$TokensReplaceWith |
ForEach-Object {
+ Write-Verbose "Finding and Replacing Token: $($PSItem.Name)"
# If type is secure string
if (($PSItem.Value | Get-Member -MemberType Property | Select-Object -ExpandProperty 'TypeName') -eq 'System.Security.SecureString') {
$PSItem.Value = $PSItem.Value | ConvertFrom-SecureString -AsPlainText
diff --git a/utilities/pipelines/tokensReplacement/helper/Get-RemoteCustomParameterFileTokens.ps1 b/utilities/pipelines/tokensReplacement/helper/Get-RemoteCustomParameterFileTokens.ps1
index bb69c61017..986653c81b 100644
--- a/utilities/pipelines/tokensReplacement/helper/Get-RemoteCustomParameterFileTokens.ps1
+++ b/utilities/pipelines/tokensReplacement/helper/Get-RemoteCustomParameterFileTokens.ps1
@@ -51,7 +51,7 @@ function Get-RemoteCustomParameterFileTokens {
## Remote Custom Parameter File Tokens (Should Not Contain Sensitive Information if being passed to regular strings)
Write-Verbose "Finding Tokens Key Vault by Name: $TokensKeyVaultName"
## Find Token Key Vault by Name
- $TokensKeyVault = Get-AzKeyVault -VaultName $TokensKeyVaultName -ErrorAction 'SilentlyContinue'
+ $TokensKeyVault = Get-AzKeyVault -VaultName $TokensKeyVaultName -ErrorAction SilentlyContinue
# If no Key Vault exists. Exit
if (!$TokensKeyVault) {
Write-Verbose('No Tokens Key Vault Detected in the current Subscription Context')
@@ -60,7 +60,7 @@ function Get-RemoteCustomParameterFileTokens {
## Get Tokens
Write-Verbose("Tokens Key Vault Found: $TokensKeyVaultName")
$Tokens = Get-AzKeyVaultSecret -VaultName $TokensKeyVaultName -ErrorAction SilentlyContinue |
- Where-Object -Property ContentType -Like '*ParameterFileToken' |
+ Where-Object -Property ContentType -EQ 'ParameterFileToken' |
Where-Object -Property Name -Like "$($TokensKeyVaultSecretNamePrefix)*"
## If no Tokens exist. Exit
if (!$Tokens) {
@@ -75,14 +75,8 @@ function Get-RemoteCustomParameterFileTokens {
SecretName = $TokenName
VaultName = $TokensKeyVaultName
}
- ## Check if Token Type is 'SecureParameterFileToken'
- if (($PSItem.ContentType -eq 'SecureParameterFileToken')) {
- $TokenValue = (Get-AzKeyVaultSecret @GetTokenInput -ErrorAction SilentlyContinue).SecretValue
- } else {
- $GetTokenInput += @{ AsPlainText = $true }
- $TokenValue = Get-AzKeyVaultSecret @GetTokenInput -ErrorAction SilentlyContinue
- }
- ## Remove Prefix if Provided to Find the Token (Secret) in Key Vault
+ $TokenValue = (Get-AzKeyVaultSecret @GetTokenInput -ErrorAction SilentlyContinue).SecretValue
+ ## Remove Prefix if Provided
if ($TokensKeyVaultSecretNamePrefix) {
$TokenName = $TokenName.Replace($TokensKeyVaultSecretNamePrefix, '')
}
From 2f312e94da590cbcd1f22c5fc25e6d420265d5c8 Mon Sep 17 00:00:00 2001
From: MrMCake
Date: Tue, 16 Nov 2021 14:30:37 +0100
Subject: [PATCH 013/112] Update to latest
---
.../Convert-TokensInFileList.ps1 | 94 +++++++++++++++++++
.../Get-RemoteCustomParameterFileTokens.ps1 | 90 ++++++++++++++++++
2 files changed, 184 insertions(+)
create mode 100644 utilities/tokensReplacement/Convert-TokensInFileList.ps1
create mode 100644 utilities/tokensReplacement/Get-RemoteCustomParameterFileTokens.ps1
diff --git a/utilities/tokensReplacement/Convert-TokensInFileList.ps1 b/utilities/tokensReplacement/Convert-TokensInFileList.ps1
new file mode 100644
index 0000000000..439add4458
--- /dev/null
+++ b/utilities/tokensReplacement/Convert-TokensInFileList.ps1
@@ -0,0 +1,94 @@
+<#
+.SYNOPSIS
+Recieves an Input Object of Name/Value and Searches the Current File for the Name and Replaces it with the Value
+
+.DESCRIPTION
+Recieves an Input Object of Name/Value and Searches the Current File for the Name and Replaces it with the Value
+
+.PARAMETER Paths
+Mandatory. Full Path for the file that contains the strings that need to be replaced. Supports multiple files comma seperated.
+
+.PARAMETER TokensReplaceWith
+Mandatory. An Object that contains the Replace Key and With Key For replacing tokens in files. See Example for structure.
+
+.PARAMETER RestoreTokens
+Optional. A Boolean That swaps the tokens in the TokensReplaceWith Object. Default is False
+
+.EXAMPLE
+$Object = @(
+ @{ Replace = "TextA"; With = "TextB" }
+ @{ Replace = "TextC"; With = "TextD" }
+)
+Convert-TokensInFileList -Paths 'C:\fileA.txt','C:\fileB.txt' -TokensReplaceWith $Object
+
+.EXAMPLE
+$Object = @(
+ @{ Replace = "TextA"; With = "TextB" }
+ @{ Replace = "TextC"; With = "TextD" }
+)
+Convert-TokensInFileList -Paths 'C:\fileA.txt','C:\fileB.txt' -TokensReplaceWith $Object -OutputDirectory 'C:\customDirectory'
+
+.EXAMPLE
+$Object = @(
+ @{ Replace = "TextA"; With = "TextB" }
+ @{ Replace = "TextC"; With = "TextD" }
+)
+Convert-TokensInFileList -Paths 'C:\fileA.txt','C:\fileB.txt' -TokensReplaceWith $Object -RestoreTokens $true
+#>
+function Convert-TokensInFileList {
+ [CmdletBinding()]
+ param(
+ [Parameter(Mandatory)]
+ [string[]] $Paths,
+
+ [Parameter(Mandatory, ValueFromPipeline = $true)]
+ [psobject] $TokensReplaceWith,
+
+ [Parameter(Mandatory = $false)]
+ [string] $OutputDirectory,
+
+ [Parameter(Mandatory = $false)]
+ [bool] $RestoreTokens = $false
+ )
+ # Restore Tokens (Swap Replace with Value)
+ if ($RestoreTokens) {
+ Write-Verbose 'Restoring Tokens'
+ $TokensReplaceWith | ForEach-Object {
+ $Name = $PSitem.Value
+ $Value = $PSItem.Name
+ $PSitem.Name = $Name; $PSitem.Value = $Value
+ }
+ }
+ # Begin the Replace Function
+ Write-Verbose "$($TokensReplaceWith.Count) Tokens Found"
+ # Process Path for Token Replacement
+ foreach ($Path in $Paths) {
+ # Extract Required Content From the Input
+ try {
+ $File = Get-Content -Path $Path
+ $FileName = Split-Path $Path -Leaf
+ } catch {
+ throw $PSItem.Exception.Message
+ exit
+ }
+ Write-Verbose "Processing Tokens for file: $FileName"
+ # Perform the Replace of Tokens in the File
+ $TokensReplaceWith |
+ ForEach-Object {
+ Write-Verbose "Finding and Replacing Token: $($PSItem.Name)"
+ # If type is secure string
+ if (($PSItem.Value | Get-Member -MemberType Property | Select-Object -ExpandProperty 'TypeName') -eq 'System.Security.SecureString') {
+ $PSItem.Value = $PSItem.Value | ConvertFrom-SecureString -AsPlainText
+ }
+ $File = $File -replace $PSItem.Name, $PSItem.Value
+ }
+ # Set Content
+ if ($OutputDirectory -and (Test-Path -Path $OutputDirectory -PathType Container)) {
+ # If Specific Output Directory Provided
+ $Path = (Join-Path $OutputDirectory $FileName)
+ }
+ # Set Content to the Same Path
+ Write-Verbose "Writing Output for: $FileName"
+ $File | Set-Content -Path $Path
+ }
+}
diff --git a/utilities/tokensReplacement/Get-RemoteCustomParameterFileTokens.ps1 b/utilities/tokensReplacement/Get-RemoteCustomParameterFileTokens.ps1
new file mode 100644
index 0000000000..986653c81b
--- /dev/null
+++ b/utilities/tokensReplacement/Get-RemoteCustomParameterFileTokens.ps1
@@ -0,0 +1,90 @@
+<#
+.SYNOPSIS
+This script gets the tokens <> that exist in a parameter file from an Azure Key Vault so that it can be swapped at runtime
+
+.DESCRIPTION
+This script gets the tokens <> that exist in a parameter file from an Azure Key Vault so that it can be swapped at runtime
+
+.PARAMETER SubscriptionId
+Mandatory. The Azure subscription containing the key vault.
+
+.PARAMETER TokensKeyVaultName
+Optional. The name of the Key Vault. It will be used to find a Key Vault that contains Custom Parameter File Tokens.
+
+.PARAMETER TokensKeyVaultSecretNamePrefix
+Optional. An identifier used to filter for the Token Names (Secret Name) in Key Vault (i.e. ParameterFileToken-)
+
+.EXAMPLE
+Get-RemoteCustomParameterFileTokens -TokensKeyVaultName 'contoso-kv' -SubscriptionId '1234-1234'12345678-1234-123456789101'
+
+.EXAMPLE
+Get-RemoteCustomParameterFileTokens -TokensKeyVaultName 'contoso-kv' -SubscriptionId '1234-1234'12345678-1234-123456789101' -TokensKeyVaultSecretNamePrefix 'myToken-'
+
+#>
+function Get-RemoteCustomParameterFileTokens {
+ [CmdletBinding()]
+ param (
+ [parameter(Mandatory)]
+ [string]$TokensKeyVaultName,
+
+ [parameter(Mandatory)]
+ [string]$SubscriptionId,
+
+ [parameter(Mandatory = $false)]
+ [string]$TokensKeyVaultSecretNamePrefix = '*'
+ )
+ begin {
+ ## Set Azure Context
+ try {
+ $Context = Get-AzContext -ListAvailable | Where-Object Subscription -Match $SubscriptionId
+ if ($Context) {
+ Write-Verbose('Setting Azure Context')
+ $Context | Set-AzContext | Out-Null
+ }
+ } catch {
+ throw $PSitem.Exception.Message
+ exit
+ }
+ $ReturnedTokens = @()
+ }
+ process {
+ ## Remote Custom Parameter File Tokens (Should Not Contain Sensitive Information if being passed to regular strings)
+ Write-Verbose "Finding Tokens Key Vault by Name: $TokensKeyVaultName"
+ ## Find Token Key Vault by Name
+ $TokensKeyVault = Get-AzKeyVault -VaultName $TokensKeyVaultName -ErrorAction SilentlyContinue
+ # If no Key Vault exists. Exit
+ if (!$TokensKeyVault) {
+ Write-Verbose('No Tokens Key Vault Detected in the current Subscription Context')
+ exit
+ }
+ ## Get Tokens
+ Write-Verbose("Tokens Key Vault Found: $TokensKeyVaultName")
+ $Tokens = Get-AzKeyVaultSecret -VaultName $TokensKeyVaultName -ErrorAction SilentlyContinue |
+ Where-Object -Property ContentType -EQ 'ParameterFileToken' |
+ Where-Object -Property Name -Like "$($TokensKeyVaultSecretNamePrefix)*"
+ ## If no Tokens exist. Exit
+ if (!$Tokens) {
+ Write-Verbose("No Tokens Found using Secret Name Prefix '$TokensKeyVaultSecretNamePrefix' In Key Vault ($TokensKeyVaultName) or Principal does not have permissions to read it")
+ exit
+ }
+ ## Get Token Values and Add to the Returned Object
+ Write-Verbose("Key Vault Tokens Found: $($Tokens.count)")
+ $Tokens | ForEach-Object {
+ $TokenName = $PSItem.Name
+ $GetTokenInput = @{
+ SecretName = $TokenName
+ VaultName = $TokensKeyVaultName
+ }
+ $TokenValue = (Get-AzKeyVaultSecret @GetTokenInput -ErrorAction SilentlyContinue).SecretValue
+ ## Remove Prefix if Provided
+ if ($TokensKeyVaultSecretNamePrefix) {
+ $TokenName = $TokenName.Replace($TokensKeyVaultSecretNamePrefix, '')
+ }
+ ## Add Token to Return Object
+ $ReturnedTokens += [ordered]@{ Name = $TokenName; Value = $TokenValue }
+ }
+ }
+ end {
+ return [psobject]$ReturnedTokens | ForEach-Object { [PSCustomObject]$PSItem }
+ }
+}
From 49e31cebf6b71982ee4e04c0a91f58b27fb2cf3c Mon Sep 17 00:00:00 2001
From: MrMCake
Date: Tue, 16 Nov 2021 14:35:02 +0100
Subject: [PATCH 014/112] Merged upstream
---
.../Convert-TokensInFileList.ps1 | 94 -------------------
.../Get-RemoteCustomParameterFileTokens.ps1 | 90 ------------------
2 files changed, 184 deletions(-)
delete mode 100644 utilities/tokensReplacement/Convert-TokensInFileList.ps1
delete mode 100644 utilities/tokensReplacement/Get-RemoteCustomParameterFileTokens.ps1
diff --git a/utilities/tokensReplacement/Convert-TokensInFileList.ps1 b/utilities/tokensReplacement/Convert-TokensInFileList.ps1
deleted file mode 100644
index 439add4458..0000000000
--- a/utilities/tokensReplacement/Convert-TokensInFileList.ps1
+++ /dev/null
@@ -1,94 +0,0 @@
-<#
-.SYNOPSIS
-Recieves an Input Object of Name/Value and Searches the Current File for the Name and Replaces it with the Value
-
-.DESCRIPTION
-Recieves an Input Object of Name/Value and Searches the Current File for the Name and Replaces it with the Value
-
-.PARAMETER Paths
-Mandatory. Full Path for the file that contains the strings that need to be replaced. Supports multiple files comma seperated.
-
-.PARAMETER TokensReplaceWith
-Mandatory. An Object that contains the Replace Key and With Key For replacing tokens in files. See Example for structure.
-
-.PARAMETER RestoreTokens
-Optional. A Boolean That swaps the tokens in the TokensReplaceWith Object. Default is False
-
-.EXAMPLE
-$Object = @(
- @{ Replace = "TextA"; With = "TextB" }
- @{ Replace = "TextC"; With = "TextD" }
-)
-Convert-TokensInFileList -Paths 'C:\fileA.txt','C:\fileB.txt' -TokensReplaceWith $Object
-
-.EXAMPLE
-$Object = @(
- @{ Replace = "TextA"; With = "TextB" }
- @{ Replace = "TextC"; With = "TextD" }
-)
-Convert-TokensInFileList -Paths 'C:\fileA.txt','C:\fileB.txt' -TokensReplaceWith $Object -OutputDirectory 'C:\customDirectory'
-
-.EXAMPLE
-$Object = @(
- @{ Replace = "TextA"; With = "TextB" }
- @{ Replace = "TextC"; With = "TextD" }
-)
-Convert-TokensInFileList -Paths 'C:\fileA.txt','C:\fileB.txt' -TokensReplaceWith $Object -RestoreTokens $true
-#>
-function Convert-TokensInFileList {
- [CmdletBinding()]
- param(
- [Parameter(Mandatory)]
- [string[]] $Paths,
-
- [Parameter(Mandatory, ValueFromPipeline = $true)]
- [psobject] $TokensReplaceWith,
-
- [Parameter(Mandatory = $false)]
- [string] $OutputDirectory,
-
- [Parameter(Mandatory = $false)]
- [bool] $RestoreTokens = $false
- )
- # Restore Tokens (Swap Replace with Value)
- if ($RestoreTokens) {
- Write-Verbose 'Restoring Tokens'
- $TokensReplaceWith | ForEach-Object {
- $Name = $PSitem.Value
- $Value = $PSItem.Name
- $PSitem.Name = $Name; $PSitem.Value = $Value
- }
- }
- # Begin the Replace Function
- Write-Verbose "$($TokensReplaceWith.Count) Tokens Found"
- # Process Path for Token Replacement
- foreach ($Path in $Paths) {
- # Extract Required Content From the Input
- try {
- $File = Get-Content -Path $Path
- $FileName = Split-Path $Path -Leaf
- } catch {
- throw $PSItem.Exception.Message
- exit
- }
- Write-Verbose "Processing Tokens for file: $FileName"
- # Perform the Replace of Tokens in the File
- $TokensReplaceWith |
- ForEach-Object {
- Write-Verbose "Finding and Replacing Token: $($PSItem.Name)"
- # If type is secure string
- if (($PSItem.Value | Get-Member -MemberType Property | Select-Object -ExpandProperty 'TypeName') -eq 'System.Security.SecureString') {
- $PSItem.Value = $PSItem.Value | ConvertFrom-SecureString -AsPlainText
- }
- $File = $File -replace $PSItem.Name, $PSItem.Value
- }
- # Set Content
- if ($OutputDirectory -and (Test-Path -Path $OutputDirectory -PathType Container)) {
- # If Specific Output Directory Provided
- $Path = (Join-Path $OutputDirectory $FileName)
- }
- # Set Content to the Same Path
- Write-Verbose "Writing Output for: $FileName"
- $File | Set-Content -Path $Path
- }
-}
diff --git a/utilities/tokensReplacement/Get-RemoteCustomParameterFileTokens.ps1 b/utilities/tokensReplacement/Get-RemoteCustomParameterFileTokens.ps1
deleted file mode 100644
index 986653c81b..0000000000
--- a/utilities/tokensReplacement/Get-RemoteCustomParameterFileTokens.ps1
+++ /dev/null
@@ -1,90 +0,0 @@
-<#
-.SYNOPSIS
-This script gets the tokens <> that exist in a parameter file from an Azure Key Vault so that it can be swapped at runtime
-
-.DESCRIPTION
-This script gets the tokens <> that exist in a parameter file from an Azure Key Vault so that it can be swapped at runtime
-
-.PARAMETER SubscriptionId
-Mandatory. The Azure subscription containing the key vault.
-
-.PARAMETER TokensKeyVaultName
-Optional. The name of the Key Vault. It will be used to find a Key Vault that contains Custom Parameter File Tokens.
-
-.PARAMETER TokensKeyVaultSecretNamePrefix
-Optional. An identifier used to filter for the Token Names (Secret Name) in Key Vault (i.e. ParameterFileToken-)
-
-.EXAMPLE
-Get-RemoteCustomParameterFileTokens -TokensKeyVaultName 'contoso-kv' -SubscriptionId '1234-1234'12345678-1234-123456789101'
-
-.EXAMPLE
-Get-RemoteCustomParameterFileTokens -TokensKeyVaultName 'contoso-kv' -SubscriptionId '1234-1234'12345678-1234-123456789101' -TokensKeyVaultSecretNamePrefix 'myToken-'
-
-#>
-function Get-RemoteCustomParameterFileTokens {
- [CmdletBinding()]
- param (
- [parameter(Mandatory)]
- [string]$TokensKeyVaultName,
-
- [parameter(Mandatory)]
- [string]$SubscriptionId,
-
- [parameter(Mandatory = $false)]
- [string]$TokensKeyVaultSecretNamePrefix = '*'
- )
- begin {
- ## Set Azure Context
- try {
- $Context = Get-AzContext -ListAvailable | Where-Object Subscription -Match $SubscriptionId
- if ($Context) {
- Write-Verbose('Setting Azure Context')
- $Context | Set-AzContext | Out-Null
- }
- } catch {
- throw $PSitem.Exception.Message
- exit
- }
- $ReturnedTokens = @()
- }
- process {
- ## Remote Custom Parameter File Tokens (Should Not Contain Sensitive Information if being passed to regular strings)
- Write-Verbose "Finding Tokens Key Vault by Name: $TokensKeyVaultName"
- ## Find Token Key Vault by Name
- $TokensKeyVault = Get-AzKeyVault -VaultName $TokensKeyVaultName -ErrorAction SilentlyContinue
- # If no Key Vault exists. Exit
- if (!$TokensKeyVault) {
- Write-Verbose('No Tokens Key Vault Detected in the current Subscription Context')
- exit
- }
- ## Get Tokens
- Write-Verbose("Tokens Key Vault Found: $TokensKeyVaultName")
- $Tokens = Get-AzKeyVaultSecret -VaultName $TokensKeyVaultName -ErrorAction SilentlyContinue |
- Where-Object -Property ContentType -EQ 'ParameterFileToken' |
- Where-Object -Property Name -Like "$($TokensKeyVaultSecretNamePrefix)*"
- ## If no Tokens exist. Exit
- if (!$Tokens) {
- Write-Verbose("No Tokens Found using Secret Name Prefix '$TokensKeyVaultSecretNamePrefix' In Key Vault ($TokensKeyVaultName) or Principal does not have permissions to read it")
- exit
- }
- ## Get Token Values and Add to the Returned Object
- Write-Verbose("Key Vault Tokens Found: $($Tokens.count)")
- $Tokens | ForEach-Object {
- $TokenName = $PSItem.Name
- $GetTokenInput = @{
- SecretName = $TokenName
- VaultName = $TokensKeyVaultName
- }
- $TokenValue = (Get-AzKeyVaultSecret @GetTokenInput -ErrorAction SilentlyContinue).SecretValue
- ## Remove Prefix if Provided
- if ($TokensKeyVaultSecretNamePrefix) {
- $TokenName = $TokenName.Replace($TokensKeyVaultSecretNamePrefix, '')
- }
- ## Add Token to Return Object
- $ReturnedTokens += [ordered]@{ Name = $TokenName; Value = $TokenValue }
- }
- }
- end {
- return [psobject]$ReturnedTokens | ForEach-Object { [PSCustomObject]$PSItem }
- }
-}
From dde183a3ededef5def69a3f52b55ebebf19c63ad Mon Sep 17 00:00:00 2001
From: MrMCake
Date: Tue, 16 Nov 2021 14:39:51 +0100
Subject: [PATCH 015/112] Accounted for empty var
---
.azuredevops/pipelineTemplates/module.jobs.deploy.yml | 3 ++-
.azuredevops/pipelineTemplates/module.jobs.validate.yml | 2 +-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/.azuredevops/pipelineTemplates/module.jobs.deploy.yml b/.azuredevops/pipelineTemplates/module.jobs.deploy.yml
index 969e668797..e3697ac14d 100644
--- a/.azuredevops/pipelineTemplates/module.jobs.deploy.yml
+++ b/.azuredevops/pipelineTemplates/module.jobs.deploy.yml
@@ -171,7 +171,8 @@ jobs:
verbose = $true
}
# Add Remote Custom Parameter File Tokens
- if ('$(PLATFORM_KEYVAULT)' -and '${{ parameters.subscriptionId }}') {
+ # Note: if parameter is like "`$(PLATFORM_KEYVAULT*" it was not set as the variable was not resolved
+ if ('${{ parameters.subscriptionId }}' -and -not [String]::IsNullOrEmpty('$(PLATFORM_KEYVAULT)') -and '$(PLATFORM_KEYVAULT)' -notlike "`$(PLATFORM_KEYVAULT*") {
$ConvertTokensInputs += @{
TokensKeyVaultName = '$(PLATFORM_KEYVAULT)'
TokensKeyVaultSubscriptionId = '${{ parameters.subscriptionId }}'
diff --git a/.azuredevops/pipelineTemplates/module.jobs.validate.yml b/.azuredevops/pipelineTemplates/module.jobs.validate.yml
index 09eb33446c..75cdcb5ccc 100644
--- a/.azuredevops/pipelineTemplates/module.jobs.validate.yml
+++ b/.azuredevops/pipelineTemplates/module.jobs.validate.yml
@@ -343,7 +343,7 @@ jobs:
verbose = $true
}
# Add Remote Custom Parameter File Tokens
- if ('$(PLATFORM_KEYVAULT)' -and '${{ parameters.subscriptionId }}') {
+ if ('${{ parameters.subscriptionId }}' -and -not [String]::IsNullOrEmpty('$(PLATFORM_KEYVAULT)') -and '$(PLATFORM_KEYVAULT)' -notlike "`$(PLATFORM_KEYVAULT*") {
$ConvertTokensInputs += @{
TokensKeyVaultName = '$(PLATFORM_KEYVAULT)'
TokensKeyVaultSubscriptionId = '${{ parameters.subscriptionId }}'
From 001b2cec66c6e08ec14ddfc415a7b856dcb457f2 Mon Sep 17 00:00:00 2001
From: MrMCake
Date: Tue, 16 Nov 2021 14:41:21 +0100
Subject: [PATCH 016/112] Updated path handling
---
.azuredevops/pipelineTemplates/module.jobs.validate.yml | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/.azuredevops/pipelineTemplates/module.jobs.validate.yml b/.azuredevops/pipelineTemplates/module.jobs.validate.yml
index 75cdcb5ccc..06439a1d36 100644
--- a/.azuredevops/pipelineTemplates/module.jobs.validate.yml
+++ b/.azuredevops/pipelineTemplates/module.jobs.validate.yml
@@ -318,10 +318,10 @@ jobs:
pwsh: true
inline: |
# Load used functions
- . (Join-Path '$(System.DefaultWorkingDirectory)' 'utilities' 'pipelines' 'tokensReplacement' 'Convert-TokensInParameterFile.ps1')
+ . (Join-Path '$(moduleRepoRoot)' 'utilities' 'pipelines' 'tokensReplacement' 'Convert-TokensInParameterFile.ps1')
# Load Settings File
- $Settings = Get-Content -Path "settings.json" | ConvertFrom-Json
+ $Settings = Get-Content -Path (Join-Path '$(moduleRepoRoot)' 'settings.json') | ConvertFrom-Json
# Initialize Default Parameter File Tokens
$DefaultParameterFileTokens = @(
@@ -343,6 +343,7 @@ jobs:
verbose = $true
}
# Add Remote Custom Parameter File Tokens
+ # Note: if parameter is like "`$(PLATFORM_KEYVAULT*" it was not set as the variable was not resolved
if ('${{ parameters.subscriptionId }}' -and -not [String]::IsNullOrEmpty('$(PLATFORM_KEYVAULT)') -and '$(PLATFORM_KEYVAULT)' -notlike "`$(PLATFORM_KEYVAULT*") {
$ConvertTokensInputs += @{
TokensKeyVaultName = '$(PLATFORM_KEYVAULT)'
From 762ea4fcc68c75d6c56a8b01a0115ed97db9918b Mon Sep 17 00:00:00 2001
From: MrMCake
Date: Tue, 16 Nov 2021 20:57:36 +0100
Subject: [PATCH 017/112] Minor update
---
.azuredevops/pipelineTemplates/module.jobs.deploy.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.azuredevops/pipelineTemplates/module.jobs.deploy.yml b/.azuredevops/pipelineTemplates/module.jobs.deploy.yml
index e3697ac14d..8bb4de81dc 100644
--- a/.azuredevops/pipelineTemplates/module.jobs.deploy.yml
+++ b/.azuredevops/pipelineTemplates/module.jobs.deploy.yml
@@ -146,10 +146,10 @@ jobs:
pwsh: true
inline: |
# Load used functions
- . (Join-Path '$(System.DefaultWorkingDirectory)' 'utilities' 'pipelines' 'tokensReplacement' 'Convert-TokensInParameterFile.ps1')
+ . (Join-Path '$(moduleRepoRoot)' 'utilities' 'pipelines' 'tokensReplacement' 'Convert-TokensInParameterFile.ps1')
# Load Settings File
- $Settings = Get-Content -Path "settings.json" | ConvertFrom-Json
+ $Settings = Get-Content -Path (Join-Path '$(moduleRepoRoot)' 'settings.json') | ConvertFrom-Json
# Initialize Default Parameter File Tokens
$DefaultParameterFileTokens = @(
From 03f0c73948792670d6f2fd2c07dbf180d08c1ae5 Mon Sep 17 00:00:00 2001
From: MrMCake
Date: Wed, 17 Nov 2021 10:56:49 +0100
Subject: [PATCH 018/112] Removed min parameter file from VM to avoid conflict
---
.../ms.compute.virtualmachines.yml | 2 -
.../.parameters/min.parameters.json | 53 -------------------
2 files changed, 55 deletions(-)
delete mode 100644 arm/Microsoft.Compute/virtualMachines/.parameters/min.parameters.json
diff --git a/.azuredevops/modulePipelines/ms.compute.virtualmachines.yml b/.azuredevops/modulePipelines/ms.compute.virtualmachines.yml
index 8985acf8d2..9e080eb52e 100644
--- a/.azuredevops/modulePipelines/ms.compute.virtualmachines.yml
+++ b/.azuredevops/modulePipelines/ms.compute.virtualmachines.yml
@@ -46,7 +46,6 @@ stages:
parameters:
deploymentBlocks:
- path: $(modulePath)/.parameters/parameters.json
- - path: $(modulePath)/.parameters/min.parameters.json
- stage: Deployment
jobs:
@@ -55,7 +54,6 @@ stages:
removeDeployment: '${{ parameters.removeDeployment }}'
deploymentBlocks:
- path: $(modulePath)/.parameters/parameters.json
- - path: $(modulePath)/.parameters/min.parameters.json
- stage: Publishing
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
diff --git a/arm/Microsoft.Compute/virtualMachines/.parameters/min.parameters.json b/arm/Microsoft.Compute/virtualMachines/.parameters/min.parameters.json
deleted file mode 100644
index cb456b2c63..0000000000
--- a/arm/Microsoft.Compute/virtualMachines/.parameters/min.parameters.json
+++ /dev/null
@@ -1,53 +0,0 @@
-{
- "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
- "contentVersion": "1.0.0.0",
- "parameters": {
- "virtualMachineName": {
- "value": "sxx-vm-002"
- },
- "osDisk": {
- "value": {
- "createOption": "fromImage",
- "diskSizeGB": "128",
- "managedDisk": {
- "storageAccountType": "Premium_LRS"
- }
- }
- },
- "imageReference": {
- "value": {
- "publisher": "MicrosoftWindowsServer",
- "offer": "WindowsServer",
- "sku": "2016-Datacenter",
- "version": "latest"
- }
- },
- "adminUsername": {
- "value": "localAdminUser"
- },
- "adminPassword": {
- "reference": {
- "keyVault": {
- "id": "/subscriptions/<>/resourceGroups/validation-rg/providers/Microsoft.KeyVault/vaults/adp-sxx-az-kv-x-001"
- },
- "secretName": "adminPassword"
- }
- },
- "nicConfigurations": {
- "value": [
- {
- "nicSuffix": "-nic-01",
- "ipConfigurations": [
- {
- "name": "ipconfig01",
- "subnetId": "/subscriptions/<>/resourceGroups/validation-rg/providers/Microsoft.Network/virtualNetworks/adp-sxx-az-vnet-x-001/subnets/sxx-az-subnet-x-001",
- "pipConfiguration": {
- "publicIpNameSuffix": "-pip-01"
- }
- }
- ]
- }
- ]
- }
- }
-}
From 084ccb3dbac29e7ab6052e7512a6418d8e91278d Mon Sep 17 00:00:00 2001
From: CARMLPipelinePrincipal
Date: Wed, 17 Nov 2021 16:24:30 +0000
Subject: [PATCH 019/112] Push updated Readme file(s)
---
README.md | 170 +++++++++++++++++++++++++-------------------------
arm/README.md | 170 +++++++++++++++++++++++++-------------------------
2 files changed, 170 insertions(+), 170 deletions(-)
diff --git a/README.md b/README.md
index be24136f49..a9d45c8804 100644
--- a/README.md
+++ b/README.md
@@ -27,91 +27,91 @@ This repository includes a collection of advanced and curated Modules consisting
| Name | Status |
| - | - |
-| [Action Group](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/actionGroups) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.insights.actiongroups.yml) |
-| [Activity Log Alert](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/activityLogAlerts) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.insights.activitylogalerts.yml) |
-| [ActivityLog](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/diagnosticSettings) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.insights.diagnosticsettings.yml) |
-| [Analysis Services](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.AnalysisServices/servers) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.analysisservices.servers.yml) |
-| [API Connection](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Web/connections) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.web.connections.yml) |
-| [Api Management](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ApiManagement/service) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.apimanagement.service.yml) |
-| [App Service Environment](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Web/hostingEnvironments) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.web.hostingenvironments.yml) |
-| [Application Insights](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/components) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.insights.components.yml) |
-| [ApplicationGateway](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/applicationGateways) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.network.applicationgateways.yml) |
-| [ApplicationSecurityGroups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/applicationSecurityGroups) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.network.applicationsecuritygroups.yml) |
-| [AppServicePlan](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Web/serverfarms) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.web.serverfarms.yml) |
-| [AutoManage](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Automanage/accounts) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.automanage.accounts.yml) |
-| [Automation Accounts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Automation/automationAccounts) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.automation.automationaccounts.yml) |
-| [AvailabilitySet](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/availabilitySets) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.compute.availabilitysets.yml) |
-| [AVD Application Groups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/applicationgroups) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.desktopvirtualization.applicationgroups.yml) |
-| [AVD HostPools](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/hostpools) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.desktopvirtualization.hostpools.yml) |
-| [AVD Workspaces](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/workspaces) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.desktopvirtualization.workspaces.yml) |
-| [Azure Databricks](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Databricks/workspaces) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.databricks.workspaces.yml) |
-| [Azure Health Bot](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.HealthBot/healthBots) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.healthbot.healthbots.yml) |
-| [Azure Monitor Private Link Scope](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/privateLinkScopes) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.insights.privatelinkscopes.yml) |
-| [AzureBastion](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/bastionHosts) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.network.bastionhosts.yml) |
-| [AzureFirewall](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/azureFirewalls) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.network.azurefirewalls.yml) |
-| [AzureKubernetesService](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ContainerService/managedClusters) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.containerservice.managedclusters.yml) |
-| [AzureNetAppFiles](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.NetApp/netAppAccounts) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.netapp.netappaccounts.yml) |
-| [AzureSecurityCenter](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Security/azureSecurityCenter) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.security.azuresecuritycenter.yml) |
-| [AzureSQLServer](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Sql/servers) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.sql.servers.yml) |
-| [Batch Accounts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Batch/batchAccounts) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.batch.batchaccounts.yml) |
-| [Budgets](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Consumption/budgets) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.consumption.budgets.yml) |
-| [CognitiveServices](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.CognitiveServices/accounts) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.cognitiveservices.accounts.yml) |
-| [ContainerInstances](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ContainerInstance/containerGroups) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.containerinstance.containergroups.yml) |
-| [ContainerRegistry](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ContainerRegistry/registries) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.containerregistry.registries.yml) |
-| [DataFactory](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.DataFactory/factories) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.datafactory.factories.yml) |
-| [DDoS Protection Plans](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/ddosProtectionPlans) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.network.ddosprotectionplans.yml) |
-| [Deployment Scripts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Resources/deploymentScripts) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.resources.deploymentscripts.yml) |
-| [DiskEncryptionSet](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/diskEncryptionSets) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.compute.diskencryptionsets.yml) |
-| [DocumentDB Database Account](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.DocumentDB/databaseAccounts) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.documentdb.databaseaccounts.yml) |
-| [Event Grid](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.EventGrid/topics) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.eventgrid.topics.yml) |
-| [EventHub Namespace](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.EventHub/namespaces) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.eventhub.namespaces.yml) |
-| [ExpressRoute Circuit](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/expressRouteCircuits) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.network.expressroutecircuits.yml) |
-| [Image Templates](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.VirtualMachineImages/imageTemplates) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.virtualmachineimages.imagetemplates.yml) |
-| [Image](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/images) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.compute.images.yml) |
-| [IP Groups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/ipGroups) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.network.ipgroups.yml) |
-| [KeyVault](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.KeyVault/vaults) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.keyvault.vaults.yml) |
-| [LoadBalancer](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/loadBalancers) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.network.loadbalancers.yml) |
-| [Local Network Gateway](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/localNetworkGateways) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.network.localnetworkgateways.yml) |
-| [LogAnalytics](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.OperationalInsights/workspaces) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.operationalinsights.workspaces.yml) |
-| [LogicApp](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Logic/workflows) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.logic.workflows.yml) |
-| [Machine Learning Services](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.MachineLearningServices/workspaces) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.machinelearningservices.workspaces.yml) |
-| [Management groups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Management/managementGroups) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.management.managementgroups.yml) |
-| [Metric Alert](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/metricAlerts) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.insights.metricalerts.yml) |
-| [NAT Gateway](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/natGateways) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.network.natgateways.yml) |
-| [Network Watcher](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/networkWatchers) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.network.networkwatchers.yml) |
-| [NetworkSecurityGroups](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/networkSecurityGroups) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.network.networksecuritygroups.yml) |
-| [PolicyAssignment](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/policyAssignments) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.authorization.policyassignments.yml) |
-| [PolicyDefinition](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/policyDefinitions) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.authorization.policydefinitions.yml) |
-| [PolicyExemption](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/policyExemptions) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.authorization.policyexemptions.yml) |
-| [policySetDefinition](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/policySetDefinitions) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.authorization.policysetdefinitions.yml) |
-| [PrivateDnsZones](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/privateDnsZones) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.network.privatednszones.yml) |
-| [PrivateEndpoints](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/privateEndpoints) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.network.privateendpoints.yml) |
-| [ProximityPlacementGroup](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/proximityPlacementGroups) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.compute.proximityplacementgroups.yml) |
-| [Public IP Addresses](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/publicIPAddresses) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.network.publicipaddresses.yml) |
-| [Public IP Prefixes](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/publicIPPrefixes) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.network.publicipprefixes.yml) |
-| [RecoveryServicesVaults](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.RecoveryServices/vaults) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.recoveryservices.vaults.yml) |
-| [registrationDefinitions](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ManagedServices/registrationDefinitions) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.managedservices.registrationdefinitions.yml) |
-| [Resource Group](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Resources/resourceGroups) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.resources.resourcegroups.yml) |
-| [Role Assignments](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/roleAssignments) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.authorization.roleassignments.yml) |
-| [Role Definitions](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Authorization/roleDefinitions) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.authorization.roledefinitions.yml) |
-| [RouteTables](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/routeTables) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.network.routetables.yml) |
-| [Scheduled Query Rules](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Insights/scheduledQueryRules) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.insights.scheduledqueryrules.yml) |
-| [ServiceBusNamespaces](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ServiceBus/namespaces) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.servicebus.namespaces.yml) |
-| [Shared Image Definition](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/galleriesResources/images) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.compute.galleries.images.yml) |
-| [Shared Image Gallery](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/galleries) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.compute.galleries.yml) |
-| [Software Update Configuration](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Automation/automationAccountsResources/softwareUpdateConfigurations) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.automation.automationaccounts.softwareupdateconfigurations.yml) |
-| [SQL Managed Instances Database](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Sql/managedInstancesResources/databases) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.sql.managedinstances.databases.yml) |
-| [SQL Managed Instances](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Sql/managedInstances) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.sql.managedinstances.yml) |
-| [StorageAccounts](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Storage/storageAccounts) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.storage.storageaccounts.yml) |
-| [TrafficManager](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/trafficmanagerprofiles) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.network.trafficmanagerprofiles.yml) |
-| [User Assigned Identities](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.ManagedIdentity/userAssignedIdentities) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.managedidentity.userassignedidentities.yml) |
-| [Virtual Machine Scale Sets](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/virtualMachineScaleSets) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.compute.virtualmachinescalesets.yml) |
-| [Virtual Machines](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Compute/virtualMachines) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.compute.virtualmachines.yml) |
-| [Virtual Network](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/virtualNetworks) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.network.virtualnetworks.yml) |
-| [Virtual Wan](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/virtualWans) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.network.virtualwans.yml) |
-| [VirtualNetworkGateway](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/virtualNetworkGateways) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.network.virtualnetworkgateways.yml) |
-| [VirtualNetworkGatewayConnection](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Network/connections) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.network.connections.yml) |
-| [Web/Function App](https://github.com/Azure/ResourceModules/tree/main/arm/Microsoft.Web/sites) | [](https://github.com/Azure/ResourceModules/actions/workflows/ms.web.sites.yml) |
+| [Action Group](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/actionGroups) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.insights.actiongroups.yml) |
+| [Activity Log Alert](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/activityLogAlerts) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.insights.activitylogalerts.yml) |
+| [ActivityLog](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/diagnosticSettings) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.insights.diagnosticsettings.yml) |
+| [Analysis Services](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.AnalysisServices/servers) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.analysisservices.servers.yml) |
+| [API Connection](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Web/connections) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.web.connections.yml) |
+| [Api Management](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ApiManagement/service) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.apimanagement.service.yml) |
+| [App Service Environment](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Web/hostingEnvironments) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.web.hostingenvironments.yml) |
+| [Application Insights](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/components) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.insights.components.yml) |
+| [ApplicationGateway](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/applicationGateways) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.network.applicationgateways.yml) |
+| [ApplicationSecurityGroups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/applicationSecurityGroups) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.network.applicationsecuritygroups.yml) |
+| [AppServicePlan](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Web/serverfarms) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.web.serverfarms.yml) |
+| [AutoManage](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Automanage/accounts) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.automanage.accounts.yml) |
+| [Automation Accounts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Automation/automationAccounts) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.automation.automationaccounts.yml) |
+| [AvailabilitySet](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/availabilitySets) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.compute.availabilitysets.yml) |
+| [AVD Application Groups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/applicationgroups) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.desktopvirtualization.applicationgroups.yml) |
+| [AVD HostPools](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/hostpools) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.desktopvirtualization.hostpools.yml) |
+| [AVD Workspaces](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.DesktopVirtualization/workspaces) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.desktopvirtualization.workspaces.yml) |
+| [Azure Databricks](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Databricks/workspaces) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.databricks.workspaces.yml) |
+| [Azure Health Bot](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.HealthBot/healthBots) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.healthbot.healthbots.yml) |
+| [Azure Monitor Private Link Scope](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/privateLinkScopes) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.insights.privatelinkscopes.yml) |
+| [AzureBastion](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/bastionHosts) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.network.bastionhosts.yml) |
+| [AzureFirewall](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/azureFirewalls) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.network.azurefirewalls.yml) |
+| [AzureKubernetesService](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ContainerService/managedClusters) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.containerservice.managedclusters.yml) |
+| [AzureNetAppFiles](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.NetApp/netAppAccounts) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.netapp.netappaccounts.yml) |
+| [AzureSecurityCenter](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Security/azureSecurityCenter) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.security.azuresecuritycenter.yml) |
+| [AzureSQLServer](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Sql/servers) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.sql.servers.yml) |
+| [Batch Accounts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Batch/batchAccounts) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.batch.batchaccounts.yml) |
+| [Budgets](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Consumption/budgets) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.consumption.budgets.yml) |
+| [CognitiveServices](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.CognitiveServices/accounts) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.cognitiveservices.accounts.yml) |
+| [ContainerInstances](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ContainerInstance/containerGroups) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.containerinstance.containergroups.yml) |
+| [ContainerRegistry](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ContainerRegistry/registries) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.containerregistry.registries.yml) |
+| [DataFactory](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.DataFactory/factories) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.datafactory.factories.yml) |
+| [DDoS Protection Plans](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/ddosProtectionPlans) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.network.ddosprotectionplans.yml) |
+| [Deployment Scripts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Resources/deploymentScripts) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.resources.deploymentscripts.yml) |
+| [DiskEncryptionSet](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/diskEncryptionSets) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.compute.diskencryptionsets.yml) |
+| [DocumentDB Database Account](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.DocumentDB/databaseAccounts) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.documentdb.databaseaccounts.yml) |
+| [Event Grid](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.EventGrid/topics) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.eventgrid.topics.yml) |
+| [EventHub Namespace](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.EventHub/namespaces) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.eventhub.namespaces.yml) |
+| [ExpressRoute Circuit](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/expressRouteCircuits) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.network.expressroutecircuits.yml) |
+| [Image Templates](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.VirtualMachineImages/imageTemplates) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.virtualmachineimages.imagetemplates.yml) |
+| [Image](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/images) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.compute.images.yml) |
+| [IP Groups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/ipGroups) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.network.ipgroups.yml) |
+| [KeyVault](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.KeyVault/vaults) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.keyvault.vaults.yml) |
+| [LoadBalancer](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/loadBalancers) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.network.loadbalancers.yml) |
+| [Local Network Gateway](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/localNetworkGateways) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.network.localnetworkgateways.yml) |
+| [LogAnalytics](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.OperationalInsights/workspaces) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.operationalinsights.workspaces.yml) |
+| [LogicApp](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Logic/workflows) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.logic.workflows.yml) |
+| [Machine Learning Services](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.MachineLearningServices/workspaces) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.machinelearningservices.workspaces.yml) |
+| [Management groups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Management/managementGroups) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.management.managementgroups.yml) |
+| [Metric Alert](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/metricAlerts) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.insights.metricalerts.yml) |
+| [NAT Gateway](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/natGateways) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.network.natgateways.yml) |
+| [Network Watcher](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/networkWatchers) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.network.networkwatchers.yml) |
+| [NetworkSecurityGroups](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/networkSecurityGroups) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.network.networksecuritygroups.yml) |
+| [PolicyAssignment](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/policyAssignments) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.authorization.policyassignments.yml) |
+| [PolicyDefinition](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/policyDefinitions) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.authorization.policydefinitions.yml) |
+| [PolicyExemption](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/policyExemptions) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.authorization.policyexemptions.yml) |
+| [policySetDefinition](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/policySetDefinitions) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.authorization.policysetdefinitions.yml) |
+| [PrivateDnsZones](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/privateDnsZones) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.network.privatednszones.yml) |
+| [PrivateEndpoints](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/privateEndpoints) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.network.privateendpoints.yml) |
+| [ProximityPlacementGroup](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/proximityPlacementGroups) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.compute.proximityplacementgroups.yml) |
+| [Public IP Addresses](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/publicIPAddresses) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.network.publicipaddresses.yml) |
+| [Public IP Prefixes](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/publicIPPrefixes) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.network.publicipprefixes.yml) |
+| [RecoveryServicesVaults](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.RecoveryServices/vaults) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.recoveryservices.vaults.yml) |
+| [registrationDefinitions](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ManagedServices/registrationDefinitions) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.managedservices.registrationdefinitions.yml) |
+| [Resource Group](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Resources/resourceGroups) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.resources.resourcegroups.yml) |
+| [Role Assignments](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/roleAssignments) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.authorization.roleassignments.yml) |
+| [Role Definitions](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Authorization/roleDefinitions) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.authorization.roledefinitions.yml) |
+| [RouteTables](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/routeTables) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.network.routetables.yml) |
+| [Scheduled Query Rules](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Insights/scheduledQueryRules) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.insights.scheduledqueryrules.yml) |
+| [ServiceBusNamespaces](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ServiceBus/namespaces) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.servicebus.namespaces.yml) |
+| [Shared Image Definition](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/galleriesResources/images) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.compute.galleries.images.yml) |
+| [Shared Image Gallery](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/galleries) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.compute.galleries.yml) |
+| [Software Update Configuration](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Automation/automationAccountsResources/softwareUpdateConfigurations) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.automation.automationaccounts.softwareupdateconfigurations.yml) |
+| [SQL Managed Instances Database](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Sql/managedInstancesResources/databases) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.sql.managedinstances.databases.yml) |
+| [SQL Managed Instances](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Sql/managedInstances) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.sql.managedinstances.yml) |
+| [StorageAccounts](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Storage/storageAccounts) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.storage.storageaccounts.yml) |
+| [TrafficManager](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/trafficmanagerprofiles) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.network.trafficmanagerprofiles.yml) |
+| [User Assigned Identities](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.ManagedIdentity/userAssignedIdentities) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.managedidentity.userassignedidentities.yml) |
+| [Virtual Machine Scale Sets](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/virtualMachineScaleSets) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.compute.virtualmachinescalesets.yml) |
+| [Virtual Machines](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Compute/virtualMachines) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.compute.virtualmachines.yml) |
+| [Virtual Network](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/virtualNetworks) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.network.virtualnetworks.yml) |
+| [Virtual Wan](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/virtualWans) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.network.virtualwans.yml) |
+| [VirtualNetworkGateway](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/virtualNetworkGateways) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.network.virtualnetworkgateways.yml) |
+| [VirtualNetworkGatewayConnection](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Network/connections) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.network.connections.yml) |
+| [Web/Function App](https://github.com/MrMCake/ResourceModules/tree/main/arm/Microsoft.Web/sites) | [](https://github.com/MrMCake/ResourceModules/actions/workflows/ms.web.sites.yml) |
m&S+
z$>KI%_YYuGzvcHxHDTh)N6WA|mS=|eG!ne@=nVrPp1to-qF`d)pb~jLLdLDyRWl-p
zc7y=Om^eRmSs>qTRL0$ub=!9AnH;Oyhwy=)?mr&f!J1Ydj)c(043=4y0@b|+Y$9B}Xmk}U2r)?cR
z78B^Ke_#R!cllfd0JKBIi74{SkiP^7(cBEBj01yWZ@!K9JbLXarnrnpa374nWvyqM
z!~yT4ZH{IFMBq$3%*GcPM6J&9a@p}$)|jDy?#hYp-Icb&KFl98R0|QG0K}R&u>0pZ
z&7@zjtAc|*xeND6SZfIfjv|IJXW017Lck-)h92PFtvpdH-L_ua$ONK7g
z`l}iQ&kdSjtFVJh|45V=?3^NP2TMu4j$V&6(>0t>W-(#MKKsj8l^X4x&XyuZQOny)3!SE+Us(ugWpbEB1_IAXz`17y{pE|dlS2(kXeqn*I=EYS$^
z0P1EO!U1!99)SK!>Hj7X{e(_E7E|i93IY!4U&M-F)={U#v<#hAJUc~?WPOSvp&aj{#Rg%)VOsh*s~(pGsqSwv$q-
zSuaUz#hUC)mW>i@tM;cyL2$<**66_Wj>T-ABzh%Ezqw2dZKnx};ANBhy3>jkA#HmG
zFo;%L^xk$;EQ#pX5e>pv>KNmn_F(r3r15ZBtgSH!)0(^
z@LlLxS~upZgxMX+;cWUC$9o|lpci>}=)7P)-b@=^7N)ou{1GD!MIt@Frx15_*8!Lj
zy$(_8(ib8Y7?UTSJM}Y&xI_-Am#dE=umF-FvnNIweX(mY$+PX6R`0v{Jtj55I*n^`ZjrB^^rxUKtYEv75Hi
zUN8f<%MC1_L(KMG~F4KX4l34J*a*nH_(7MMi-%a3Vo~2wmuWdjul#{^dpg#ySS#
z;u|p7N%!$q`x`J4-Y|+wC4fR;?h`Gewf1ZimNPox$*!9+8ofuvd}(<^n>
z7VUFjq&R_0JEIz>!h4?8SpB}0?gZk$3m4!+Sbgmq=x8ZYG;&dFDybr)%Cy+}UeV2I
zo+O{~*KiO4zLdIKfk9F#Ff^;83KQOGg-q-KmS(jH1v9C}Whgq`u}~~|!VeO_rNh~g
z7wil$Q#b!ORB>|w$NfzVK0N#lj!E{U!VxL7;q)V%pZlg94ZYl=CsRK|0SCx;qvy8d
zAaDvELLnqe(nxs3I_B%JLz3zNV_c6S!M34okHMjrPB%d^;6I_(-=qN0_+FCDIFuGE
zMXRGF`t%s!C|&@mJXE*2yu1lY&N`&EM+wKd%QQC)0jnp%Hw~6jc4G%zsXqN@vh3K%WJt6rc1t5m$GeI;`XL;t
z%|^t_cnjCB1Z6-d1~&xQ5~!b7PgZi;DVBq3fEHp%>QC-Le<{ZvWoH43^UYXKriIGN
z>^Q@Qrphpnyf;TXi{!VFz0+mZLz+k(-U`d9&%kO#G1P^DU8>+y4o(*M>)guB@8>gzV0Jo4OftFGzyso{(h=DT9ts<&tXQ8Y`gHD7nYNr?q_!sXH
zINfeQ#@C?7;9`@1%HrEqgWBhfEoU+)jk~t%4GoL7GIr05Cot-7RNiD*rT#kfe#Eh8
z3V=oLs4@;*GEnQRGN7kDD)2?ASW&fes*f`1@83+WDmf+BQLwCYia{MN9U1c|)@Fs#JZgzlb)7g!%UpZ;Ps6
z8IXfw)J45{1BbDP)QN8E<6mI%ZeLs4jB&PE3Y?}f<~81(_0D8=`>Wh%P0N)>75ecT
za=iJ^IH6us6BR<8t)4|;{!gO?-xtBC_psX;n)-z%2=6zeg{Fo|g~mpmA8n3nL>C!%
z)K&-~y4Xgjsh!FJ?X55MwEh70ty!wvEOO|%Uy#!ifgm%5I;+*p-*}e;*c$#
z(^o-~3Uz_GEEJyjTL~ebMe+D5BM5(N;i1%1*w&I_i5Q$T@uh8Y6DUo$Z}lxRy>QHQ
z9Fr|Gev=^=>xcu-O!y5jY$Gn)u@0(eF^?Z1v`|{=Ja(6aTB{h(WIh7$N`7Z*sff9u
zoD4T~Wg>)Ty=!397I2X+
zMH-rJ;xk6s52XB846yn0jT??p1gdpYBR^=CMe_NdJB+=%)G?cvxx6+CAg3y<{1{Cuk)d+|(1ssl-MxYl*KOYrD@;vp2)qf+z|#$#-dN
ziRJC`J=#85HAOmVOqq#4f7&Q%Y;Pi#w@&6T*jBl509%SF_gv`eZxgtVdJSG*Xe+lh
zm#)qt#SbvON0m5ibnI+T>&XP?E6_jNZJKQ}Re5iJuUIcbIa>G9L8MJG9NK+>GLxEQ
zG}*x~8CZc4bj9h7&+ohp&;*5sKQka|^s@H{#T*nZ*q~*Ygd$Fp%(|5O#q#nwwhOY*
zUlyZ@iqBT!H#VNn;&kd1GRTeP1}^F=k
z%^rFVwIx)swxq5wm!xfEcd3?G+wwY0)0}de67zQ&|jNveXhF78&@Hu+3JQW
zScTO{lJwgd)59khiidQ(w?x=d$S@Vt&+N*nhtP?(7!KYld2-M#YSD|QFZr-Xjt?_z
z4uv0yIR>-_bp`W&%HYolYV{O5;^M;yXFfi7pIJ{=<<1S}QRIftGo&GZWlFnI@pg*C
zmvlyHV1>fOd8|_Ndk3as;YqLTVh~7{l!Y^KTjNJ4xjkvjDy&&OY61Cd8yFCX?iUZQ
z97@Eq3!kL_rP06PW6<$QgaKd&etR7xe}-qrWoW34n+p`rL37!gs^FB#Pd+jtch2a%
zDLmt|8(F$+j6VKC>*@^ih_($vPWU=CkTmNhWPSW^Gmz$ns`_4-SUrg22b^o&G_LCMYZ
znYWm7QrDq(ro}>>hKV=6vqALn)5*XJ-nwy#jgsK1X_SD6?B%h%!wQ=VMZSrki14Ym
zQu~)5`(A!+jMC9iK!h4xoIlze;*qvG@>oxeX&@-prj8M$1O<(5E=x;RGVyA!@N`5n
z->inTB_BSIt~ci#h20?Ll(z;lc4o&qR)x;cdH6($ZCot+S|w2$$jxo^1dsqzN%Pkp
z(-S*YsA>J@xA|Y_)XeGG-l|q0p6^~ypib!Tj-wT*0cQLqQQOGPij3n9XmU=QF>O0Q
zWP5M4XN9%)#{SJ-RbC!rj?f1MS0rTj*XIn*7p7yeoG1qSb@=0Z86ycb`>~Qfmi5mN
zm9X7_LrE>(n##Qm!u5s5Tq!F#Z*_9ECj8t;4>w4%zjvS&zfk`q56lR)aodve&xm3c
zpe=^NSO@4CY+zHHU7#WKOI4g8j5yagQa>tGLQSF3Ke>LY_wx3R#~SaEA1gTVkX6{8
z!W`bt)RN(NIg-qBFXDjhX5MTCr*u}i)I%0I?GYf&F@3}2kL_I3k87>x(jVu&du#~$
zy&;;%&+FZ?f5;3u`
zh4x{+TQ9@ap*Ipc2DI;?6g*64YuTp}ybS^Z>Uwu-|08z*n&{kI{A^Ajw6{g6`y3;=m
zNHQjHPlKpU$C*p9NbFmWhFC{X(nOvu&-x8-tBLNPIm<(*M5QF`8YgzHQSxMQ*PNij
zpYtgfp&mvHVLPmu_ptlgAa`MEr4Mv`qC&HU0J~A~Wz1e}P+qI6(fkwT<;$Wb8=)0M
z0Uvg;%|;WfE#JN}0cdT)d#=i8A1{3I@{$r4?ZIkj9uhQVy%$;7E>?Cewc+weoX)Dj
zSKq00O?mAwSO_9iC$@*4;D+Szo8t}DPI<{8FWku*S9HoWEDoc^!?Yb8Jg7Yu77V^2
zw|{boY+R!kq@R(P-Wvb5LQnq6!AF}|0L;hGEhB3B6zuAN#PbTI$(1{PH!@AgA8ed-
z@K5`}lm-S{nS2o+zHN$z^v5oQ%mKbV@Qe^H9r>Ac{8_$Z21P6=7dF8AE=4v;qgcy4
z%lswR>ZroDDs;i!Sbq1-;~X^k4SR{nb>27*=#k=d<`vi{&rd*aoS|{zP2(dFsU0B{
zIWFeujm;etGbnsk^L!CNdJ+VGw&ms3XPM4(&!7xa&DB`KCqMU4l}+~d%{_@K*^l*8
zRmh7X#?{hKb$Wx|qt4yuVdk|+7A5Zr28x7si)|#qerc(vJJs2Fxz%Yc$+LL(x3|kx
zHxCE-426E9U$5imX1dF%LCWmTf8gsH
zo8l6a@38I7n(KXL&QVBETRpTYZX=bC&D7O$I7`CX;Nt1Wy5i=smK!k#Uk$G5^N(t8
zM8-$A-EENJN8{<|N(9|Xt$oQ|tiYW{3Q_kG@|=|PYg48hpT>>l=na-$aXD%ovpw&}
z5^K;k7NWPU65?4j3*}#GV(L7zSoEe>J8#co?vO58PX^lEQspAZRB&=mFgP=B55xHT
zl~fnHC`nn#q7@?w#DJ>WBIg>6+}wgcy#ISkc}J{QgXD3W2bcLW!Vfy&18J;Y4}8we
zt>tfZYfa@>k;9rAqe&NNVvN^<2OoL*Mz+GQ43-&A*^9N->#a~+aD)OQio{OhW3Qj)
zu_@&S@|>;q%-2alwYf0EFxHO}<4~4u?m`RT0_OpqpwuYF6$eQh>wT4}oFl5sopqlb^z!{*=N=vuH&V3TdT
zo+b*1WbbIsJ^qBOT-hq8r$)me80OT~d_>F4gI-yhME;jVb88Fb7Il{=!P9Wj(*EpN
z{C>ySL%S!j2f1VJ4tmgUnr*ppg*xNia?PqlXjy+J&U-cZaoy*a{2ty+^NtiqGQ5WK
znK%AanjW+3bVmYzds)%t>nn;UO7bw7jFnzpc?%lpfO<-rc75BbBB*|S?66$<0C3Na
z=hDWy25Avcj{&hfPQ7pY0myqD9}~-xj-GPaUGUWandB^PWh^
zwT>E&+rKbJ7;4A$2!867;xe2k_6FP44m4gf*<0A}qv7tq+fX+GZiw{DGsT>y1#m@^
zb0YA@9@G=Lcll`#4S-N;_wwV*n!T5)5l@@R~wswARSEmd7yoTYkLPC3^3MQVL24gnphx4~zK7?$#zt0O7im>vIu
zjDm_$(@9xUUIoh|rXx$EOPJ8kWgNR6Z^B$oypT%7i7Sjfp{1|V`Z3s_j#)o|uPdc*
zMvvfjv{%A4z`qaRMXK##%ffr)Qa-!drEK&Uh0MkDa?P^`
zj=YbOTnv4bu3i&~FtJZs=4|W|)6}k*7#Wg!#&q>~LpRdVh!El(aO_yim7UJ=yD)Zy
zZjayeC6bSv2`bkd7
zY4i>Mg?X3UIz^4&p0hpFk30Fxkl=h}>)h9CY3K42gJYz_1%)Bq*K+Jv#Ca-0bnpj(
zEEVIWVO~%@4UNT}};oOdYwh?(?Zq%MVeX)=%@g?QYoshVj`q9t4(Qf9K{mFRvLp7^p
zFOG&g{ymrH_QNKGelL!G=Y1kFx4e@B)20YvE0-&82C25lJT4d2f*gM}qzp^YZxfrB
zNQ9~$1PZ2q5YK69RcAgXF=aJ_KlZBYIg_wv9ktEbKQ&o}UnMXKNoT9`S~(&Df!wn`
z)#IKrX?)ZnVV$2;pb_31V&7O??!L2dV>nW;diQZi6enHLXi#Qg$j+5pj%z5~E%K_Q
zw{E-sF7(AcqLJStud~qSx*=8((}HYytt$c7DlX~o?8WW`TNQ9C@$?9Ub8xWeuiIM@
z)*630ZjV=0g!#XT%NaaqatlvfKKDjiJx3`x!&~iX5aGlLR7_$uYQ#x)N^M?XVZ5J4@rgzVM6=XzDx)n
z)bd}!40R-7SMN8)hT$08e|I>m!zX*c&G2*rSd|N2Q;-2x%<1ds))o8dQLKxhnlm|r
zui`krvR3oHfIuc
z9sXUyS3@zDr|k%B+-UlUZ6(vbRB6M|>GV-X{o^FRTBA$2&|6a-2gQ>|(2@fMqi*2}
zh;Ni?6bDOvfnsoFGCor0lVS$Mw?}d@aIj}uAyN9FFmb@47GNgxN6VQ#;lViU)rAZF
zBiy0I8puoG921LiL$-WJ$q)-ImV#5$8v{NF=kOl%sDMk=W9x*BiRcPpz17_lbupK=
z-3p%fY0C*qT_4yKb1wUhQ~rXpN68YRvo{AM75J3)D3K;vo|qG7siDc7*veJPUO{S;
zQydojz$1Yfx_+U4AnR^XaE9NDB4gj93|EH1&9@Jy&pTVrAKl^p$k{abE8}@Lf=ZWI
z*u0tvZNTX05^ebQ^+%$%hdRaCL)5rxvP*(DW)hV>lA!|Gjp4D|)P*ZtxAdM|!?MkV
z$jkBHJcA@2Uz(c#$+8+lCf#;ue;uM!7V7bIUo_6~6S*T=Wcu}o1O6M^%BqS+`FbCY
z-&Vbhc_6faaAtp_V7^nX?wY%kVc|UVHiCsYGWQpYOxOCCq)l~gaEDKlR;u?9I(s8pEF*^S81U7l0&A^v8jl=dLLYqOja80++yx1I5Bl(kobSm$Vx6H33
zLB4QRr}yzFu`j{DwlKxT^-a`f78v>3lI|)C(`+s-UPbJuE+JO?7r0E;29)sQYjY5@
z4{8Yk(?wcKT;+^|r?b$`H^%a`CJRLX#EoDV&&q6>rRmqVBW|HkE(bIu;Nle$i~&&TeQ`AV(_C}g
zpG9I1Bsdh0g-B=X0)Dub#eCtz{SL8;C-iuFzx^fum>T{Tj-Zl7gg46^e)-`Hv-Fjc
zg`qdKt1mRq#~FWu2!15eQ~^b-fbKi@+Egj}6GG`H9{GcLrCDvaBNG^`1KC
ztH3`){FJgmB%afUc6`hVow?eT`{jn(f)nPRVFz32EMsfaENhp>q_(H)HTji{8{zYJR?+$>YoTuHMwvgi8wU
zs-=wRwS}H7iWuiUUH-=5WN)dWDctEsHsf8F4nRIC=&Ts<2UTxa2D?S3d~_89T~1bh
zlM`)wW;x7bMysRCD%$GyNz&DIxa6C^{BgXUk3L4c_`TtjLARo8-*#%89B2zoNb~d9)j+Jw^>3+L>F2u$lQXQPgQh
zTe@G&rB6*hUO0B_)DPopfnz6FOpG~w;&{~j>U7LH5HP%I+k&^t>3C
zza3dvSJ;{yDe_=;FztYWAf)YX4Gkt%4;r1BT)F47UO333be(HnG)tgkdSxRPq`01D
zp8L^bW8vq@*n1Z;_d-*Dk!SnWjjJTcxLMF|Y4L_=In}^C(NJZ4
z!xq0qMz9zAff~77u2^xaqR%#LMl)Q-8NW}?eR|qktTYN&=jj6@=bu#}fgLMq~QO*n<=Ez(vHDydG`t!ci-*L^L@B*cS|>f9?u_~!u3b%)Hv$~}#bsjQ2KlB!{
zy)%8{5S6H--t3k-5MT<%WN>)?tXP0MFk(=>=eO?AH;N01#NM;{RM&B#`=bu;uk<9p
z89wGX@dsb}ZccgMlY0xT_f*L%A9)f;-^(9g>ST~7=C*OKqPfCWZiO6tz+5-vS~oND
z&>YoQqOfsOmA`U>(MMgTRFhqERO4b0sqNEKGDMLmBO(4{tXvXim>{h=uKM
zg|0E5{+;3^8Fr}lFdvjnr?bf3>EewkDbV6vqjQlSC}Z0pt_qRg5G_8_a@>5i7T^()
zUt&5r#4$tlS1;7fnBfaQX_D?CP7$@w$OS>&jJEK_rWO7FtGMqBXsX%T#fpH41rP+q
z21pG>ln#o35Q_9pq<5n98hn)^y$D3Qlu!al4^lz|q&Mjuq(-_Vv_K$tqi;E$bH4B1
ze|P`j2Rq5ktXXT#TF-iB27w5JFf~bP!V)l5zY?5wsqAK7tBLDlt1Bw`^7&GoT}e+5
zBNFk6^<%YPOtF+Ljkbj#SIZP*1Q;LIfbdi3uMxXU-94|4pxB3
zV|tMl!>xH+0{k?OIHLr+M-fX6Q}*gNcq-t%BkxqmUQz$b-@q}ru)Ij61ixJA5SrtL)%f#}(u+^~
zj+-9Sb<;LV;-SdrI|)R$7Xhy(D85qKk0Pp*B+O6qr|t-GV@q&Aa#9h@f6~acCQPdu
z(c3om!rYm|h0B0bFAsK+z)JQdk|a;!=jGy4D|^(OJjd#wA@M
z(pf(Npvd23i^hX3kmi_5U}t_8X#7GfJoY1(rlpUTRpo`klQ-BM_&d%CGSPrA1vWK;
z9_}9wUpeIPUktJDHXsxX)*(2*EWq`i?35c-<(?d|F)vmke_K_=dZiK&Fn&4Aoi=+#LLy+m2
z_dht7iC!sSRI-)-)UWNpbLTtwP7=Ywjp4&c<1Q9KhS}Yld7ntB(x(%I}^es;xemNB)k^7*opr
z73WrW#Jhq_uq=5gLO%Xxc|(7jHU6CQ%s5Z`_?x;b7X*P_a;E`@&noniGFmh_ij%Ow
zz~YleSWF2nR2it^Ppq60I+h4}^6LU#1Wz7^xUJ)lmd*L-$7n;g
z@T~j{n^eAr(=+nM4p7UQt-4hX!@2z$*~238vu8JU4!jEREtF#2!B;dwCO7kQ^62aw
z)y^8~hlKC0+TvC)F55`zzO~^x=|$)mWBM2w8LngNUploqyr^I@!*G|ALyM{PG{rHB
z06fz610tGtly{=?FSs$U-$#mAedMZo{-w$)C;`HGW%c3SNqupVi|1ViwRp>m{PNm4
z^0wW`w??_oo;*@r;dHJTed*BTpD~FQ_3DbLmxg*bre1CUlf8XS6mU>bPJWzqfj#R9
zOk_KnLtS0iG8m~CN8V>_dMp*-xfnECo%%<84dD8BI9Qw%ZO8Wq%X^aZgcjm*@$JS?
zUEVcvvM)iu{S;xu2~K;3ZP4y2Y!ha6n5t@vI4rrS6~{@Fh5iEMiO0`PUJ=N;?w+bC9N@6C-=uIR(Ou!-1lh}Lp@fCT
zy{_^!nCR5qeMVjBy|_>z`BBG+xmj>x7#5(2d7&hP1~X!D-uiodOLxaigKXq>sY`9+^~sP9QK(ga`B{(Olc|eQ&wCBtp{<>}rR|jC&8|$Lf
zW0?L?3G6}B%8*L
ziBkPa&c(b&3NtB8vLrN{_9B~thX)60SFA^|Dex{QcgkY{&j?p*&-dSU9pjCatFsp2
zHTqlA%Gcvxv#2}He7w>%TWR3C>8ABVkDLq!A68UMC#48|c2I{i{lS%ZG|;WAIr3O}yc`*JX=
z5GMJVPoKNINFBz;$`F&9m@g@;prU2AFgiG|gM8WIj@0$y2w?pI*!-{OE*-&QzZjK%
z^Oq&^?cl+xO@v@#y^;jqt?E9GgwnVE~BB3
zt+R
znFp*?K^4?z{&a37X^?JTs}f+Eo;5UrA07AGd~|i&?vYVXmC@A!J%xaX%*?9GpBaDz
zmNQrs(R1>hnc>MlEeo(~_5YMOunbY2Gt+#5+#96A+(UB3?IguqGN%05=U|bq#aR0p
z{{?JV0H1G;(?ZOZW&l_zI-BSo&Z1L(kX$s)oW<}XWi%cHXMsaJ2gbc5UbNhMAk473
zTTxr7Oew$i(_?#?1g-MzS_cXEu6&yW4BLxZ0^!~5x^?#T80;3q5BI^~Ys=8lUgobm
z?r8(Nxi~IWlneRm#k(c-&p+f4K06(131Y$|+6QT@HDv}eWE`*9o$^wgw$sVUxV{CM
zcwj;tcUZoi@_NJ9<`ec)@}0FYu>0Xu;d1J|;36O6_P(t;FYgitB5
ziPD^hFEx$@z8?6(@nrc$!$=S4Ds$Ya2HjYny|Hg3?_J=Y0L&LZJAIm`MU)DZAUb(S
ztjaAB+pv*UFZAWffKnOO?pUgz*~(KJ2d~G{cuw+&IjBujq-lP>8yDO6>8n?=?K4~Y
zD~}aYZ*YAS9=h~(cVtf`VZ*5vBvHe=*SG==KgDDB`s^W31>%CuN3E<=7tVU4YaVY@
z%)`mYyKwqSHQT0H^+l;>*S!?*8Bbb4I?M+HB|>L?H7j|Ak&K1$_o5IwY6-8lRGP5FL2Yur2NWLmV9%zoP9ED<5>eJUIrKyC-X+cRr+uh}aJoum+K;C5Omhy?
zC-?_mxs$(SgS$_*NF=-iwJYT+6SsBQ&h-@DCziB46u1uHm
zT#zPi#?Fh)X4+Pt=B`*R?UMk6#?#sb*L_>~&Iv#Auu(;xQ{+OHL^pK3Xtxvb6B^U&
zTvuG#+WEXwzwcJKAo-nZYKZ3%)Iu^{eN@fK`G;MDm(I$I0t(kvA5gb{*|S7J%!2x9
z2bqS}hr{=*M5>}V4i{ssvD9auQ+4TQcXSt=>8F#XQL1=RCNe_FbV=(ofV<~Jv)tQ|h3Rary0^!}gy}23R
zo97Y*?lY*da9dk?$J=NIB*$c4kLOdrR6AvwA}u72p{1|m;k5D|mj3K+X)w^HCV?Oy
zC+a5(1Fkc7kdi4bQmz{$vzhfpV9Y79x`lz0GyMH|JAOgNaFnElxK?=j|IG@z^=INw
zHjGd+ny`ugsV97bgQ4B@^v&-e^lANb&GjEh8qmY&N^l26FMcK2MRXC~XA8GXX4FUa
z-v*$V#+;*9mv}jYkOCnhi*RIeLrRXm&mYfPuWg~Fo=8@%o-zy3x%1|JPcBwzE6+OM
zEw#0PPR+pCrfX#l`hm&F2K`RM*Y_J*RkXyl24(F=o`Amr2@V-wJDUmv=t#_F_VkL%
zu^)bF_8(q2rzeTyjQ`8v%O-4h{_K0fvbOJ*N%6RWU$%-{Z;t9MvF~DZiMm1J=QY
z?Q6me@-RkZ*0h1KE-67@F12rnw=%14oIz{UA}bC^ab%1u)beW%yW(*9Zj1BP%}-mN
zW!SJVESrBP3dBC)vQ9EZ)y&9m;5DVX?5k)`}|^Dc1J`{
z5G`$ieuZsgAT=EwodL>zwA@BRK|x`&Jq}d+XlEvWhc2TtpVQ
z?>yo^7IGD@=NYsYn>+X$l+-;q-W~^b&*b8&fl+X>fFq8e>2Q9^_K66
zz`uHirhKKBu3;6leijEWVh!y)GnjUL|C
zrG_s@-fgqoKkzzroxR-ju@Ygye{%m~&$sK_#VW(C=}iDCtQ((y-sR!L?=m*yKIlht
zT<=P>g|Y*c%YS7R!Eq_u9*-W?XDcUdnG2*k%r%FfIn!fhWu?%f6zjTC;pXn{j(U&`
zoKNFpm$PR!Cw4}i5dalFh<`dq%(m3C=H-27HJngwbOA^@5<-arzQ5%gxRM244mRe%
zMjh3OL(&n;BjO`3jz6AgA==sFC9md}v}TljJ(*x>3+TRx2?2;z3kS}Op)nL(j69g~
z^IWu&`39DLgG57x;$f!!xG{cAIqe0Cau%+kX$#FZwPI|8%J|pLi4Q;6L-H?*8`@D}QqgC9ALnQp3Ot9pMQ4WI&p!Q1zpJ{c$|1PgaJ3TA^_
zSW1w1qsd8ZemFn;Oa;8UW_$%g1Kgu~v%0o$Bh_w&;>
zWeu5c_}x%I5hikLHf69S85Yq)W4b@_Hu*<e}C#<3^*X4L8>e9%u29BOQS4~ZD}
z>SaJ*doZtgrK$alN&x_G0qCO7w~>dh-9
zbaaI;YOd@%G%4p4xw=2ByD~O6HhkA@Rp{7G^tzc`_hZ5J(yIBA&IR8b&^Nx`2tMt@
zlg3Hoe3EAep@{7qmzR_vh|)5g@-e`DqO?E
zuU=zXxv+6hap*pZ>{YCWOO_F#+x>@ENB!j-`#ue?Vm*WN_x5ZYG8#IFUGfHAuhXFk
z20RnmBpYi&>T^ubieZUAo;zRN$#8rZ=kP?s!*^&SboZgWehdYf0Qv7@06>sqSg82L
z`O9&!$dtBDf?1}rYiN1Yk7NCMeiw(MkA=fmqUW9&C@XjUafr_|Q)QF0Wi-|R{R2QXAJ@%&{V}NTQ
zlyvDh1C;h}VG%bVXfb~s#DcF14XX*ltdwF>{XYCT5I!yA%QsIqE*
zL0-wd^h0hFy|6bfsd98ncNvcpI>z~w=JoY;I}9a4I~YaS(%PiRl;FzCHzyG~QfA-8
z^&BCHwz$ruT^BvQgc}d!rclsn*is)t>S!~PWMMzsV;VV91b2vulm^uGHE&ekAVS)T{ZUajIOVJy0ThT
z+*K+cS5t=Y`{7u8`1yxbvq1a+<2jf6d2b{e@g2Lq?r&fl>*CIl@x@cuYmG4z>fC>D
zhO-8}9!3|oU;Unf1N*M^e6zx?=Hr1ouR;B9|H)1P=&fb%qS9Fi=ak)!Q9(XtWc}e#
zs(EmLQdHP6?x==fdy6W>+d3P$0=M0o3xpLC1@b)(X3DyB#J1VwMRdsG1x6L9n
zEZY0m^K-Z!LtmCI?$H68(Gr=M(1lj=T$tpwm+;uw@BC)-h1uDQyBHEW)nM#liBx>a
z`&kW3Z@CBYO^QpWbX1`+J6y_>KGxAy@w6|S_Zw27M^&0#-iqtLVj`3Ya
z#lyH>+Eq!tyL8f`ipNmz=kL8ZutU5`98RaCBIV;-!3Lkhr~MV(L&Y~aktINkrkW
zpc~z9P3<6muQ-eY!!3sJnUA|-mvyKh=#c?X&iW-PjlGT$@>#4(=?;Z;v8
zDO-A);3Tpbe_gv_VX-lu!czXy9O%UJFyRrHJKqS3-QKU9=rrLk;Q-{t5pPTm=IB&m
zo*!g9rD^w{@mLVcN3SxU-{AzS?O20#&idv|J+u0Po~tZKVcbf&cb`V+G?wUO1(s$m
z<5}L20;+HMZHS#-qv2B-*Zx>E0-VNEnctm;?E<`^leH{s??>tttr$)U^Vs=G0IX~c
z3*+f~&`JB1h*4EZud|87?JRjr?;}G@P_FNcaG_aa8cHmJWlg>ukQ%+ppN}(K=dIHNs
zkI|w;Eo)7CKmcKedW78fnuZ$zlxW7ay~oFJerj!7`xFVI?Sb&aq|5nhDrYkB*&w{`mgv+Q
zZMpCa^)B2Rkh6y>+R062?MK5$FV-a5w1FX7Wa>!4O4u@CVFrD*TrhY?FT0?{Dh?jE
z6l^-M_O1Snm!!x5o8t0DaJ9o&dD}vJ{PLB`w}b@^P%To0Y23>vg{Xda`3!F86N-75
zUJ$Ll>kR)cZd{1hm46{w;n)JKCn%*uVqITVx(tQ>-t{qNNB->?jsvQE6%U>h!2i>m
zaVN=U=_N3l4I=LfNA4}cn<^Y&h?7UzDJUWC3Sw#IgL3)SLJc{EcB?Fv!^9|}695_+
z>DWe`=;Fy6mh(Z?6%s3m$q{|
zvK0_2tv)3QpgL(gI|xkj)Q0sZd<*?LR6C|H-^yL@q>j529AivVC@tjS@;JEc1_A
zjBVA|2y)nQWU+&d`f3>p6h5`K^I@-BFgrme!-@We5%WM#ou7Zqxs#fgU+D$K3gESb
z*tQ_|N@7{!({UXchYm1{u@UJOZ&uU~^%qKv6(d5P1cd8JgD%UW7`
zSp!dZmu^%NwyWVL+1v&
zb--}3j64mtB4f0E&t%2m=4~r(V=epob5v%unO;Y!VJV<9`qQ~{r=6H#KQH(1(r@j+W99B78Py`jFMSXYZp#VVU_05miILFENa!3PM1vw;29pj5Fy)Z#;`o2
zg6uo{&(xA0_JqQ#nJR*i`WB|w&m&vA+xy;p89{;Jyh|Jw^UATk;1*O>sr-Y0f(6lt
z_o*4OFT^(76A?Y~qfo8KoAd#Ew^N(C$tG}A3i`jhuPj7E{
z7j0$wR__b3FH^~0OqgL$*&&)3V-kx8WA9Ko!E9Rd?LU2tXad4tLoW)lzKg%hrjLMN
z^KQJNUiV&eb}oyOjM4EvP-2m`45l~cG?bN^t|_t%I$C~;2OoH+arQT7=$(9j)ol>M
zpS`?LB)p;<~1pS0zt>tETjZVh7tDN86n|-VvLuR}W+s;3cv#
zfinwmt@fLm9WI}=_4%@k&R&DON4}TxOHIAqjB=Q+J3J16Z)l1-%xbC0fv%6or=@`g
zIknd_CRvc^r;{HC^cKl)u<>B*ky=5^whrSyPg7d7xbgIj0VC#;wY4^?`Y<26l9Uvo(4%_TCV9@j_+vL@A>kG
zIMp?j(o8IYLGxU5RH(hk$$i@&5~4UyiLtN4g0vB9I}lsrz&6wAA4c
zRXheLC8U;pIjg2v(ZFDB-EsvQF!lVLz`-Dya^M2=i3<*PhBcJFM5jGDpl)ks@KN+N
z-*+)B<{kA$T
zblmXuik&=1o%>sFbx!e!bxM#$p?;Uh79bHI7~TZno+^WUQ3MfdRoR(;Nk{wGiz&0tgzHWnheXVR72yi@q~FJNUBplke1kbnK<#OCOyP
zunEAMh);FA;+>3*9F&Vl^#dQ;5eWy5ng>Y*nJ*>
zLgU)G)C)~BcXH4fauF@w_8DD$4Q^yD+exZ1LEX@{y@#CwaDVW
ztXnx*DCOXlS%v};Am~*OWqNbOo7PibWm`Cs3$WJ;Q0@S8+)?d{Z*+%ri<)nY!FG84
z(FzdW#GC7tm
zyKEcvfPk>vuT5}vw8#R0fMSv}9O;KtQireJ7y$1ntBiheS!j)t(#t7&xha@Ffl6I8yvb^-@s9
z;J^U0xW@|yGu}c2AaB>qf1k^4x2E~gS6Rj|FTE)qV(a%HJ7Ms6sZe_e6y>vCC36-@
z346HT{AQQSLCs>2U{G3FpYz4_5$2)V4B}fd1j%UrMDDyN4Gw&(2&Ys75lOra6g51d
z2G%j-UF>3BrydCnXc|-RiFMm|JcOKiRW1i(ltqbI!Mbs8RPF1I=JO9#9oPJDfGlNV
zb#8YSH?oEPlcV47015SDyOIyb#5n?)&%V4E1AhK=cL%V=tRz5#w5-MfAVpsl8jLk!
z3p(AaODaVlxw=L^I4V8pgE@OPTy+!5rHGQi)P7hMhBy=kK9IL|$08an(hKh8@4>09
zDk?b5+CVKJbrNR?nm!S&t#_h)c`GPr`)#Wc!dGRkF5@eoVxdK>!&}YO0QcCyt5E2X
z)^@e$5WJKgnkVAD^CIDB*kloYWhnPj!3d#QBRvIhX12hF>g?tOh)Oaa3;~Tj2;>5oQs6IfQyJYs;zi%KCAPb4X`(>Me-JN|H7C!G
z#ixFVK~tYTB~cd<@4Ribd`*AMSHg?!>Z*<8#SZ2&fN}+xm;$OpVjOR{klfeJj@pqb
z*>-O%K|s!lIhFnkJljE37X%0_kv#6yX2RJXp&ob2nojaxqXJUcn?~RJby9r?FTbR=
z@t;9_2sd0^UbTOit6?`5QKd_*-83|m#Vz8gM?{qM=6}3tO)*YCjO4c(9<)@;t}u=~
zKbfRz2c~v&HQwap(tePikdeyS6brf5_HjgX@Xdg%JeO7eg>=RLR
zPES7L(6h|_()JypW$0Cw+d{JU-d=MAIN?ug#447JtgEwc)Z!n9Cs4K|K`6ca89WbK
z{D>`J6N4;I(+W=ugfjCZKM@?;Ag3JNetR}G`_6T#B5uFY(Y@{{ndh0IJQ!xkiznBe
z?50J<;<(JKUW^$qKP;n(f}H#;5r?VDPT%(W7IDqocJAE9X)pbrwaH}mxYJ~xpTHRZ
z=vaeQ-?Q2dm$W!=GboO4RsQ)n5W3+-2^abAq>KSk))?w^x8gvSIN(BxG%GbIyyx?27l+@ai}~
zX|%D))8sm?&M}m=f*L=S8l{S)T0xS~Gk%Mj_v*78ok{j4{SH0N2J7Lz>$s%qaNpE$
zSY(XF6#bbeC0`9Rahv}#xhDy%uP)639_Fqw_a(L&R?Q|Zon;PFe;#!hp+)MbS2VO>
zuWTd}V>unz2^ucYyEFLnw%TTHTn8U-rT4m%`=*rl11`_38I)DO!)~*|N1UXN-iBb@
zk%iwhgxE1nw{~Py|8d;8a>oKb=@NG!%hlEim+jQVTFb|Cj~$`MoTRqs?t$v5JbuqaEt;U^{6d$+70a
zR6FlV5_$zz?!@PGD#r7UZW#YKoU3S+#W=q=qZ{FHL!X!Tic5EYaLU
z4`{R4RBovUU1(|*h7@cYgMDCz{rA{Gm-IKE)?
z6@MtPk8^yX`{e@E6}ksm53ihLI#B)?URm0{U#jRmyn1-(2i?PcZ+bNIe&%aHksF%D
zuokbaz0?KVH3{}AB676-155rRg?r)+cWeDq_DDh!vSG!tJs{Fvi&WkAkU_L%#31Sx
z9$Y!j^Y=V}so>+=^PwMS!9epyik3FjDOzrJ+HGA#MN(=R$@7bt$Nf$~2wKehQmUF;
z7IDBtOqZgK_GABL2?xk<&;5^gv$R=+^HG2<0eO)^QGszGd9aGX7EvIc#|u{Fwl>!G
zj!p5;k#nWsJM3kdlREI4JE1{F7Un=}M~d
zz^>`BJ}hf@)SKoVlGErkX}x3{U8YE!y9}p{Y<9HdE6(gvjq$I$tz%4D8{{-b4B~y?S3ehFyq4CcC93OoOQ?@pz%o#{ZJhXj
zs^0ThT5Ys~NANkyR6k=?+C~&W>H{*XINP5W+L{@PV&QX?ypddc=7x{#p7i)RkzzV_
zrFJ)aa7j1xXOgs>?6jBGUPQ)Cc)7gsTO8|wNH}4EwnZm|zgzc6QHzs8$0G|?=mHA=
zhxW-nVN1)(+B@2}p7qwTf-u}5kb8}xI=~7Bia=ptED?8vHOSP%wH<~^5k@m2{Sv3e
zHwpQXj-R%5+Z^O0<0rh#frhK6t|IrRC3Y9mi|5saT}*z2@2-niRBS|VKV+HwR#|6+
z)WZGa0B>SW^F2OhAwTDSTTW?-!-2Kyj?asZ3h5I8P6CY?dP`50M%=0bb`Ou>$^zgl
z#&|-eq6*`BJZ_r0@`m1qpT}fZf*sV}dqZUn7_7%53T|a`l4tQ^+Sz#YAnC_gkJZN&
zZ}T_%yl*t~=l_XZ|5p3Yx_rm5J(u?P-V6({I!w>dkXup>`SYO4FyEzQ$dSt?d$dvA
zMpefyk3B)bxPJidBRD+mW!~tJwB5iH2YH`25BC)u+OmZ2)NM|sxJwe9NQ9ybM7$0;
z>~OFyun4(wI^5qbv+9YL
z{7H^ee+=lruEcJzX~{lhJPkxL?_EgawkNza#_zEX-!Sga$&R}v7~ooY!x)=Zf>Om7
ze>ig8=Ryk_SCyD!3%kfkX26kdJ9B=zyX&OX1LO#a5GM3cmT^-~X#4#C*rQdC{iUjf
zg$1w9Tt|u?&_l-wVdzwUANE)+rIAkoy(ZARh}{mMUh;`&HJX5sXroK=~8W|M`$q$oq?{H$F!Wb&ol
z?197~qdR7X%DR4Q!qDY%G
zsWyb8+H4l7e$j=6o=!fe#Nx#vnW8-w{mI?W$SLv=sJOA)O2YMeR;X{DUhyFfO%Yz|
z(|-27JBqd&Ax~&8%BPl;&h<7`=#>HMqvDN!c(?O#GP$?MW#lmB{v3&N^Uc|CriaTE
z^DioKIH#A)FYhny0loRt-0K^F1JRI`SEUk7-K^gW*Xe=T
zsl29#mT^<<2Lu*+jL3&eez4kAl<2)ORob#Tu4I9V)#cP6IB=g_k-#{j*H_Lx-`foajw^riYG()h>B0bI}n$Zz#w+UgHkZB=--A@fdHpJ>BSG9GcKI
z?OnZ8C##b~JL&PPjaw`K4Cz${nFV%6Txq!HrHqC3g1
z7&!I)vs7WO+2ZV}NGU>T$3pb-JNy51|6~jYfcuT-Hm-GB)0aqKw!OkC>$%ChB>Yo8
z%YZvfUh>>L%Aq+jGRE)X^y}ceo4fS){dSikVNt`PCZias;&KWrJ$1qr4{HcRDah
z8`&N+)=GMNQlqohsYF7Y`whVM3|-8eda)Wh+Y-fNINk(Oy_Q5jmEYmW>)}#MY?Yy-
zjvGod&AjaI6#s8WDUEzD;2G1h*4@(sLD?^H71gQ(ek#0!mc+xuV}$mq7y%i()=X;T
zD8)|!Yzi{6rCTX@unuY^di2b0mjv=IoJzk=tcU=`8t-pr*lB1_`8*#i%u6&S#m?3#
z$fl`!EbZS}iHnAZBG2B(bCG_uo+V|`Nxakck@U2f9?*gv@(2L(Cejq{4JU-!T1k|M
zkEeXzZ~1Sgcij9d&FCotVq`+l3ga<7acA1-E3p!vSce~wmuiJ3?Wy9THa{+6`dD4^DE$+^SM+`s0mEJXfg|=vkmqwVd||
zqV2z!{6Fn}c=BG*5_H%*ab-GTw|83HbxBOscdK7EO-XNaG%M~QJKbdR4;*$EL|SWH
z*{3Ipe|j|4DTNVnv`N_DQLdgv2U4V!+Xd@IEf~MA^0aRN2JJ@(-vmu37iU0CqanB5
zA`IN-YVaR@yivR3&b)^&x=nB${_jMS0Uf_tl9l%BU~E8hO71x0z)7QJSZ+?FJ_g$i
z#%L~vb&d1$LC3EG%faOCEYuIR+WZOb7~xk1ZJ@-&jR-n=ZbZ_%A8I-FL%Qqs)rSJntwaEHH-6j`Nd(ODpb2=1rIPU2%jq||7Id6inhWj1tlKVRv%2GEm
zN+*HsB7nEO4Bof-IVHd!1~I^E`0NA-CDvNOtBg>wFYEEF`EEYyD3S`H{ts8ui$)EX
z9d_{8hQS!VYyrKC8F;vEfl(lC=YXNa=e?MtX=nZNA2{1yE{l3F@A|0g
z5af1bPv|;;EDIjG=xs!%l6E&b?GCcBvk%3mpo@mY>}$rHsrHwTB8UPMfY|PG{CRr>
z(8OomcTg9
z!Mm&8b?|8daDF8zVEll(rwKZ5xZj){S;ryXYrbETd}kg`@oO-D$?T>K5ajFO>*3de
zHsQC%U?o*7E?51aM=esEduytcP~x|$bxi8`4)rcV%3bKFX*JX@+Ib1&B()#N*Rtq6
z4_CPPQ#il0TG_i14J$`^K
z108vGv&yc^-x8_b=w`zxiT|3{zkZMLHUKsZ2X%vtc0D;U>o&y1{7t)2PMx{o$*Cf5
zUYG>7Z`fHfWF9K<_dNae)t^Hn(2%weY=J}p?`pd?_sN60^-Wk8k0CJ;8{_D9e|nP{
zXj1s!n=Hh4ltFBby|EB+$I8nlV^vLl;SFB?OQX9&k-HdAUL-H|l9(f|!h5$Ndvx{s*~`H>b>F7|MEp(BCBeSI$mJzlMEjg
z7fZK;&REbcmanq<&5iBm@NT5t$nJ@=+7><*^Hj?i}U@a
zYIv1YWN+mcvvz1X6ii+Ux9WgmtbR*q{~EgaTOiOA4F4_5{PW$b^N)Tb3;>?t?{A&^
zt(JNWkN)}Gl!^LnV;ErRe?5%A{=I);Y62P6UvFA3{zhy8BGbR#NCyHQgXOm%QOV^Yi0o)3I&u82l2n|B>#O)PDqZ6Y=|wssBIXXf}lf`~SHS@!!O5
z1O7!g`}Zm2`L$#0-(`pT2Zs7fS^{6*w}LRclOz_K`)3#>$u0xL-Q(>e*XIZ
E0GO3meEYfZY?FNLAv9(f(NHlc
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
O3t((uai&DiJ>nmL<2&{M
literal 0
HcmV?d00001
diff --git a/docs/wiki/media/pipelineStart3.png b/docs/wiki/media/pipelineStart3.png
new file mode 100644
index 0000000000000000000000000000000000000000..eb5e03f27fd54f12b4d51893d2a4afadf7d3897e
GIT binary patch
literal 95912
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