diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index 75ec6283bd..7fbd58562d 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -1,6 +1,6 @@ name: '.Platform: Linter' -on: [pull_request] +on: workflow_dispatch jobs: build: @@ -33,7 +33,7 @@ jobs: id: checker uses: lycheeverse/lychee-action@v1.1.1 with: - args: --verbose --no-progress **/*.md --exclude-file .lycheeignore --accept 200,201,403,429 + args: --verbose --no-progress **/docs/**/*.md --accept 200,201,403,429 env: GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} diff --git a/arm/Microsoft.Automation/automationAccounts/deploy.bicep b/arm/Microsoft.Automation/automationAccounts/deploy.bicep index c925a453bf..7a475462d6 100644 --- a/arm/Microsoft.Automation/automationAccounts/deploy.bicep +++ b/arm/Microsoft.Automation/automationAccounts/deploy.bicep @@ -198,7 +198,7 @@ module automationAccount_jobSchedules 'jobSchedules/deploy.bicep' = [for (jobSch }] module automationAccount_variables 'variables/deploy.bicep' = [for (variable, index) in variables: { - name: '${uniqueString(deployment().name, location)}-AutoAccount-variable-${index}' + name: '${uniqueString(deployment().name, location)}-AutoAccount-Variable-${index}' params: { automationAccountName: automationAccount.name name: variable.name @@ -310,7 +310,7 @@ resource automationAccount_diagnosticSettings 'Microsoft.Insights/diagnosticSett } module automationAccount_privateEndpoints '.bicep/nested_privateEndpoint.bicep' = [for (endpoint, index) in privateEndpoints: if (!empty(privateEndpoints)) { - name: '${uniqueString(deployment().name, location)}-AutoAccount-PrivateEndpoints-${index}' + name: '${uniqueString(deployment().name, location)}-AutoAccount-PrivateEndpoint-${index}' params: { privateEndpointResourceId: automationAccount.id privateEndpointVnetLocation: (empty(privateEndpoints) ? 'dummy' : reference(split(endpoint.subnetResourceId, '/subnets/')[0], '2020-06-01', 'Full').location) diff --git a/arm/Microsoft.Compute/availabilitySets/deploy.bicep b/arm/Microsoft.Compute/availabilitySets/deploy.bicep index 7df4ffd083..687c53f292 100644 --- a/arm/Microsoft.Compute/availabilitySets/deploy.bicep +++ b/arm/Microsoft.Compute/availabilitySets/deploy.bicep @@ -62,7 +62,7 @@ resource availabilitySet_lock 'Microsoft.Authorization/locks@2016-09-01' = if (l } module availabilitySet_rbac '.bicep/nested_rbac.bicep' = [for (roleAssignment, index) in roleAssignments: { - name: '${deployment().name}-rbac-${index}' + name: '${uniqueString(deployment().name, location)}-AvSet-Rbac-${index}' params: { principalIds: roleAssignment.principalIds roleDefinitionIdOrName: roleAssignment.roleDefinitionIdOrName diff --git a/arm/Microsoft.Compute/diskEncryptionSets/deploy.bicep b/arm/Microsoft.Compute/diskEncryptionSets/deploy.bicep index 106668ce83..332fd6cae3 100644 --- a/arm/Microsoft.Compute/diskEncryptionSets/deploy.bicep +++ b/arm/Microsoft.Compute/diskEncryptionSets/deploy.bicep @@ -63,7 +63,7 @@ resource diskEncryptionSet 'Microsoft.Compute/diskEncryptionSets@2020-12-01' = { } module diskEncryptionSet_rbac '.bicep/nested_rbac.bicep' = [for (roleAssignment, index) in roleAssignments: { - name: '${deployment().name}-rbac-${index}' + name: '${uniqueString(deployment().name, location)}-DiskEncrSet-Rbac-${index}' params: { principalIds: roleAssignment.principalIds roleDefinitionIdOrName: roleAssignment.roleDefinitionIdOrName diff --git a/arm/Microsoft.Compute/galleries/deploy.bicep b/arm/Microsoft.Compute/galleries/deploy.bicep index 38cc47dc08..fa4d9e153f 100644 --- a/arm/Microsoft.Compute/galleries/deploy.bicep +++ b/arm/Microsoft.Compute/galleries/deploy.bicep @@ -53,7 +53,7 @@ resource gallery_lock 'Microsoft.Authorization/locks@2016-09-01' = if (lock != ' } module gallery_rbac '.bicep/nested_rbac.bicep' = [for (roleAssignment, index) in roleAssignments: { - name: '${uniqueString(deployment().name, location)}-rbac-${index}' + name: '${uniqueString(deployment().name, location)}-Gallery-Rbac-${index}' params: { principalIds: roleAssignment.principalIds roleDefinitionIdOrName: roleAssignment.roleDefinitionIdOrName @@ -63,7 +63,7 @@ module gallery_rbac '.bicep/nested_rbac.bicep' = [for (roleAssignment, index) in // Images module galleries_images 'images/deploy.bicep' = [for (image, index) in images: { - name: '${uniqueString(deployment().name, location)}-Image-${index}' + name: '${uniqueString(deployment().name, location)}-Gallery-Image-${index}' params: { name: image.name galleryName: gallery.name diff --git a/arm/Microsoft.Compute/galleries/images/deploy.bicep b/arm/Microsoft.Compute/galleries/images/deploy.bicep index 8f1d89d38f..1b8d10d798 100644 --- a/arm/Microsoft.Compute/galleries/images/deploy.bicep +++ b/arm/Microsoft.Compute/galleries/images/deploy.bicep @@ -144,7 +144,7 @@ resource image 'Microsoft.Compute/galleries/images@2020-09-30' = { } module galleryImage_rbac '.bicep/nested_rbac.bicep' = [for (roleAssignment, index) in roleAssignments: { - name: '${deployment().name}-rbac-${index}' + name: '${deployment().name}-Rbac-${index}' params: { principalIds: roleAssignment.principalIds roleDefinitionIdOrName: roleAssignment.roleDefinitionIdOrName diff --git a/arm/Microsoft.Compute/images/deploy.bicep b/arm/Microsoft.Compute/images/deploy.bicep index ab230818fe..eb3a19bf7e 100644 --- a/arm/Microsoft.Compute/images/deploy.bicep +++ b/arm/Microsoft.Compute/images/deploy.bicep @@ -56,7 +56,7 @@ resource image 'Microsoft.Compute/images@2021-04-01' = { } module image_rbac '.bicep/nested_rbac.bicep' = [for (roleAssignment, index) in roleAssignments: { - name: '${deployment().name}-rbac-${index}' + name: '${uniqueString(deployment().name, location)}-Image-Rbac-${index}' params: { principalIds: roleAssignment.principalIds roleDefinitionIdOrName: roleAssignment.roleDefinitionIdOrName diff --git a/arm/Microsoft.Compute/proximityPlacementGroups/deploy.bicep b/arm/Microsoft.Compute/proximityPlacementGroups/deploy.bicep index ee15ee087f..152fa60727 100644 --- a/arm/Microsoft.Compute/proximityPlacementGroups/deploy.bicep +++ b/arm/Microsoft.Compute/proximityPlacementGroups/deploy.bicep @@ -52,7 +52,7 @@ resource proximityPlacementGroup_lock 'Microsoft.Authorization/locks@2016-09-01' } module proximityPlacementGroup_rbac '.bicep/nested_rbac.bicep' = [for (roleAssignment, index) in roleAssignments: { - name: '${deployment().name}-rbac-${index}' + name: '${uniqueString(deployment().name, location)}-ProxPlaceGroup-Rbac-${index}' params: { principalIds: roleAssignment.principalIds roleDefinitionIdOrName: roleAssignment.roleDefinitionIdOrName diff --git a/arm/Microsoft.Compute/virtualMachineScaleSets/deploy.bicep b/arm/Microsoft.Compute/virtualMachineScaleSets/deploy.bicep index 7f8af299b9..bef0dd1e46 100644 --- a/arm/Microsoft.Compute/virtualMachineScaleSets/deploy.bicep +++ b/arm/Microsoft.Compute/virtualMachineScaleSets/deploy.bicep @@ -447,7 +447,7 @@ resource vmss 'Microsoft.Compute/virtualMachineScaleSets@2021-04-01' = { } module vmss_domainJoinExtension 'extensions/deploy.bicep' = if (extensionDomainJoinConfig.enabled) { - name: '${uniqueString(deployment().name, location)}-vmss-DomainJoin' + name: '${uniqueString(deployment().name, location)}-VMSS-DomainJoin' params: { virtualMachineScaleSetName: vmss.name name: 'DomainJoin' @@ -464,7 +464,7 @@ module vmss_domainJoinExtension 'extensions/deploy.bicep' = if (extensionDomainJ } module vmss_microsoftAntiMalwareExtension 'extensions/deploy.bicep' = if (extensionAntiMalwareConfig.enabled) { - name: '${uniqueString(deployment().name, location)}-vmss-MicrosoftAntiMalware' + name: '${uniqueString(deployment().name, location)}-VMSS-MicrosoftAntiMalware' params: { virtualMachineScaleSetName: vmss.name name: 'MicrosoftAntiMalware' @@ -483,7 +483,7 @@ resource vmss_logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@20 } module vmss_microsoftMonitoringAgentExtension 'extensions/deploy.bicep' = if (extensionMonitoringAgentConfig.enabled) { - name: '${uniqueString(deployment().name, location)}-vmss-MicrosoftMonitoringAgent' + name: '${uniqueString(deployment().name, location)}-VMSS-MicrosoftMonitoringAgent' params: { virtualMachineScaleSetName: vmss.name name: 'MicrosoftMonitoringAgent' @@ -502,7 +502,7 @@ module vmss_microsoftMonitoringAgentExtension 'extensions/deploy.bicep' = if (ex } module vmss_dependencyAgentExtension 'extensions/deploy.bicep' = if (extensionDependencyAgentConfig.enabled) { - name: '${uniqueString(deployment().name, location)}-vmss-DependencyAgent' + name: '${uniqueString(deployment().name, location)}-VMSS-DependencyAgent' params: { virtualMachineScaleSetName: vmss.name name: 'DependencyAgent' @@ -515,7 +515,7 @@ module vmss_dependencyAgentExtension 'extensions/deploy.bicep' = if (extensionDe } module vmss_networkWatcherAgentExtension 'extensions/deploy.bicep' = if (extensionNetworkWatcherAgentConfig.enabled) { - name: '${uniqueString(deployment().name, location)}-vmss-NetworkWatcherAgent' + name: '${uniqueString(deployment().name, location)}-VMSS-NetworkWatcherAgent' params: { virtualMachineScaleSetName: vmss.name name: 'NetworkWatcherAgent' @@ -528,7 +528,7 @@ module vmss_networkWatcherAgentExtension 'extensions/deploy.bicep' = if (extensi } module vmss_desiredStateConfigurationExtension 'extensions/deploy.bicep' = if (extensionDSCConfig.enabled) { - name: '${uniqueString(deployment().name, location)}-vmss-DesiredStateConfiguration' + name: '${uniqueString(deployment().name, location)}-VMSS-DesiredStateConfiguration' params: { virtualMachineScaleSetName: vmss.name name: 'DesiredStateConfiguration' @@ -543,7 +543,7 @@ module vmss_desiredStateConfigurationExtension 'extensions/deploy.bicep' = if (e } module vmss_customScriptExtension 'extensions/deploy.bicep' = if (extensionCustomScriptConfig.enabled) { - name: '${uniqueString(deployment().name, location)}-vmss-CustomScriptExtension' + name: '${uniqueString(deployment().name, location)}-VMSS-CustomScriptExtension' params: { virtualMachineScaleSetName: vmss.name name: 'CustomScriptExtension' @@ -563,7 +563,7 @@ module vmss_customScriptExtension 'extensions/deploy.bicep' = if (extensionCusto } module vmss_diskEncryptionExtension 'extensions/deploy.bicep' = if (extensionDiskEncryptionConfig.enabled) { - name: '${uniqueString(deployment().name, location)}-vmss-DiskEncryption' + name: '${uniqueString(deployment().name, location)}-VMSS-DiskEncryption' params: { virtualMachineScaleSetName: vmss.name name: 'DiskEncryption' @@ -603,7 +603,7 @@ resource vmss_diagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05- } module vmss_rbac '.bicep/nested_rbac.bicep' = [for (roleAssignment, index) in roleAssignments: { - name: '${deployment().name}-rbac-${index}' + name: '${uniqueString(deployment().name, location)}-VMSS-Rbac-${index}' params: { principalIds: roleAssignment.principalIds roleDefinitionIdOrName: roleAssignment.roleDefinitionIdOrName diff --git a/arm/Microsoft.Compute/virtualMachines/.bicep/nested_networkInterface.bicep b/arm/Microsoft.Compute/virtualMachines/.bicep/nested_networkInterface.bicep index 69e81d6bb5..dc9e755dab 100644 --- a/arm/Microsoft.Compute/virtualMachines/.bicep/nested_networkInterface.bicep +++ b/arm/Microsoft.Compute/virtualMachines/.bicep/nested_networkInterface.bicep @@ -37,7 +37,7 @@ var networkSecurityGroup = { } module networkInterface_publicIPConfigurations 'nested_networkInterface_publicIPAddress.bicep' = [for (ipConfiguration, index) in ipConfigurationArray: if (contains(ipConfiguration, 'pipconfiguration')) { - name: '${deployment().name}-pip-${index}' + name: '${deployment().name}-PIP-${index}' params: { publicIPAddressName: '${virtualMachineName}${ipConfiguration.pipconfiguration.publicIpNameSuffix}' publicIPPrefixId: (contains(ipConfiguration.pipconfiguration, 'publicIPPrefixId') ? (!(empty(ipConfiguration.pipconfiguration.publicIPPrefixId)) ? ipConfiguration.pipconfiguration.publicIPPrefixId : '') : '') @@ -107,7 +107,7 @@ resource networkInterface_diagnosticSettings 'Microsoft.Insights/diagnosticsetti } module networkInterface_rbac 'nested_networkInterface_rbac.bicep' = [for (roleAssignment, index) in roleAssignments: { - name: '${deployment().name}-rbac-${index}' + name: '${deployment().name}-Rbac-${index}' params: { principalIds: roleAssignment.principalIds roleDefinitionIdOrName: roleAssignment.roleDefinitionIdOrName diff --git a/arm/Microsoft.Compute/virtualMachines/.bicep/nested_networkInterface_publicIPAddress.bicep b/arm/Microsoft.Compute/virtualMachines/.bicep/nested_networkInterface_publicIPAddress.bicep index ff4721a213..5f98e281b5 100644 --- a/arm/Microsoft.Compute/virtualMachines/.bicep/nested_networkInterface_publicIPAddress.bicep +++ b/arm/Microsoft.Compute/virtualMachines/.bicep/nested_networkInterface_publicIPAddress.bicep @@ -75,7 +75,7 @@ resource publicIpAddress_diagnosticSettings 'Microsoft.Insights/diagnosticsettin } module publicIpAddress_rbac 'nested_networkInterface_publicIPAddress_rbac.bicep' = [for (roleAssignment, index) in roleAssignments: { - name: '${deployment().name}-rbac-${index}' + name: '${deployment().name}-Rbac-${index}' params: { principalIds: roleAssignment.principalIds roleDefinitionIdOrName: roleAssignment.roleDefinitionIdOrName diff --git a/arm/Microsoft.Compute/virtualMachines/deploy.bicep b/arm/Microsoft.Compute/virtualMachines/deploy.bicep index 722b6463ef..8d6e028ddd 100644 --- a/arm/Microsoft.Compute/virtualMachines/deploy.bicep +++ b/arm/Microsoft.Compute/virtualMachines/deploy.bicep @@ -303,7 +303,7 @@ module pid_cuaId '.bicep/nested_cuaId.bicep' = if (!empty(cuaId)) { } module virtualMachine_nic '.bicep/nested_networkInterface.bicep' = [for (nicConfiguration, index) in nicConfigurations: { - name: '${uniqueString(deployment().name, location)}-vm-nic-${index}' + name: '${uniqueString(deployment().name, location)}-VM-Nic-${index}' params: { networkInterfaceName: '${name}${nicConfiguration.nicSuffix}' virtualMachineName: name @@ -403,7 +403,7 @@ resource virtualMachine 'Microsoft.Compute/virtualMachines@2021-07-01' = { } module vm_domainJoinExtension 'extensions/deploy.bicep' = if (extensionDomainJoinConfig.enabled) { - name: '${uniqueString(deployment().name, location)}-vm-DomainJoin' + name: '${uniqueString(deployment().name, location)}-VM-DomainJoin' params: { virtualMachineName: virtualMachine.name name: 'DomainJoin' @@ -420,7 +420,7 @@ module vm_domainJoinExtension 'extensions/deploy.bicep' = if (extensionDomainJoi } module vm_microsoftAntiMalwareExtension 'extensions/deploy.bicep' = if (extensionAntiMalwareConfig.enabled) { - name: '${uniqueString(deployment().name, location)}-vm-MicrosoftAntiMalware' + name: '${uniqueString(deployment().name, location)}-VM-MicrosoftAntiMalware' params: { virtualMachineName: virtualMachine.name name: 'MicrosoftAntiMalware' @@ -439,7 +439,7 @@ resource vm_logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2021 } module vm_microsoftMonitoringAgentExtension 'extensions/deploy.bicep' = if (extensionMonitoringAgentConfig.enabled) { - name: '${uniqueString(deployment().name, location)}-vm-MicrosoftMonitoringAgent' + name: '${uniqueString(deployment().name, location)}-VM-MicrosoftMonitoringAgent' params: { virtualMachineName: virtualMachine.name name: 'MicrosoftMonitoringAgent' @@ -458,7 +458,7 @@ module vm_microsoftMonitoringAgentExtension 'extensions/deploy.bicep' = if (exte } module vm_dependencyAgentExtension 'extensions/deploy.bicep' = if (extensionDependencyAgentConfig.enabled) { - name: '${uniqueString(deployment().name, location)}-vm-DependencyAgent' + name: '${uniqueString(deployment().name, location)}-VM-DependencyAgent' params: { virtualMachineName: virtualMachine.name name: 'DependencyAgent' @@ -471,7 +471,7 @@ module vm_dependencyAgentExtension 'extensions/deploy.bicep' = if (extensionDepe } module vm_networkWatcherAgentExtension 'extensions/deploy.bicep' = if (extensionNetworkWatcherAgentConfig.enabled) { - name: '${uniqueString(deployment().name, location)}-vm-NetworkWatcherAgent' + name: '${uniqueString(deployment().name, location)}-VM-NetworkWatcherAgent' params: { virtualMachineName: virtualMachine.name name: 'NetworkWatcherAgent' @@ -484,7 +484,7 @@ module vm_networkWatcherAgentExtension 'extensions/deploy.bicep' = if (extension } module vm_desiredStateConfigurationExtension 'extensions/deploy.bicep' = if (extensionDSCConfig.enabled) { - name: '${uniqueString(deployment().name, location)}-vm-DesiredStateConfiguration' + name: '${uniqueString(deployment().name, location)}-VM-DesiredStateConfiguration' params: { virtualMachineName: virtualMachine.name name: 'DesiredStateConfiguration' @@ -499,7 +499,7 @@ module vm_desiredStateConfigurationExtension 'extensions/deploy.bicep' = if (ext } module vm_customScriptExtension 'extensions/deploy.bicep' = if (extensionCustomScriptConfig.enabled) { - name: '${uniqueString(deployment().name, location)}-vm-CustomScriptExtension' + name: '${uniqueString(deployment().name, location)}-VM-CustomScriptExtension' params: { virtualMachineName: virtualMachine.name name: 'CustomScriptExtension' @@ -519,7 +519,7 @@ module vm_customScriptExtension 'extensions/deploy.bicep' = if (extensionCustomS } module vm_diskEncryptionExtension 'extensions/deploy.bicep' = if (extensionDiskEncryptionConfig.enabled) { - name: '${uniqueString(deployment().name, location)}-vm-DiskEncryption' + name: '${uniqueString(deployment().name, location)}-VM-DiskEncryption' params: { virtualMachineName: virtualMachine.name name: 'DiskEncryption' @@ -538,7 +538,7 @@ module vm_diskEncryptionExtension 'extensions/deploy.bicep' = if (extensionDiskE } module virtualMachine_backup '.bicep/nested_backup.bicep' = if (!empty(backupVaultName)) { - name: '${uniqueString(deployment().name, location)}-vm-backup' + name: '${uniqueString(deployment().name, location)}-VM-Backup' params: { backupResourceName: '${backupVaultName}/Azure/iaasvmcontainer;iaasvmcontainerv2;${resourceGroup().name};${virtualMachine.name}/vm;iaasvmcontainerv2;${resourceGroup().name};${virtualMachine.name}' protectedItemType: 'Microsoft.Compute/virtualMachines' @@ -568,7 +568,7 @@ resource virtualMachine_lock 'Microsoft.Authorization/locks@2017-04-01' = if (lo } module virtualMachine_rbac '.bicep/nested_rbac.bicep' = [for (roleAssignment, index) in roleAssignments: { - name: '${uniqueString(deployment().name, location)}-vm-rbac-${index}' + name: '${uniqueString(deployment().name, location)}-VM-Rbac-${index}' params: { principalIds: roleAssignment.principalIds roleDefinitionIdOrName: roleAssignment.roleDefinitionIdOrName diff --git a/arm/Microsoft.ContainerRegistry/registries/deploy.bicep b/arm/Microsoft.ContainerRegistry/registries/deploy.bicep index 6c72ecf73b..b0167f3a6b 100644 --- a/arm/Microsoft.ContainerRegistry/registries/deploy.bicep +++ b/arm/Microsoft.ContainerRegistry/registries/deploy.bicep @@ -182,7 +182,7 @@ resource registry_diagnosticSettingName 'Microsoft.Insights/diagnosticsettings@2 } module registry_rbac '.bicep/nested_rbac.bicep' = [for (roleAssignment, index) in roleAssignments: { - name: '${deployment().name}-rbac-${index}' + name: '${uniqueString(deployment().name, location)}-ContainerRegistry-Rbac-${index}' params: { principalIds: roleAssignment.principalIds roleDefinitionIdOrName: roleAssignment.roleDefinitionIdOrName @@ -190,8 +190,8 @@ module registry_rbac '.bicep/nested_rbac.bicep' = [for (roleAssignment, index) i } }] -module registry_privateEndpoints '.bicep/nested_privateEndpoints.bicep' = [for privateEndpoint in privateEndpoints: { - name: '${uniqueString(deployment().name, privateEndpoint.name)}-privateEndpoint' +module registry_privateEndpoints '.bicep/nested_privateEndpoints.bicep' = [for (privateEndpoint, index) in privateEndpoints: { + name: '${uniqueString(deployment().name, location)}-ContainerRegistry-PrivateEndpoint-${index}' params: { privateEndpointResourceId: registry.id privateEndpointVnetLocation: empty(privateEndpoints) ? 'dummy' : reference(split(privateEndpoint.subnetResourceId, '/subnets/')[0], '2020-06-01', 'Full').location diff --git a/arm/Microsoft.EventGrid/topics/deploy.bicep b/arm/Microsoft.EventGrid/topics/deploy.bicep index a66830ec83..ef3158da9f 100644 --- a/arm/Microsoft.EventGrid/topics/deploy.bicep +++ b/arm/Microsoft.EventGrid/topics/deploy.bicep @@ -122,7 +122,7 @@ resource eventGrid_diagnosticSettings 'Microsoft.Insights/diagnosticsettings@201 } module eventGrid_privateEndpoints '.bicep/nested_privateEndpoint.bicep' = [for (privateEndpoint, index) in privateEndpoints: if (!empty(privateEndpoints)) { - name: '${uniqueString(deployment().name, location)}-EventGrid-PrivateEndpoints-${index}' + name: '${uniqueString(deployment().name, location)}-EventGrid-PrivateEndpoint-${index}' params: { privateEndpointResourceId: eventGrid.id privateEndpointVnetLocation: (empty(privateEndpoints) ? 'dummy' : reference(split(privateEndpoint.subnetResourceId, '/subnets/')[0], '2020-06-01', 'Full').location) @@ -132,7 +132,7 @@ module eventGrid_privateEndpoints '.bicep/nested_privateEndpoint.bicep' = [for ( }] module eventGrid_rbac '.bicep/nested_rbac.bicep' = [for (roleAssignment, index) in roleAssignments: { - name: '${deployment().name}-rbac-${index}' + name: '${uniqueString(deployment().name, location)}-EventGrid-Rbac-${index}' params: { principalIds: roleAssignment.principalIds roleDefinitionIdOrName: roleAssignment.roleDefinitionIdOrName diff --git a/arm/Microsoft.Insights/actionGroups/deploy.bicep b/arm/Microsoft.Insights/actionGroups/deploy.bicep index e0474a0671..08c650ab9b 100644 --- a/arm/Microsoft.Insights/actionGroups/deploy.bicep +++ b/arm/Microsoft.Insights/actionGroups/deploy.bicep @@ -75,7 +75,7 @@ resource actionGroup 'microsoft.insights/actionGroups@2019-06-01' = { } module actionGroup_rbac '.bicep/nested_rbac.bicep' = [for (roleAssignment, index) in roleAssignments: { - name: '${deployment().name}-rbac-${index}' + name: '${uniqueString(deployment().name, location)}-ActionGroup-Rbac-${index}' params: { principalIds: roleAssignment.principalIds roleDefinitionIdOrName: roleAssignment.roleDefinitionIdOrName diff --git a/arm/Microsoft.Insights/activityLogAlerts/deploy.bicep b/arm/Microsoft.Insights/activityLogAlerts/deploy.bicep index 34b01321c3..404c0d8f50 100644 --- a/arm/Microsoft.Insights/activityLogAlerts/deploy.bicep +++ b/arm/Microsoft.Insights/activityLogAlerts/deploy.bicep @@ -58,7 +58,7 @@ resource activityLogAlert 'Microsoft.Insights/activityLogAlerts@2020-10-01' = { } module activityLogAlert_rbac '.bicep/nested_rbac.bicep' = [for (roleAssignment, index) in roleAssignments: { - name: '${deployment().name}-rbac-${index}' + name: '${uniqueString(deployment().name, location)}-ActivityLogAlert-Rbac-${index}' params: { principalIds: roleAssignment.principalIds roleDefinitionIdOrName: roleAssignment.roleDefinitionIdOrName diff --git a/arm/Microsoft.Insights/components/deploy.bicep b/arm/Microsoft.Insights/components/deploy.bicep index bcfd1f2934..a9fac14def 100644 --- a/arm/Microsoft.Insights/components/deploy.bicep +++ b/arm/Microsoft.Insights/components/deploy.bicep @@ -59,7 +59,7 @@ resource appInsights 'Microsoft.Insights/components@2020-02-02' = { } module appInsights_rbac '.bicep/nested_rbac.bicep' = [for (roleAssignment, index) in roleAssignments: { - name: '${deployment().name}-rbac-${index}' + name: '${uniqueString(deployment().name, location)}-AppInsights-Rbac-${index}' params: { principalIds: roleAssignment.principalIds roleDefinitionIdOrName: roleAssignment.roleDefinitionIdOrName diff --git a/arm/Microsoft.Insights/metricAlerts/deploy.bicep b/arm/Microsoft.Insights/metricAlerts/deploy.bicep index 071eb9ae53..47e9428de0 100644 --- a/arm/Microsoft.Insights/metricAlerts/deploy.bicep +++ b/arm/Microsoft.Insights/metricAlerts/deploy.bicep @@ -113,7 +113,7 @@ resource metricAlert 'Microsoft.Insights/metricAlerts@2018-03-01' = { } module metricAlert_rbac '.bicep/nested_rbac.bicep' = [for (roleAssignment, index) in roleAssignments: { - name: '${deployment().name}-rbac-${index}' + name: '${uniqueString(deployment().name, location)}-MetricAlert-Rbac-${index}' params: { principalIds: roleAssignment.principalIds roleDefinitionIdOrName: roleAssignment.roleDefinitionIdOrName diff --git a/arm/Microsoft.Insights/privateLinkScopes/deploy.bicep b/arm/Microsoft.Insights/privateLinkScopes/deploy.bicep index 5a95a5f04c..da84b93f41 100644 --- a/arm/Microsoft.Insights/privateLinkScopes/deploy.bicep +++ b/arm/Microsoft.Insights/privateLinkScopes/deploy.bicep @@ -41,7 +41,7 @@ resource privateLinkScope 'Microsoft.Insights/privateLinkScopes@2019-10-17-previ } module privateLinkScope_scopedResource 'scopedResources/deploy.bicep' = [for (scopedResource, index) in scopedResources: { - name: '${uniqueString(deployment().name, location)}-Insights-ScpdRes-${index}' + name: '${uniqueString(deployment().name, location)}-PvtLinkScope-ScopedRes-${index}' params: { name: scopedResource.name privateLinkScopeName: privateLinkScope.name @@ -59,7 +59,7 @@ resource privateLinkScope_lock 'Microsoft.Authorization/locks@2016-09-01' = if ( } module privateLinkScope_privateEndpoints '.bicep/nested_privateEndpoint.bicep' = [for (endpoint, index) in privateEndpoints: { - name: '${uniqueString(deployment().name, location)}-Insights-PvtEndPnt-${index}' + name: '${uniqueString(deployment().name, location)}-PvtLinkScope-PrivateEndpoint-${index}' params: { privateEndpointResourceId: privateLinkScope.id privateEndpointVnetLocation: reference(split(endpoint.subnetResourceId, '/subnets/')[0], '2020-06-01', 'Full').location @@ -69,7 +69,7 @@ module privateLinkScope_privateEndpoints '.bicep/nested_privateEndpoint.bicep' = }] module privateLinkScope_rbac '.bicep/nested_rbac.bicep' = [for (roleAssignment, index) in roleAssignments: { - name: '${deployment().name}-rbac-${index}' + name: '${uniqueString(deployment().name, location)}-PvtLinkScope-Rbac-${index}' params: { principalIds: roleAssignment.principalIds roleDefinitionIdOrName: roleAssignment.roleDefinitionIdOrName diff --git a/arm/Microsoft.Insights/scheduledQueryRules/deploy.bicep b/arm/Microsoft.Insights/scheduledQueryRules/deploy.bicep index f7be392ff3..6dbc6368bc 100644 --- a/arm/Microsoft.Insights/scheduledQueryRules/deploy.bicep +++ b/arm/Microsoft.Insights/scheduledQueryRules/deploy.bicep @@ -99,7 +99,7 @@ resource queryRule 'Microsoft.Insights/scheduledQueryRules@2021-02-01-preview' = } module queryRule_rbac '.bicep/nested_rbac.bicep' = [for (roleAssignment, index) in roleAssignments: { - name: '${deployment().name}-rbac-${index}' + name: '${uniqueString(deployment().name, location)}-QueryRule-Rbac-${index}' params: { principalIds: roleAssignment.principalIds roleDefinitionIdOrName: roleAssignment.roleDefinitionIdOrName diff --git a/arm/Microsoft.Network/virtualNetworks/deploy.bicep b/arm/Microsoft.Network/virtualNetworks/deploy.bicep index e72405a788..ed5faeeb6d 100644 --- a/arm/Microsoft.Network/virtualNetworks/deploy.bicep +++ b/arm/Microsoft.Network/virtualNetworks/deploy.bicep @@ -11,6 +11,10 @@ param addressPrefixes array @minLength(1) param subnets array +@description('Optional. Resource Group where NSGs are deployed, if different than VNET Resource Group.') +@minLength(1) +param nsgResourceGroup string = resourceGroup().name + @description('Optional. DNS Servers associated to the Virtual Network.') param dnsServers array = [] @@ -116,7 +120,7 @@ resource virtualNetwork 'Microsoft.Network/virtualNetworks@2021-05-01' = { name: item.name properties: { addressPrefix: item.addressPrefix - networkSecurityGroup: contains(item, 'networkSecurityGroupName') ? (empty(item.networkSecurityGroupName) ? null : json('{"id": "${resourceId('Microsoft.Network/networkSecurityGroups', item.networkSecurityGroupName)}"}')) : null + networkSecurityGroup: contains(item, 'networkSecurityGroupName') ? (empty(item.networkSecurityGroupName) ? null : json('{"id": "${resourceId(nsgResourceGroup, 'Microsoft.Network/networkSecurityGroups', item.networkSecurityGroupName)}"}')) : null routeTable: contains(item, 'routeTableName') ? (empty(item.routeTableName) ? null : json('{"id": "${resourceId('Microsoft.Network/routeTables', item.routeTableName)}"}')) : null serviceEndpoints: contains(item, 'serviceEndpoints') ? (empty(item.serviceEndpoints) ? null : item.serviceEndpoints) : null delegations: contains(item, 'delegations') ? (empty(item.delegations) ? null : item.delegations) : null diff --git a/arm/Microsoft.Network/virtualNetworks/readme.md b/arm/Microsoft.Network/virtualNetworks/readme.md index 7c5811cb68..4fe7f5e8bd 100644 --- a/arm/Microsoft.Network/virtualNetworks/readme.md +++ b/arm/Microsoft.Network/virtualNetworks/readme.md @@ -31,6 +31,7 @@ This template deploys a virtual network (vNet). | `name` | string | | | Required. The Virtual Network (vNet) Name. | | `roleAssignments` | array | `[]` | | Optional. Array of role assignment objects that contain the 'roleDefinitionIdOrName' and 'principalId' to define RBAC role assignments on this resource. In the roleDefinitionIdOrName attribute, you can provide either the display name of the role definition, or its fully qualified ID in the following format: '/providers/Microsoft.Authorization/roleDefinitions/c2f4ef07-c644-48eb-af81-4b1b4947fb11' | | `subnets` | array | | | Required. An Array of subnets to deploy to the Virual Network. | +| `nsgResourceGroup` | string | `[resourceGroup().name]` | | Optional. Resource Group where NSGs are deployed, if different than VNET Resource Group. | | `tags` | object | `{object}` | | Optional. Tags of the resource. | | `virtualNetworkPeerings` | _[virtualNetworkPeerings](virtualNetworkPeerings/readme.md)_ array | `[]` | | Optional. Virtual Network Peerings configurations | | `workspaceId` | string | | | Optional. Resource ID of log analytics. | diff --git a/arm/Microsoft.RecoveryServices/vaults/.parameters/parameters.json b/arm/Microsoft.RecoveryServices/vaults/.parameters/parameters.json index a575657a6e..dd44b491a5 100644 --- a/arm/Microsoft.RecoveryServices/vaults/.parameters/parameters.json +++ b/arm/Microsoft.RecoveryServices/vaults/.parameters/parameters.json @@ -5,6 +5,12 @@ "name": { "value": "sxx-az-rsv-x-001" }, + "backupConfig": { + "value": { + "enhancedSecurityState": "Disabled", + "softDeleteFeatureState": "Disabled" + } + }, "backupPolicies": { "value": [ { diff --git a/arm/Microsoft.RecoveryServices/vaults/backupConfig/.bicep/nested_cuaId.bicep b/arm/Microsoft.RecoveryServices/vaults/backupConfig/.bicep/nested_cuaId.bicep new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/arm/Microsoft.RecoveryServices/vaults/backupConfig/.bicep/nested_cuaId.bicep @@ -0,0 +1 @@ + diff --git a/arm/Microsoft.RecoveryServices/vaults/backupConfig/deploy.bicep b/arm/Microsoft.RecoveryServices/vaults/backupConfig/deploy.bicep new file mode 100644 index 0000000000..aaa8464dc0 --- /dev/null +++ b/arm/Microsoft.RecoveryServices/vaults/backupConfig/deploy.bicep @@ -0,0 +1,81 @@ +@description('Required. Name of the Azure Recovery Service Vault') +param recoveryVaultName string + +@description('Optional. Name of the Azure Recovery Service Vault Backup Policy') +param name string = 'vaultconfig' + +@description('Optional. Enable this setting to protect hybrid backups against accidental deletes and add additional layer of authentication for critical operations.') +@allowed([ + 'Disabled' + 'Enabled' +]) +param enhancedSecurityState string = 'Enabled' + +@description('Optional. ResourceGuard Operation Requests') +param resourceGuardOperationRequests array = [] + +@description('Optional. Enable this setting to protect backup data for Azure VM, SQL Server in Azure VM and SAP HANA in Azure VM from accidental deletes') +@allowed([ + 'Disabled' + 'Enabled' +]) +param softDeleteFeatureState string = 'Enabled' + +@description('Optional. Storage type') +@allowed([ + 'GeoRedundant' + 'LocallyRedundant' + 'ReadAccessGeoZoneRedundant' + 'ZoneRedundant' +]) +param storageModelType string = 'GeoRedundant' + +@description('Optional. Storage type') +@allowed([ + 'GeoRedundant' + 'LocallyRedundant' + 'ReadAccessGeoZoneRedundant' + 'ZoneRedundant' +]) +param storageType string = 'GeoRedundant' + +@description('Optional. Once a machine is registered against a resource, the storageTypeState is always Locked.') +@allowed([ + 'Locked' + 'Unlocked' +]) +param storageTypeState string = 'Locked' + +@description('Optional. Customer Usage Attribution ID (GUID). This GUID must be previously registered') +param cuaId string = '' + +module pid_cuaId './.bicep/nested_cuaId.bicep' = if (!empty(cuaId)) { + name: 'pid-${cuaId}' + params: {} +} + +resource rsv 'Microsoft.RecoveryServices/vaults@2021-08-01' existing = { + name: recoveryVaultName +} + +resource backupConfig 'Microsoft.RecoveryServices/vaults/backupconfig@2021-08-01' = { + name: name + parent: rsv + properties: { + enhancedSecurityState: enhancedSecurityState + resourceGuardOperationRequests: resourceGuardOperationRequests + softDeleteFeatureState: softDeleteFeatureState + storageModelType: storageModelType + storageType: storageType + storageTypeState: storageTypeState + } +} + +@description('The name of the backup config') +output backupConfigName string = backupConfig.name + +@description('The resource ID of the backup config') +output backupConfigResourceId string = backupConfig.id + +@description('The name of the resource group the backup config was created in.') +output backupConfigResourceGroup string = resourceGroup().name diff --git a/arm/Microsoft.RecoveryServices/vaults/backupConfig/readme.md b/arm/Microsoft.RecoveryServices/vaults/backupConfig/readme.md new file mode 100644 index 0000000000..530d35af21 --- /dev/null +++ b/arm/Microsoft.RecoveryServices/vaults/backupConfig/readme.md @@ -0,0 +1,35 @@ +# Recovery Services Vault Backup Config `[Microsoft.RecoveryServices/vaults/backupconfig]` + +This module deploys recovery services vault backup config. + +## Resource Types + +| Resource Type | API Version | +| :-- | :-- | +| `Microsoft.RecoveryServices/vaults/backupconfig` | 2021-08-01 | + +## Parameters + +| Parameter Name | Type | Default Value | Possible Values | Description | +| :-- | :-- | :-- | :-- | :-- | +| `cuaId` | string | | | Optional. Customer Usage Attribution ID (GUID). This GUID must be previously registered | +| `enhancedSecurityState` | string | `Enabled` | `[Disabled, Enabled]` | Optional. Enable this setting to protect hybrid backups against accidental deletes and add additional layer of authentication for critical operations. | +| `name` | string | `vaultconfig` | | Optional. Name of the Azure Recovery Service Vault Backup Policy | +| `recoveryVaultName` | string | | | Required. Name of the Azure Recovery Service Vault | +| `resourceGuardOperationRequests` | array | `[]` | | Optional. ResourceGuard Operation Requests | +| `softDeleteFeatureState` | string | `Enabled` | `[Disabled, Enabled]` | Optional. Enable this setting to protect backup data for Azure VM, SQL Server in Azure VM and SAP HANA in Azure VM from accidental deletes | +| `storageModelType` | string | `GeoRedundant` | `[GeoRedundant, LocallyRedundant, ReadAccessGeoZoneRedundant, ZoneRedundant]` | Optional. Storage type | +| `storageType` | string | `GeoRedundant` | `[GeoRedundant, LocallyRedundant, ReadAccessGeoZoneRedundant, ZoneRedundant]` | Optional. Storage type | +| `storageTypeState` | string | `Locked` | `[Locked, Unlocked]` | Optional. Once a machine is registered against a resource, the storageTypeState is always Locked. | + +## Outputs + +| Output Name | Type | Description | +| :-- | :-- | :-- | +| `backupConfigName` | string | The name of the backup config | +| `backupConfigResourceGroup` | string | The name of the resource group the backup config was created in. | +| `backupConfigResourceId` | string | The resource ID of the backup config | + +## Template references + +- [Vaults/Backupconfig](https://docs.microsoft.com/en-us/azure/templates/Microsoft.RecoveryServices/2021-08-01/vaults/backupconfig) diff --git a/arm/Microsoft.RecoveryServices/vaults/backupPolicies/deploy.bicep b/arm/Microsoft.RecoveryServices/vaults/backupPolicies/deploy.bicep index 60596e5caf..de18d25358 100644 --- a/arm/Microsoft.RecoveryServices/vaults/backupPolicies/deploy.bicep +++ b/arm/Microsoft.RecoveryServices/vaults/backupPolicies/deploy.bicep @@ -1,5 +1,4 @@ @description('Required. Name of the Azure Recovery Service Vault') -@minLength(1) param recoveryVaultName string @description('Required. Name of the Azure Recovery Service Vault Backup Policy') @@ -29,8 +28,8 @@ resource backupPolicy 'Microsoft.RecoveryServices/vaults/backupPolicies@2021-08- @description('The name of the backup policy') output backupPolicyName string = backupPolicy.name -@description('The Resource ID of the backup policy') +@description('The resource ID of the backup policy') output backupPolicyResourceId string = backupPolicy.id -@description('The name of the Resource Group the backup policy was created in.') +@description('The name of the resource group the backup policy was created in.') output backupPolicyResourceGroup string = resourceGroup().name diff --git a/arm/Microsoft.RecoveryServices/vaults/backupPolicies/readme.md b/arm/Microsoft.RecoveryServices/vaults/backupPolicies/readme.md index 781229bbad..237b87fbfd 100644 --- a/arm/Microsoft.RecoveryServices/vaults/backupPolicies/readme.md +++ b/arm/Microsoft.RecoveryServices/vaults/backupPolicies/readme.md @@ -110,8 +110,8 @@ Object continaining the configuration for backup policies. It needs to be proper | Output Name | Type | Description | | :-- | :-- | :-- | | `backupPolicyName` | string | The name of the backup policy | -| `backupPolicyResourceGroup` | string | The name of the Resource Group the backup policy was created in. | -| `backupPolicyResourceId` | string | The Resource ID of the backup policy | +| `backupPolicyResourceGroup` | string | The name of the resource group the backup policy was created in. | +| `backupPolicyResourceId` | string | The resource ID of the backup policy | ## Template references diff --git a/arm/Microsoft.RecoveryServices/vaults/backupStorageConfig/deploy.bicep b/arm/Microsoft.RecoveryServices/vaults/backupStorageConfig/deploy.bicep index a22171776d..f8fa588a87 100644 --- a/arm/Microsoft.RecoveryServices/vaults/backupStorageConfig/deploy.bicep +++ b/arm/Microsoft.RecoveryServices/vaults/backupStorageConfig/deploy.bicep @@ -1,5 +1,4 @@ @description('Required. Name of the Azure Recovery Service Vault') -@minLength(1) param recoveryVaultName string @description('Optional. The name of the backup storage config') diff --git a/arm/Microsoft.RecoveryServices/vaults/deploy.bicep b/arm/Microsoft.RecoveryServices/vaults/deploy.bicep index 8ec2d1e4e7..866f57ad00 100644 --- a/arm/Microsoft.RecoveryServices/vaults/deploy.bicep +++ b/arm/Microsoft.RecoveryServices/vaults/deploy.bicep @@ -1,5 +1,4 @@ @description('Required. Name of the Azure Recovery Service Vault') -@minLength(1) param name string @description('Optional. The storage configuration for the Azure Recovery Service Vault') @@ -14,6 +13,9 @@ param location string = resourceGroup().location @description('Optional. List of all backup policies.') param backupPolicies array = [] +@description('Optional. The backup configuration.') +param backupConfig object = {} + @description('Optional. List of all protection containers.') @minLength(0) param protectionContainers array = [] @@ -170,6 +172,20 @@ module rsv_backupPolicies 'backupPolicies/deploy.bicep' = [for (backupPolicy, in } }] +module rsv_backupConfig 'backupConfig/deploy.bicep' = if (!empty(backupConfig)) { + name: '${uniqueString(deployment().name, location)}-RSV-BackupConfig' + params: { + recoveryVaultName: rsv.name + name: contains(backupConfig, 'name') ? backupConfig.name : 'vaultconfig' + enhancedSecurityState: contains(backupConfig, 'enhancedSecurityState') ? backupConfig.enhancedSecurityState : 'Enabled' + resourceGuardOperationRequests: contains(backupConfig, 'resourceGuardOperationRequests') ? backupConfig.resourceGuardOperationRequests : [] + softDeleteFeatureState: contains(backupConfig, 'softDeleteFeatureState') ? backupConfig.softDeleteFeatureState : 'Enabled' + storageModelType: contains(backupConfig, 'storageModelType') ? backupConfig.storageModelType : 'GeoRedundant' + storageType: contains(backupConfig, 'storageType') ? backupConfig.storageType : 'GeoRedundant' + storageTypeState: contains(backupConfig, 'storageTypeState') ? backupConfig.storageTypeState : 'Locked' + } +} + resource rsv_lock 'Microsoft.Authorization/locks@2016-09-01' = if (lock != 'NotSpecified') { name: '${rsv.name}-${lock}-lock' properties: { @@ -201,13 +217,13 @@ module rsv_rbac '.bicep/nested_rbac.bicep' = [for (roleAssignment, index) in rol } }] -@description('The resource ID of the Recovery Services Vault') +@description('The resource ID of the recovery services vault') output recoveryServicesVaultResourceId string = rsv.id -@description('The name of the Resource Group the Recovery Services Vault was created in') +@description('The name of the resource group the recovery services vault was created in') output recoveryServicesVaultResourceGroup string = resourceGroup().name -@description('The Name of the Recovery Services Vault') +@description('The Name of the recovery services vault') output recoveryServicesVaultName string = rsv.name @description('The principal ID of the system assigned identity.') diff --git a/arm/Microsoft.RecoveryServices/vaults/protectionContainers/deploy.bicep b/arm/Microsoft.RecoveryServices/vaults/protectionContainers/deploy.bicep index 5ba15da6e3..36d5c8aa0b 100644 --- a/arm/Microsoft.RecoveryServices/vaults/protectionContainers/deploy.bicep +++ b/arm/Microsoft.RecoveryServices/vaults/protectionContainers/deploy.bicep @@ -1,5 +1,4 @@ @description('Required. Name of the Azure Recovery Service Vault') -@minLength(1) param recoveryVaultName string @description('Required. Name of the Azure Recovery Service Vault Protection Container') diff --git a/arm/Microsoft.RecoveryServices/vaults/readme.md b/arm/Microsoft.RecoveryServices/vaults/readme.md index bef829c61f..78c7dfd2fd 100644 --- a/arm/Microsoft.RecoveryServices/vaults/readme.md +++ b/arm/Microsoft.RecoveryServices/vaults/readme.md @@ -10,6 +10,7 @@ This module deploys a recovery service vault. | `Microsoft.Authorization/roleAssignments` | 2020-04-01-preview | | `Microsoft.Insights/diagnosticSettings` | 2021-05-01-preview | | `Microsoft.RecoveryServices/vaults` | 2021-08-01 | +| `Microsoft.RecoveryServices/vaults/backupconfig` | 2021-08-01 | | `Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers` | 2021-08-01 | | `Microsoft.RecoveryServices/vaults/backupPolicies` | 2021-08-01 | | `Microsoft.RecoveryServices/vaults/backupstorageconfig` | 2021-08-01 | @@ -18,6 +19,7 @@ This module deploys a recovery service vault. | Parameter Name | Type | Default Value | Possible Values | Description | | :-- | :-- | :-- | :-- | :-- | +| `backupConfig` | _[backupConfig](backupConfig/readme.md)_ object | `{object}` | | Optional. The backup configuration. | | `backupPolicies` | _[backupPolicies](backupPolicies/readme.md)_ array | `[]` | | Optional. List of all backup policies. | | `backupStorageConfig` | _[backupStorageConfig](backupStorageConfig/readme.md)_ object | `{object}` | | Optional. The storage configuration for the Azure Recovery Service Vault | | `cuaId` | string | | | Optional. Customer Usage Attribution ID (GUID). This GUID must be previously registered | @@ -346,9 +348,9 @@ You can specify multiple user assigned identities to a resource by providing add | Output Name | Type | Description | | :-- | :-- | :-- | -| `recoveryServicesVaultName` | string | The Name of the Recovery Services Vault | -| `recoveryServicesVaultResourceGroup` | string | The name of the Resource Group the Recovery Services Vault was created in | -| `recoveryServicesVaultResourceId` | string | The resource ID of the Recovery Services Vault | +| `recoveryServicesVaultName` | string | The Name of the recovery services vault | +| `recoveryServicesVaultResourceGroup` | string | The name of the resource group the recovery services vault was created in | +| `recoveryServicesVaultResourceId` | string | The resource ID of the recovery services vault | | `systemAssignedPrincipalId` | string | The principal ID of the system assigned identity. | ## Template references @@ -357,6 +359,7 @@ You can specify multiple user assigned identities to a resource by providing add - [Roleassignments](https://docs.microsoft.com/en-us/azure/templates/Microsoft.Authorization/2020-04-01-preview/roleAssignments) - [Diagnosticsettings](https://docs.microsoft.com/en-us/azure/templates/Microsoft.Insights/2021-05-01-preview/diagnosticSettings) - [Vaults](https://docs.microsoft.com/en-us/azure/templates/Microsoft.RecoveryServices/2021-08-01/vaults) +- [Vaults/Backupconfig](https://docs.microsoft.com/en-us/azure/templates/Microsoft.RecoveryServices/2021-08-01/vaults/backupconfig) - [Vaults/Backupfabrics/Protectioncontainers](https://docs.microsoft.com/en-us/azure/templates/Microsoft.RecoveryServices/2021-08-01/vaults/backupFabrics/protectionContainers) - [Vaults/Backuppolicies](https://docs.microsoft.com/en-us/azure/templates/Microsoft.RecoveryServices/2021-08-01/vaults/backupPolicies) - [Vaults/Backupstorageconfig](https://docs.microsoft.com/en-us/azure/templates/Microsoft.RecoveryServices/2021-08-01/vaults/backupstorageconfig) diff --git a/docs/wiki/Context.md b/docs/wiki/Context.md index 281bb43f13..0238798df0 100644 --- a/docs/wiki/Context.md +++ b/docs/wiki/Context.md @@ -118,14 +118,14 @@ Deploying resources by referencing their corresponding modules from source contr ## Where does this platform fit in? -The _CARML_ platform hosts a collection of [resource modules](./Modules) with the intend to cover as many Azure resources and their child-resources as possible. +The _CARML_ platform hosts a collection of [resource modules](./Modules.md) with the intend to cover as many Azure resources and their child-resources as possible. As such, users can use the modules as they are, alter them and or use them to deploy their environments. -To ensure the modules are valid and can perform the intended deployments, the repository comes with a [validation & test](./Testing) [pipeline](./Pipelines) for each module. If successful it will also publish them in one or multiple target locations. +To ensure the modules are valid and can perform the intended deployments, the repository comes with a [validation & test](./Testing.md) [pipeline](./Pipelines.md) for each module. If successful it will also publish them in one or multiple target locations. As such, _CARML_ covers the `bottom box` of the [deployment model](#what-is-the-intended-the-deployment-model) section and `Phase #1` & `Phase #2` of the [deployment flow](#what-is-the-intended-deployment-flow) section. Complete deployment flow filtered -As we want to enable any user of this repository's content to not only leverage its modules but actually also re-use the platform, the platform itself is set up so that you can plug it into your own environment with just a few basic steps described in the [Getting Started](./GettingStarted) section. You may choose to add or remove modules, define your own locations you want to publish to and as such create your own open- or inner-source library. +As we want to enable any user of this repository's content to not only leverage its modules but actually also re-use the platform, the platform itself is set up so that you can plug it into your own environment with just a few basic steps described in the [Getting Started](./GettingStarted.md) section. You may choose to add or remove modules, define your own locations you want to publish to and as such create your own open- or inner-source library. diff --git a/docs/wiki/ContributionGuide.md b/docs/wiki/ContributionGuide.md index b54a1600d2..e21b366657 100644 --- a/docs/wiki/ContributionGuide.md +++ b/docs/wiki/ContributionGuide.md @@ -13,13 +13,13 @@ This section outlines how you can contribute to the repository. # Set your environment up -The preferred method of contribution requires you to create your own fork and create pull requests into the source repository from there. To set the fork up, please follow the process described in the ['Getting Started'](./GettingStarted#Option-1-Use-it-as-a-basis-to-set-up-your-own-inner-source-project) section. +The preferred method of contribution requires you to create your own fork and create pull requests into the source repository from there. To set the fork up, please follow the process described in the ['Getting Started'](./GettingStarted.md#Option-1-Use-it-as-a-basis-to-set-up-your-own-inner-source-project) section. # How to contribute? You can contribute to the Wiki in different ways depending on your own interests, bugs you see or IP you want to add. -For starters it is highly recommended to consult and understand the ['Modules Design'](./ModulesDesign) section of the wiki. +For starters it is highly recommended to consult and understand the ['Modules Design'](./ModulesDesign.md) section of the wiki. How you proceed from here depends on your particular situation: @@ -36,4 +36,4 @@ To contribute to the modules, set your environment up, test the updated/added mo Status Badge -Please make sure to set your environment up and also consult the ['Pipeline Design'](./PipelinesDesign) and ['Pipeline Usage'](.\PipelinesUsage) sections. +Please make sure to set your environment up and also consult the ['Pipeline Design'](./PipelinesDesign.md) and ['Pipeline Usage'](./PipelinesUsage.md) sections. diff --git a/docs/wiki/GettingStarted.md b/docs/wiki/GettingStarted.md index 36e3896863..e6f9d89b43 100644 --- a/docs/wiki/GettingStarted.md +++ b/docs/wiki/GettingStarted.md @@ -117,7 +117,7 @@ Please refer to [this list][AzureNames] to check which services have a global sc ### Dependencies -As the modules we test often times have dependencies to other services, we created a pipeline to deploys several standard services like VirtualNetworks and KeyVaults (alongside dummy secrets) for the modules to use. This _dependency_ pipeline should be prepared and executed before you start running any pipelines on your own. In case you need to rename any services there (for example because a certain globally unique resource name was already taken) make sure to update any references to this name in the module parameter files. You can find further details about this pipeline [here](.\TestingDesign#Module-Dependencies). +As the modules we test often times have dependencies to other services, we created a pipeline to deploys several standard services like VirtualNetworks and KeyVaults (alongside dummy secrets) for the modules to use. This _dependency_ pipeline should be prepared and executed before you start running any pipelines on your own. In case you need to rename any services there (for example because a certain globally unique resource name was already taken) make sure to update any references to this name in the module parameter files. You can find further details about this pipeline [here](./TestingDesign.md#Module-Dependencies). ### GitHub-specific prerequisites @@ -173,7 +173,7 @@ In case you would like to simply contribute because you, for example, want to ad ## Parameter File Tokens -If you are forking or cloning the repository, you can use 'tokens' inside your parameter files. Tokens allow you to test deploying modules in your own environment (i.e. using tokens for your naming conventions), or apply other customizations to your resources (i.e. using your own subscription ID inside a Resource ID string). See details in the [Parameter File Tokens Design](./ParameterFileTokens). +If you are forking or cloning the repository, you can use 'tokens' inside your parameter files. Tokens allow you to test deploying modules in your own environment (i.e. using tokens for your naming conventions), or apply other customizations to your resources (i.e. using your own subscription ID inside a Resource ID string). See details in the [Parameter File Tokens Design](./ParameterFileTokens.md). The repository contains a [Settings.json](https://github.com/Azure/ResourceModules/blob/main/settings.json) that enables you to define local tokens and store them in source control. The token format is a `name` and `value` pair as shown in the following example: @@ -203,7 +203,7 @@ Once the Key Vault is deployed, you'll notice that the Key Vault name in Azure w > The token prefix `<<` and suffix `>>` in the above example are also configurable in the [Settings.json](https://github.com/Azure/ResourceModules/blob/main/settings.json) file. They are however the default used in the CARML main repository. --- -Note: There are default tokens that can be enabled on any resource that leverages the [GitHub specific prerequisites](GettingStarted#github-specific-prerequisites) secrets. +Note: There are default tokens that can be enabled on any resource that leverages the [GitHub specific prerequisites](GettingStarted.md#github-specific-prerequisites) secrets. - `<>`: Will point to the Azure subscription. - `<>`: Will point to the Azure an Azure Management Group. diff --git a/docs/wiki/Home.md b/docs/wiki/Home.md index c900a946b7..4d2e2ae0fa 100644 --- a/docs/wiki/Home.md +++ b/docs/wiki/Home.md @@ -4,27 +4,27 @@ The objective of this repository is to provide a template library that can be re This wiki describes the content of this repository, the modules, pipelines, possible options on how to use them and how to contribute to this project. -If you're unfamiliar with Infrastructure as Code, or wonder how you can use the contents of this repository in your deployments please check out the [context](./Context) section of this wiki. +If you're unfamiliar with Infrastructure as Code, or wonder how you can use the contents of this repository in your deployments please check out the [context](./Context.md) section of this wiki. ### _Navigation_ -- [Context](./Context) - - [Infrastructure as Code](./Context#infrastructure-as-code-iac) - - [Where does this platform fit in?](./Context#where-does-this-platform-fit-in) -- [Getting Started](./GettingStarted) - - [General prerequisites](./GettingStarted#General-prerequisites) - - [Where to start](./GettingStarted#Where-to-start) -- [Modules](./Modules) - - [Design](./ModulesDesign) - - [Usage](./ModulesUsage) -- [Testing](./Testing) - - [Design](./TestingDesign) - - [Usage](./TestingUsage) -- [Pipelines](./Pipelines) - - [Design](./PipelinesDesign) - - [Usage](./PipelinesUsage) -- [Contribution Guide](./ContributionGuide) -- [Known Issues](./KnownIssues) +- [Context](./Context.md) + - [Infrastructure as Code](./Context.md#infrastructure-as-code-iac) + - [Where does this platform fit in?](./Context.md#where-does-this-platform-fit-in.md) +- [Getting Started](./GettingStarted.md) + - [General prerequisites](./GettingStarted.md#General-prerequisites.md) + - [Where to start](./GettingStarted.md#Where-to-start.md) +- [Modules](./Modules.md) + - [Design](./ModulesDesign.md) + - [Usage](./ModulesUsage.md) +- [Testing](./Testing.md) + - [Design](./TestingDesign.md) + - [Usage](./TestingUsage.md) +- [Pipelines](./Pipelines.md) + - [Design](./PipelinesDesign.md) + - [Usage](./PipelinesUsage.md) +- [Contribution Guide](./ContributionGuide.md) +- [Known Issues](./KnownIssues.md) # Scope @@ -33,7 +33,7 @@ Following you can find an abstract overview of everything in- and out-of-scope o ## In Scope - **Modules:** Rich library of resource modules - the foundation for workload or entire environments deployments - **Platform:** Pipelines to validate modules & publish to those that pass to a location of your choice. Available with GitHub Workflows. -- **Documentation:** A rich documentation of best practices on [module](./Modules) design, the [platforms](./Context) and its [context](./Context), [testing](./Testing) and [pipelines](./Pipelines) +- **Documentation:** A rich documentation of best practices on [module](./Modules.md) design, the [platforms](./Context.md) and its [context](./Context.md), [testing](./Testing.md) and [pipelines](./Pipelines.md) ## Out of Scope - **Orchestration:** Orchestrated solutions such as workloads or entire environments intended for production environments diff --git a/docs/wiki/Modules.md b/docs/wiki/Modules.md index 8f47239754..2b0bbad7d8 100644 --- a/docs/wiki/Modules.md +++ b/docs/wiki/Modules.md @@ -6,12 +6,12 @@ This section and its sub-sections give you an overview of the principals the mod ### _Navigation_ -- [Module Design](./ModulesDesign) - - [General guidelines](./ModulesDesign#general-guidelines) - - [File & folder structure](./ModulesDesign#file--folder-structure) - - [Bicep template guidelines](./ModulesDesign#bicep-template-guidelines) -- [Module Usage](./ModulesUsage) - - [Deploy local template](./ModulesUsage#deploy-local-template) - - [Deploy remote template](./ModulesUsage#deploy-remote-template) +- [Module Design](./ModulesDesign.md) + - [General guidelines](./ModulesDesign.md#general-guidelines) + - [File & folder structure](./ModulesDesign.md#file--folder-structure) + - [Bicep template guidelines](./ModulesDesign.md#bicep-template-guidelines) +- [Module Usage](./ModulesUsage.md) + - [Deploy local template](./ModulesUsage.md#deploy-local-template) + - [Deploy remote template](./ModulesUsage.md#deploy-remote-template) --- diff --git a/docs/wiki/ModulesDesign.md b/docs/wiki/ModulesDesign.md index 273caa453e..67b87ab93e 100644 --- a/docs/wiki/ModulesDesign.md +++ b/docs/wiki/ModulesDesign.md @@ -144,7 +144,7 @@ Microsoft.Sql In this folder we recommend to place the child-resource-template alongside a ReadMe (that can be generated via the `.github\workflows\scripts\Set-ModuleReadMe.ps1` script) and optionally further nest additional folders for it's child-resources. -The parent template should reference all it's direct child-templates to allow for an end to end deployment experience while allowing any user to also reference 'just' the child-resource itself. In the case of the SQL-server example the server template would reference the database module and encapsulate it it in a loop to allow for the deployment of n-amount of databases. For example +The parent template should reference all it's direct child-templates to allow for an end-to-end deployment experience while allowing any user to also reference 'just' the child-resource itself. In the case of the SQL-server example the server template would reference the database module and encapsulate it it in a loop to allow for the deployment of n-amount of databases. For example ```Bicep @description('Optional. The databases to create in the server') @@ -476,7 +476,7 @@ Within a bicep file, follow the following conventions: ``` - Bicep `modules`: - camel_Snake_Case, i.e `resourceGroup_rbac` ? - - File name for nested module is structured as follows: `nested_.bicep` i.e: + - Filename for nested module is structured as follows: `nested_.bicep` i.e: - `nested_rbac.bicep` @@ -493,7 +493,7 @@ Within a bicep file, follow the following conventions: # ReadMe -Each module must come with a ReadMe markdown file that outlines what the module contains and 'how' it can be used. +Each module must come with a ReadMe Markdown file that outlines what the module contains and 'how' it can be used. It primary components are - A title with a reference to the primary resource (for example KeyVault `[Microsoft.KeyVault/vaults]`) - A description diff --git a/docs/wiki/ParameterFileTokens.md b/docs/wiki/ParameterFileTokens.md index 12523b7acc..2004a2576b 100644 --- a/docs/wiki/ParameterFileTokens.md +++ b/docs/wiki/ParameterFileTokens.md @@ -30,7 +30,7 @@ There are (2) Token types that can be applied on a Parameter File: #### 1. Default Tokens (Environment Variables) [Default] -These are tokens constructed from Environment Variables, which are defined in the Workflow (Pipeline). Review [Getting Started - GitHub specific prerequisites](./GettingStarted) for more information on these Environment Variables. +These are tokens constructed from Environment Variables, which are defined in the Workflow (Pipeline). Review [Getting Started - GitHub specific prerequisites](./GettingStarted.md) for more information on these Environment Variables. #### 2. Local Custom Tokens (Source Control) [Optional] diff --git a/docs/wiki/Pipelines.md b/docs/wiki/Pipelines.md index 5a4a421ec7..540dc80467 100644 --- a/docs/wiki/Pipelines.md +++ b/docs/wiki/Pipelines.md @@ -8,7 +8,7 @@ This section and its sub-sections give you an overview of the principals the pip ### _Navigation_ -- [Pipelines Design](./PipelinesDesign) -- [Pipelines Usage](./PipelinesUsage) +- [Pipelines Design](./PipelinesDesign.md) +- [Pipelines Usage](./PipelinesUsage.md) --- diff --git a/docs/wiki/PipelinesDesign.md b/docs/wiki/PipelinesDesign.md index 87e787d57d..4d00b20b09 100644 --- a/docs/wiki/PipelinesDesign.md +++ b/docs/wiki/PipelinesDesign.md @@ -76,7 +76,7 @@ The validation phase performs all test outside of a test deployment. This includ #### Static module validation -This static validation executes the tests documented in the [testing](./Testing) section. Without diving into to much detail, we test aspects like a proper ReadMe documentation, a proper module folder structure, a minimum number of refresh of the leveraged of API versions and the like. +This static validation executes the tests documented in the [testing](./Testing.md) section. Without diving into to much detail, we test aspects like a proper ReadMe documentation, a proper module folder structure, a minimum number of refresh of the leveraged of API versions and the like. #### Simulated deployment validation @@ -159,7 +159,7 @@ Dynamic parameters that do not need to be hardcoded in the parameter file, and t For example, some modules require referencing Azure resources with the Resource ID. This ID typically contains the `subscriptionId` in the format of `/subscriptions/<>/...`. This task substitutes the `<>` with the correct value, based on the different token types. -Please review the Parameter File Tokens [Design](./ParameterFileTokens) for more details on the different token types and how you can use them to remove hardcoded values from your parameter files. +Please review the Parameter File Tokens [Design](./ParameterFileTokens.md) for more details on the different token types and how you can use them to remove hardcoded values from your parameter files. --- @@ -173,7 +173,7 @@ Outside of the previously described platform pipelines we implemented several ad ## Dependencies pipeline -As the modules we test often times have dependencies to other services, we created a pipeline to deploys several standard services like VirtualNetworks and KeyVaults (alongside dummy secrets) for the modules to use. This _dependency_ pipeline should be prepared and executed before you start running any pipelines on your own. In case you need to rename any services there (for example because a certain globally unique resource name was already taken) make sure to update any references to this name in the module parameter files. You can find further details about this pipeline [here](.\TestingDesign#Module-Dependencies). +As the modules we test often times have dependencies to other services, we created a pipeline to deploys several standard services like VirtualNetworks and KeyVaults (alongside dummy secrets) for the modules to use. This _dependency_ pipeline should be prepared and executed before you start running any pipelines on your own. In case you need to rename any services there (for example because a certain globally unique resource name was already taken) make sure to update any references to this name in the module parameter files. You can find further details about this pipeline [here](./TestingDesign.md#Module-Dependencies). ### Dependencies pipeline inputs diff --git a/docs/wiki/PipelinesUsage.md b/docs/wiki/PipelinesUsage.md index 45e652c650..8f9a6f1594 100644 --- a/docs/wiki/PipelinesUsage.md +++ b/docs/wiki/PipelinesUsage.md @@ -19,14 +19,14 @@ This section gives you an overview of how to interact with the platform pipeline When working with this platform's pipelines it is important to understand first which pipelines serve which purpose, when they are triggered and how you can use them to test your modules. -As described in the [Pipelines Design](./PipelinesDesign) section we offer the following pipelines: +As described in the [Pipelines Design](./PipelinesDesign.md) section we offer the following pipelines: | Pipeline | Target | Trigger | Notes | | - | - | - | - | -| [Module Pipelines](./PipelinesDesign#module-pipelines) | Module | Changes to [module\|workflow] files in branch [main\|master] or manual | Used to test & publish modules. This is the most common pipeline you will interact with when working on modules. | -| [Dependencies pipeline](./PipelinesDesign#dependencies-pipeline) | All required dependency resources | Manual | Deploys resources we reference in the module tests. Should be run once before testing modules. | -| [ReadMe pipeline](./PipelinesDesign#readme-pipeline) | `README.md` in `` & `/arm` | Changes to [template files] in branch [main\|master] | Keeps the target ReadMe files aligned with the modules in the repository. | -| [Wiki pipeline](./PipelinesDesign#wiki-pipeline) | Wiki | Changes in [docs/wiki] in branch [main\|master] | Keeps the Wiki-repository in sync with the wiki folder in the modules repository | +| [Module Pipelines](./PipelinesDesign.md#module-pipelines) | Module | Changes to [module\|workflow] files in branch [main\|master] or manual | Used to test & publish modules. This is the most common pipeline you will interact with when working on modules. | +| [Dependencies pipeline](./PipelinesDesign.md#dependencies-pipeline) | All required dependency resources | Manual | Deploys resources we reference in the module tests. Should be run once before testing modules. | +| [ReadMe pipeline](./PipelinesDesign.md#readme-pipeline) | `README.md` in `` & `/arm` | Changes to [template files] in branch [main\|master] | Keeps the target ReadMe files aligned with the modules in the repository. | +| [Wiki pipeline](./PipelinesDesign.md#wiki-pipeline) | Wiki | Changes in [docs/wiki] in branch [main\|master] | Keeps the Wiki-repository in sync with the wiki folder in the modules repository | --- @@ -49,7 +49,7 @@ To validate any updates you did to a module template you can perform the followi Once the pipeline concluded, it will either be in a green (success) or red (failed) state, depending on how the module performed. -If you open the pipeline's run, you should be able to investigate the logs and investigate the execution. In case any of the [validation](./PipelinesDesign#Validate) steps failed, the pipeline should give you detailed information of any error. In some cases in which Pester tests failed, you may only see the failed test and need to `expand` the error message. How this looks like depends on the [DevOps platform](#devops-tool-specific-considerations) you use. +If you open the pipeline's run, you should be able to investigate the logs and investigate the execution. In case any of the [validation](./PipelinesDesign.md#Validate) steps failed, the pipeline should give you detailed information of any error. In some cases in which Pester tests failed, you may only see the failed test and need to `expand` the error message. How this looks like depends on the [DevOps platform](#devops-tool-specific-considerations) you use. ## Operate the dependency pipeline @@ -57,13 +57,13 @@ As described previously, the dependency pipeline must be triggered manually and Triggering the pipeline is as easy as navigating to it in your corresponding DevOps tool and running the pipeline. No additional steps or input parameters are required. -> **Note:** While operating the dependency pipeline is simple, make sure to set it up in the way it is described [here](./GettingStarted#Dependencies). Especially the globally unique names must be accounted for, before executing the pipeline. +> **Note:** While operating the dependency pipeline is simple, make sure to set it up in the way it is described [here](./GettingStarted.md#Dependencies). Especially the globally unique names must be accounted for, before executing the pipeline. -Depending on what you want to test in your module pipeline, you may want to add additional dependencies to your dependency pipeline. If so, make sure to add an additional parameter file for each service you require under `utilities/pipelines/dependencies`. Once done, you just need to add the deployment to the pipeline itself in the correct location in the pipeline. The different deployment waves are documented [here](./TestingDesign#module-dependencies). The implementation depends on the [DevOps tool](#devops-tool-specific-considerations) you're using. +Depending on what you want to test in your module pipeline, you may want to add additional dependencies to your dependency pipeline. If so, make sure to add an additional parameter file for each service you require under `utilities/pipelines/dependencies`. Once done, you just need to add the deployment to the pipeline itself in the correct location in the pipeline. The different deployment waves are documented [here](./TestingDesign.md#module-dependencies). The implementation depends on the [DevOps tool](#devops-tool-specific-considerations) you're using. ## Add a new module pipeline -To add a new module pipeline we recommend to create a copy of a currently existing module pipeline and adjust all module-specific properties documented [here](./PipelinesDesign#component-workflows). The registration of the pipeline will differ depending on the DevOps tool you're using. For further information, please review the [DevOps-Tool-specific guidance](#devops-tool-specific-guidance) below. +To add a new module pipeline we recommend to create a copy of a currently existing module pipeline and adjust all module-specific properties documented [here](./PipelinesDesign.md#component-workflows). The registration of the pipeline will differ depending on the DevOps tool you're using. For further information, please review the [DevOps-Tool-specific guidance](#devops-tool-specific-guidance) below. --- @@ -86,7 +86,7 @@ then select the pipeline of your choice from the list on the left, followed by ' Run workflow Depending on the pipeline you selected you may have additional input parameters you can provide aside from the branch: -- [Module pipeline](./TestingDesign#module-pipeline-inputs) inputs +- [Module pipeline](./TestingDesign.md#module-pipeline-inputs) inputs ### Register a pipeline diff --git a/docs/wiki/Testing.md b/docs/wiki/Testing.md index 7383346162..4d9a0dbc66 100644 --- a/docs/wiki/Testing.md +++ b/docs/wiki/Testing.md @@ -6,11 +6,11 @@ This section and its sub-sections give you an overview of the principles the tes ### _Navigation_ -- [Testing Design](./TestingDesign) - - [Approach](./TestingDesign#approach) - - [API version validation](./TestingDesign#api-version-validation) - - [Template validation](./TestingDesign#template-validation) - - [Deployment validation](./TestingDesign#deployment-validation) -- [Testing Usage](./TestingUsage) +- [Testing Design](./TestingDesign.md) + - [Approach](./TestingDesign.md#approach) + - [API version validation](./TestingDesign.md#api-version-validation) + - [Template validation](./TestingDesign.md#template-validation) + - [Deployment validation](./TestingDesign.md#deployment-validation) +- [Testing Usage](./TestingUsage.md) --- diff --git a/docs/wiki/TestingDesign.md b/docs/wiki/TestingDesign.md index 33eccf42f8..5b09fbab31 100644 --- a/docs/wiki/TestingDesign.md +++ b/docs/wiki/TestingDesign.md @@ -81,9 +81,9 @@ The template validation tests execute a dry-run with each parameter file provide # Deployment validation -If all other tests passed, the deployment tests are the ultimate module validation. Using the available & configured parameter files for a module, each is deployed to Azure (in parallel) and verifies if the deployment works end to end. +If all other tests passed, the deployment tests are the ultimate module validation. Using the available & configured parameter files for a module, each is deployed to Azure (in parallel) and verifies if the deployment works end-to-end. -Most of the resources are deleted by default after their deployment, to keep costs down and to be able to retest resource modules from scratch in the next run. However, the removal step can be skipped in case further investigation on the deployed resource is needed. For further details, please refer to the (./PipelinesUsage) section. +Most of the resources are deleted by default after their deployment, to keep costs down and to be able to retest resource modules from scratch in the next run. However, the removal step can be skipped in case further investigation on the deployed resource is needed. For further details, please refer to the (./PipelinesUsage.md) section. This happens using the `.github/actions/templates/validateModuleDeploy/scripts/Test-TemplateWithParameterFile.ps1` script. diff --git a/docs/wiki/TestingUsage.md b/docs/wiki/TestingUsage.md index 8f3ac509ef..7cb753b281 100644 --- a/docs/wiki/TestingUsage.md +++ b/docs/wiki/TestingUsage.md @@ -73,7 +73,7 @@ $TestModuleLocallyInput = @{ ## Handling Parameters that require or contain a value that should be tokenized -The following scenarios are common to when to use a token value in the parameter file. Refer to [Parameter File Tokens Design](./ParameterFileTokens) for more details. +The following scenarios are common to when to use a token value in the parameter file. Refer to [Parameter File Tokens Design](./ParameterFileTokens.md) for more details. - Scenarios where resources have dependencies on other resources, which may require to be linked using `resourceId` references. diff --git a/docs/wiki/_Sidebar.md b/docs/wiki/_Sidebar.md index 93fb2cee55..3e90ad12a4 100644 --- a/docs/wiki/_Sidebar.md +++ b/docs/wiki/_Sidebar.md @@ -1,17 +1,17 @@ # Wiki content -- [Home](./Home) -- [Context](./Context) -- [Getting Started](./GettingStarted) -- [Modules](./Modules) - - [Design](./ModulesDesign) - - [Usage](./ModulesUsage) -- [Testing](./Testing) - - [Design](./TestingDesign) - - [Usage](./TestingUsage) -- [Pipelines](./Pipelines) - - [Design](./PipelinesDesign) - - [Parameter File Tokens](./ParameterFileTokens) - - [Usage](./PipelinesUsage) -- [Contribution Guide](./ContributionGuide) -- [Known Issues](./KnownIssues) +- [Home](./Home.md) +- [Context](./Context.md) +- [Getting Started](./GettingStarted.md) +- [Modules](./Modules.md) + - [Design](./ModulesDesign.md) + - [Usage](./ModulesUsage.md) +- [Testing](./Testing.md) + - [Design](./TestingDesign.md) + - [Usage](./TestingUsage.md) +- [Pipelines](./Pipelines.md) + - [Design](./PipelinesDesign.md) + - [Parameter File Tokens](./ParameterFileTokens.md) + - [Usage](./PipelinesUsage.md) +- [Contribution Guide](./ContributionGuide.md) +- [Known Issues](./KnownIssues.md)