From 33bdcebac571c2cd4855742360600ced345bd849 Mon Sep 17 00:00:00 2001 From: "Jason Masten (from Dev Box)" Date: Fri, 9 Feb 2024 02:03:06 -0500 Subject: [PATCH] More naming updates --- .../fslogix/azureFiles/azureFiles.bicep | 9 +- .../modules/fslogix/fslogix.bicep | 6 + .../modules/management/artifacts.bicep | 3 +- .../management/customerManagedKeys.bicep | 3 +- .../modules/management/management.bicep | 8 +- .../modules/management/virtualMachine.bicep | 8 +- .../modules/resourceNames.bicep | 10 +- .../modules/sessionHosts/sessionHosts.bicep | 4 + .../sessionHosts/virtualMachines.bicep | 12 +- .../azureVirtualDesktop/solution.bicep | 7 + .../add-ons/azureVirtualDesktop/solution.json | 205 +++++++++++++----- src/bicep/mlz.bicep | 14 +- src/bicep/mlz.json | 16 +- 13 files changed, 221 insertions(+), 84 deletions(-) diff --git a/src/bicep/add-ons/azureVirtualDesktop/modules/fslogix/azureFiles/azureFiles.bicep b/src/bicep/add-ons/azureVirtualDesktop/modules/fslogix/azureFiles/azureFiles.bicep index 4b8a33a2b..7b2ee1eba 100644 --- a/src/bicep/add-ons/azureVirtualDesktop/modules/fslogix/azureFiles/azureFiles.bicep +++ b/src/bicep/add-ons/azureVirtualDesktop/modules/fslogix/azureFiles/azureFiles.bicep @@ -24,8 +24,11 @@ param resourceGroupManagement string param resourceGroupStorage string param securityPrincipalObjectIds array param securityPrincipalNames array +param serviceName string @minLength(3) param storageAccountNamePrefix string +param storageAccountNetworkInterfaceNamePrefix string +param storageAccountPrivateEndpointNamePrefix string param storageCount int param storageEncryptionKeyName string param storageIndex int @@ -166,14 +169,14 @@ module shares 'shares.bicep' = [for i in range(0, storageCount): { }] resource privateEndpoints 'Microsoft.Network/privateEndpoints@2023-04-01' = [for i in range(0, storageCount): { - name: 'pe-${storageAccountNamePrefix}${padLeft(i + storageIndex, 2, '0')}-file' + name: '${replace(storageAccountPrivateEndpointNamePrefix, serviceName, 'file')}${padLeft(i + storageIndex, 2, '0')}' location: location tags: tagsPrivateEndpoints properties: { - customNetworkInterfaceName: 'nic-${storageAccountNamePrefix}${padLeft(i + storageIndex, 2, '0')}-file' + customNetworkInterfaceName: '${replace(storageAccountNetworkInterfaceNamePrefix, serviceName, 'file')}${padLeft(i + storageIndex, 2, '0')}' privateLinkServiceConnections: [ { - name: 'pe-${storageAccounts[i].name}' + name: '${replace(storageAccountPrivateEndpointNamePrefix, serviceName, 'file')}${padLeft(i + storageIndex, 2, '0')}' properties: { privateLinkServiceId: storageAccounts[i].id groupIds: [ diff --git a/src/bicep/add-ons/azureVirtualDesktop/modules/fslogix/fslogix.bicep b/src/bicep/add-ons/azureVirtualDesktop/modules/fslogix/fslogix.bicep index 09a07118e..e0ba442c8 100644 --- a/src/bicep/add-ons/azureVirtualDesktop/modules/fslogix/fslogix.bicep +++ b/src/bicep/add-ons/azureVirtualDesktop/modules/fslogix/fslogix.bicep @@ -34,8 +34,11 @@ param resourceGroupManagement string param resourceGroupStorage string param securityPrincipalObjectIds array param securityPrincipalNames array +param serviceName string param smbServerLocation string param storageAccountNamePrefix string +param storageAccountNetworkInterfaceNamePrefix string +param storageAccountPrivateEndpointNamePrefix string param storageCount int param storageEncryptionKeyName string param storageIndex int @@ -116,7 +119,10 @@ module azureFiles 'azureFiles/azureFiles.bicep' = if (storageService == 'AzureFi resourceGroupStorage: resourceGroupStorage securityPrincipalNames: securityPrincipalNames securityPrincipalObjectIds: securityPrincipalObjectIds + serviceName: serviceName storageAccountNamePrefix: storageAccountNamePrefix + storageAccountNetworkInterfaceNamePrefix: storageAccountNetworkInterfaceNamePrefix + storageAccountPrivateEndpointNamePrefix: storageAccountPrivateEndpointNamePrefix storageCount: storageCount storageEncryptionKeyName: storageEncryptionKeyName storageIndex: storageIndex diff --git a/src/bicep/add-ons/azureVirtualDesktop/modules/management/artifacts.bicep b/src/bicep/add-ons/azureVirtualDesktop/modules/management/artifacts.bicep index 653f7293a..1fa4100d6 100644 --- a/src/bicep/add-ons/azureVirtualDesktop/modules/management/artifacts.bicep +++ b/src/bicep/add-ons/azureVirtualDesktop/modules/management/artifacts.bicep @@ -1,12 +1,13 @@ param location string param resourceGroupManagement string +param serviceName string param storageAccountName string param subscriptionId string param tags object param timestamp string param userAssignedIdentityNamePrefix string -var name = '${userAssignedIdentityNamePrefix}-artifacts' +var name = replace(userAssignedIdentityNamePrefix, serviceName, 'artifacts') var roleDefinitionId = '2a2b9908-6ea1-4ae2-8e65-a410df84e7d1' // Storage Blob Data Reader resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' existing = { diff --git a/src/bicep/add-ons/azureVirtualDesktop/modules/management/customerManagedKeys.bicep b/src/bicep/add-ons/azureVirtualDesktop/modules/management/customerManagedKeys.bicep index 9047c51d6..65a965b73 100644 --- a/src/bicep/add-ons/azureVirtualDesktop/modules/management/customerManagedKeys.bicep +++ b/src/bicep/add-ons/azureVirtualDesktop/modules/management/customerManagedKeys.bicep @@ -5,6 +5,7 @@ param keyVaultNetworkInterfaceName string param keyVaultPrivateEndpointName string param keyVaultPrivateDnsZoneResourceId string param location string +param serviceName string param subnetResourceId string param tags object param timestamp string @@ -149,7 +150,7 @@ module userAssignedIdentity 'userAssignedIdentity.bicep' = { name: 'UAI_Encryption_${timestamp}' params: { location: location - name: '${userAssignedIdentityNamePrefix}-encryption' + name: replace(userAssignedIdentityNamePrefix, serviceName, 'encryption') tags: contains(tags, 'Microsoft.ManagedIdentity/userAssignedIdentities') ? tags['Microsoft.ManagedIdentity/userAssignedIdentities'] : {} } } diff --git a/src/bicep/add-ons/azureVirtualDesktop/modules/management/management.bicep b/src/bicep/add-ons/azureVirtualDesktop/modules/management/management.bicep index 1185a0718..27cde8fdc 100644 --- a/src/bicep/add-ons/azureVirtualDesktop/modules/management/management.bicep +++ b/src/bicep/add-ons/azureVirtualDesktop/modules/management/management.bicep @@ -38,6 +38,7 @@ param logAnalyticsWorkspaceName string param logAnalyticsWorkspaceRetention int param logAnalyticsWorkspaceSku string param networkInterfaceNamePrefix string +param networkName string param organizationalUnitPath string param recoveryServices bool param recoveryServicesPrivateDnsZoneResourceId string @@ -52,6 +53,7 @@ param resourceGroupStorage string param roleDefinitions object param scalingTool bool param securityLogAnalyticsWorkspaceResourceId string +param serviceName string param sessionHostCount int param storageService string param subnetResourceId string @@ -141,7 +143,7 @@ module deploymentUserAssignedIdentity 'userAssignedIdentity.bicep' = { name: 'UserAssignedIdentity_${timestamp}' params: { location: locationVirtualMachines - name: '${userAssignedIdentityNamePrefix}-deployment' + name: replace(userAssignedIdentityNamePrefix, serviceName, 'deployment') tags: contains(tags, 'Microsoft.ManagedIdentity/userAssignedIdentities') ? tags['Microsoft.ManagedIdentity/userAssignedIdentities'] : {} } } @@ -173,6 +175,7 @@ module artifacts 'artifacts.bicep' = { params: { location: locationVirtualMachines resourceGroupManagement: resourceGroupManagement + serviceName: serviceName storageAccountName: split(artifactsStorageAccountResourceId, '/')[8] subscriptionId: subscription().subscriptionId tags: tags @@ -192,6 +195,7 @@ module customerManagedKeys 'customerManagedKeys.bicep' = { keyVaultPrivateDnsZoneResourceId: keyVaultPrivateDnsZoneResourceId keyVaultPrivateEndpointName: keyVaultPrivateEndpointName location: locationVirtualMachines + serviceName: serviceName subnetResourceId: subnetResourceId tags: tags timestamp: timestamp @@ -230,8 +234,10 @@ module virtualMachine 'virtualMachine.bicep' = { domainName: domainName location: locationVirtualMachines networkInterfaceNamePrefix: networkInterfaceNamePrefix + networkName: networkName organizationalUnitPath: organizationalUnitPath securityLogAnalyticsWorkspaceResourceId: securityLogAnalyticsWorkspaceResourceId + serviceName: serviceName subnet: split(subnetResourceId, '/')[10] tagsNetworkInterfaces: contains(tags, 'Microsoft.Network/networkInterfaces') ? tags['Microsoft.Network/networkInterfaces'] : {} tagsVirtualMachines: contains(tags, 'Microsoft.Compute/virtualMachines') ? tags['Microsoft.Compute/virtualMachines'] : {} diff --git a/src/bicep/add-ons/azureVirtualDesktop/modules/management/virtualMachine.bicep b/src/bicep/add-ons/azureVirtualDesktop/modules/management/virtualMachine.bicep index ecf2bb036..2834b549a 100644 --- a/src/bicep/add-ons/azureVirtualDesktop/modules/management/virtualMachine.bicep +++ b/src/bicep/add-ons/azureVirtualDesktop/modules/management/virtualMachine.bicep @@ -11,8 +11,10 @@ param domainJoinUserPrincipalName string param domainName string param location string param networkInterfaceNamePrefix string +param networkName string param organizationalUnitPath string param securityLogAnalyticsWorkspaceResourceId string +param serviceName string param subnet string param tagsNetworkInterfaces object param tagsVirtualMachines object @@ -25,12 +27,12 @@ param virtualMachineNamePrefix string param virtualMachinePassword string param virtualMachineUsername string -var networkInterfaceName = '${networkInterfaceNamePrefix}mgt' +var networkInterfaceName = replace(networkInterfaceNamePrefix, serviceName, 'mgt-vm') var securitylogAnalyticsWorkspaceName = securityMonitoring ? split(securityLogAnalyticsWorkspaceResourceId, '/')[8] : '' var securityLogAnalyticsWorkspaceResourceGroupName = securityMonitoring ? split(securityLogAnalyticsWorkspaceResourceId, '/')[4] : resourceGroup().name var securityLogAnalyticsWorkspaceSubscriptionId = securityMonitoring ? split(securityLogAnalyticsWorkspaceResourceId, '/')[2] : subscription().subscriptionId var securityMonitoring = empty(securityLogAnalyticsWorkspaceResourceId) ? false : true -var virtualMachineName = '${virtualMachineNamePrefix}mgt' +var virtualMachineName = replace(replace(virtualMachineNamePrefix, serviceName, 'mgt'), networkName, '') resource logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2022-10-01' existing = if (securityMonitoring) { scope: resourceGroup(securityLogAnalyticsWorkspaceSubscriptionId, securityLogAnalyticsWorkspaceResourceGroupName) @@ -86,7 +88,7 @@ resource virtualMachine 'Microsoft.Compute/virtualMachines@2021-11-01' = { } storageAccountType: diskSku } - name: '${diskNamePrefix}mgt' + name: replace(diskNamePrefix, serviceName, 'mgt-vm') } dataDisks: [] } diff --git a/src/bicep/add-ons/azureVirtualDesktop/modules/resourceNames.bicep b/src/bicep/add-ons/azureVirtualDesktop/modules/resourceNames.bicep index 5431752a2..66ab323d8 100644 --- a/src/bicep/add-ons/azureVirtualDesktop/modules/resourceNames.bicep +++ b/src/bicep/add-ons/azureVirtualDesktop/modules/resourceNames.bicep @@ -42,7 +42,7 @@ var resourceAbbreviations = loadJsonContent('../../../data/resourceAbbreviations var agentSvcPrivateDnsZoneName = 'privatelink.agentsvc.azure-automation.${privateDnsZoneSuffixes_AzureAutomation[environment().name] ?? cloudEndpointSuffix}' var automationAccountDiagnosticSettingName = replace(replace(namingConvention, resourceAbbreviation, resourceAbbreviations.diagnosticSettings), locationAbbreviation, locations[locationVirtualMachines].abbreviation) -var automationAccountName = replace(replace(replace(namingConvention, resourceAbbreviation, resourceAbbreviations.automationAccounts), serviceName, resourceAbbreviations.automationAccounts), locationAbbreviation, locations[locationVirtualMachines].abbreviation) +var automationAccountName = replace(replace(replace(namingConvention, resourceAbbreviation, resourceAbbreviations.automationAccounts), '-${serviceName}', ''), locationAbbreviation, locations[locationVirtualMachines].abbreviation) var automationAccountNetworkInterfaceName = replace(replace(replace(namingConvention, resourceAbbreviation, resourceAbbreviations.networkInterfaces), serviceName, 'DSCAndHybridWorker-${resourceAbbreviations.automationAccounts}' ), locationAbbreviation, locations[locationVirtualMachines].abbreviation) var automationAccountPrivateEndpointName = replace(replace(replace(namingConvention, resourceAbbreviation, resourceAbbreviations.privateEndpoints), serviceName, 'DSCAndHybridWorker-${resourceAbbreviations.automationAccounts}' ), locationAbbreviation, locations[locationVirtualMachines].abbreviation) var availabilitySetNamePrefix = '${replace(replace(replace(namingConvention, resourceAbbreviation, resourceAbbreviations.availabilitySets), '-${serviceName}', ''), locationAbbreviation, locations[locationVirtualMachines].abbreviation)}-' @@ -56,7 +56,7 @@ var dataCollectionRuleName = 'microsoft-avdi-${locations[locationVirtualMachines var desktopApplicationGroupName = replace(replace(replace(namingConvention, resourceAbbreviation, resourceAbbreviations.desktopApplicationGroups), '-${serviceName}', ''), locationAbbreviation, locations[locationControlPlane].abbreviation) var diskAccessName = replace(replace(replace(namingConvention, resourceAbbreviation, resourceAbbreviations.diskAccesses), '-${serviceName}', ''), locationAbbreviation, locations[locationVirtualMachines].abbreviation) var diskEncryptionSetName = replace(replace(replace(namingConvention, resourceAbbreviation, resourceAbbreviations.diskEncryptionSets), '-${serviceName}', ''), locationAbbreviation, locations[locationVirtualMachines].abbreviation) -var diskNamePrefix = '${replace(replace(replace(namingConvention, resourceAbbreviation, resourceAbbreviations.disks), '-${serviceName}', ''), locationAbbreviation, locations[locationVirtualMachines].abbreviation)}-' +var diskNamePrefix = replace(replace(namingConvention, resourceAbbreviation, resourceAbbreviations.disks), locationAbbreviation, locations[locationVirtualMachines].abbreviation) var filePrivateDnsZoneName = 'privatelink.file.${environment().suffixes.storage}' var fileShareNames = { CloudCacheProfileContainer: [ @@ -85,7 +85,7 @@ var keyVaultPrivateEndpointName = replace(replace(replace(namingConvention, reso var logAnalyticsWorkspaceName = replace(replace(replace(namingConvention, resourceAbbreviation, resourceAbbreviations.logAnalyticsWorkspaces), '-${serviceName}', ''), locationAbbreviation, locations[locationVirtualMachines].abbreviation) var netAppAccountName = replace(replace(replace(namingConvention, resourceAbbreviation, resourceAbbreviations.netAppAccounts), '-${serviceName}', ''), locationAbbreviation, locations[locationVirtualMachines].abbreviation) var netAppCapacityPoolName = replace(replace(replace(namingConvention, resourceAbbreviation, resourceAbbreviations.netAppCapacityPools), '-${serviceName}', ''), locationAbbreviation, locations[locationVirtualMachines].abbreviation) -var networkInterfaceNamePrefix = '${replace(replace(namingConvention, resourceAbbreviation, resourceAbbreviations.networkInterfaces), locationAbbreviation, locations[locationVirtualMachines].abbreviation)}-' +var networkInterfaceNamePrefix = replace(replace(namingConvention, resourceAbbreviation, resourceAbbreviations.networkInterfaces), locationAbbreviation, locations[locationVirtualMachines].abbreviation) var networkSecurityGroupNames = [ replace(replace(replace(namingConvention, resourceAbbreviation, resourceAbbreviations.networkSecurityGroups), '-${serviceName}', ''), locationAbbreviation, locations[locationControlPlane].abbreviation) replace(replace(replace(namingConvention, resourceAbbreviation, resourceAbbreviations.networkSecurityGroups), '-${serviceName}', ''), locationAbbreviation, locations[locationVirtualMachines].abbreviation) @@ -115,7 +115,7 @@ var storageAccountNamePrefix = replace(replace(replace(replace(replace(namingCon var storageAccountNetworkInterfaceNamePrefix = replace(replace(replace(replace(namingConvention, resourceAbbreviation, resourceAbbreviations.networkInterfaces), serviceName, resourceAbbreviations.storageAccounts), locationAbbreviation, locations[locationVirtualMachines].abbreviation), environmentShortName, first(environmentShortName)) var storageAccountPrivateEndpointNamePrefix = replace(replace(replace(replace(namingConvention, resourceAbbreviation, resourceAbbreviations.privateEndpoints), serviceName, resourceAbbreviations.storageAccounts), locationAbbreviation, locations[locationVirtualMachines].abbreviation), environmentShortName, first(environmentShortName)) var userAssignedIdentityNamePrefix = replace(replace(namingConvention, resourceAbbreviation, resourceAbbreviations.userAssignedIdentities), locationAbbreviation, locations[locationVirtualMachines].abbreviation) -var virtualMachineNamePrefix = replace(replace(replace(replace(replace(namingConvention, resourceAbbreviation, resourceAbbreviations.virtualMachines), '-${serviceName}', ''), locationAbbreviation, locations[locationVirtualMachines].abbreviation), environmentShortName, first(environmentShortName)), '-', '') +var virtualMachineNamePrefix = replace(replace(replace(replace(namingConvention, resourceAbbreviation, resourceAbbreviations.virtualMachines), locationAbbreviation, locations[locationVirtualMachines].abbreviation), environmentShortName, first(environmentShortName)), '-', '') var virtualNetworkNames = [ replace(replace(replace(namingConvention, resourceAbbreviation, resourceAbbreviations.virtualNetworks), '-${serviceName}', ''), locationAbbreviation, locations[locationControlPlane].abbreviation) replace(replace(replace(namingConvention, resourceAbbreviation, resourceAbbreviations.virtualNetworks), '-${serviceName}', ''), locationAbbreviation, locations[locationVirtualMachines].abbreviation) @@ -163,6 +163,7 @@ output omsOpinsightsPrivateDnsZoneName string = omsOpinsightsPrivateDnsZoneName output netAppAccountName string = netAppAccountName output netAppCapacityPoolName string = netAppCapacityPoolName output networkInterfaceNamePrefix string = networkInterfaceNamePrefix +output networkName string = networkName output networkSecurityGroupNames array = networkSecurityGroupNames output queuePrivateDnsZoneName string = queuePrivateDnsZoneName output recoveryServicesVaultName string = recoveryServicesVaultName @@ -177,6 +178,7 @@ output resourceGroupManagement string = resourceGroupManagement output resourceGroupsNetwork array = resourceGroupsNetwork output resourceGroupStorage string = resourceGroupStorage output routeTables array = routeTables +output serviceName string = serviceName output storageAccountNamePrefix string = storageAccountNamePrefix output storageAccountNetworkInterfaceNamePrefix string = storageAccountNetworkInterfaceNamePrefix output storageAccountPrivateEndpointNamePrefix string = storageAccountPrivateEndpointNamePrefix diff --git a/src/bicep/add-ons/azureVirtualDesktop/modules/sessionHosts/sessionHosts.bicep b/src/bicep/add-ons/azureVirtualDesktop/modules/sessionHosts/sessionHosts.bicep index d70e547bb..a20db53f6 100644 --- a/src/bicep/add-ons/azureVirtualDesktop/modules/sessionHosts/sessionHosts.bicep +++ b/src/bicep/add-ons/azureVirtualDesktop/modules/sessionHosts/sessionHosts.bicep @@ -41,6 +41,7 @@ param maxResourcesPerTemplateDeployment int param monitoring bool param netAppFileShares array param networkInterfaceNamePrefix string +param networkName string param organizationalUnitPath string param pooledHostPool bool param enableRecoveryServices bool @@ -57,6 +58,7 @@ param scalingMinimumNumberOfRdsh string param scalingSessionThresholdPerCPU string param securityPrincipalObjectIds array param securityLogAnalyticsWorkspaceResourceId string +param serviceName string param sessionHostBatchCount int param sessionHostIndex int param storageAccountPrefix string @@ -148,10 +150,12 @@ module virtualMachines 'virtualMachines.bicep' = [for i in range(1, sessionHostB monitoring: monitoring netAppFileShares: netAppFileShares networkInterfaceNamePrefix: networkInterfaceNamePrefix + networkName: networkName organizationalUnitPath: organizationalUnitPath resourceGroupControlPlane: resourceGroupControlPlane resourceGroupManagement: resourceGroupManagement securityLogAnalyticsWorkspaceResourceId: securityLogAnalyticsWorkspaceResourceId + serviceName: serviceName sessionHostCount: i == sessionHostBatchCount && divisionRemainderValue > 0 ? divisionRemainderValue : maxResourcesPerTemplateDeployment sessionHostIndex: i == 1 ? sessionHostIndex : ((i - 1) * maxResourcesPerTemplateDeployment) + sessionHostIndex storageAccountPrefix: storageAccountPrefix diff --git a/src/bicep/add-ons/azureVirtualDesktop/modules/sessionHosts/virtualMachines.bicep b/src/bicep/add-ons/azureVirtualDesktop/modules/sessionHosts/virtualMachines.bicep index e6955f4f5..0c769d7e0 100644 --- a/src/bicep/add-ons/azureVirtualDesktop/modules/sessionHosts/virtualMachines.bicep +++ b/src/bicep/add-ons/azureVirtualDesktop/modules/sessionHosts/virtualMachines.bicep @@ -34,10 +34,12 @@ param managementVirtualMachineName string param monitoring bool param netAppFileShares array param networkInterfaceNamePrefix string +param networkName string param organizationalUnitPath string param resourceGroupControlPlane string param resourceGroupManagement string param securityLogAnalyticsWorkspaceResourceId string +param serviceName string param sessionHostCount int param sessionHostIndex int param storageAccountPrefix string @@ -112,7 +114,7 @@ resource logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2021-06 } resource networkInterface 'Microsoft.Network/networkInterfaces@2020-05-01' = [for i in range(0, sessionHostCount): { - name: '${networkInterfaceNamePrefix}${padLeft((i + sessionHostIndex), 4, '0')}' + name: '${replace(networkInterfaceNamePrefix, '-${serviceName}', '')}-${padLeft((i + sessionHostIndex), 4, '0')}' location: location tags: tagsNetworkInterfaces properties: { @@ -135,7 +137,7 @@ resource networkInterface 'Microsoft.Network/networkInterfaces@2020-05-01' = [fo }] resource virtualMachine 'Microsoft.Compute/virtualMachines@2021-03-01' = [for i in range(0, sessionHostCount): { - name: '${virtualMachineNamePrefix}${padLeft((i + sessionHostIndex), 4, '0')}' + name: '${replace(virtualMachineNamePrefix, '${serviceName}${networkName}', '')}${padLeft((i + sessionHostIndex), 4, '0')}' location: location tags: tagsVirtualMachines zones: availability == 'AvailabilityZones' ? [ @@ -157,7 +159,7 @@ resource virtualMachine 'Microsoft.Compute/virtualMachines@2021-03-01' = [for i storageProfile: { imageReference: imageReference osDisk: { - name: '${diskNamePrefix}${padLeft((i + sessionHostIndex), 4, '0')}' + name: '${replace(diskNamePrefix, '-${serviceName}', '')}-${padLeft((i + sessionHostIndex), 4, '0')}' osType: 'Windows' createOption: 'FromImage' caching: 'ReadWrite' @@ -172,7 +174,7 @@ resource virtualMachine 'Microsoft.Compute/virtualMachines@2021-03-01' = [for i dataDisks: [] } osProfile: { - computerName: '${virtualMachineNamePrefix}${padLeft((i + sessionHostIndex), 4, '0')}' + computerName: '${replace(virtualMachineNamePrefix, '${serviceName}${networkName}', '')}${padLeft((i + sessionHostIndex), 4, '0')}' adminUsername: virtualMachineUsername adminPassword: virtualMachinePassword windowsConfiguration: { @@ -185,7 +187,7 @@ resource virtualMachine 'Microsoft.Compute/virtualMachines@2021-03-01' = [for i networkProfile: { networkInterfaces: [ { - id: resourceId('Microsoft.Network/networkInterfaces', '${networkInterfaceNamePrefix}${padLeft((i + sessionHostIndex), 4, '0')}') + id: networkInterface[i].id properties: { deleteOption: 'Delete' } diff --git a/src/bicep/add-ons/azureVirtualDesktop/solution.bicep b/src/bicep/add-ons/azureVirtualDesktop/solution.bicep index 306c84af6..b636486a9 100644 --- a/src/bicep/add-ons/azureVirtualDesktop/solution.bicep +++ b/src/bicep/add-ons/azureVirtualDesktop/solution.bicep @@ -415,6 +415,7 @@ module management 'modules/management/management.bicep' = { logAnalyticsWorkspaceRetention: logAnalyticsWorkspaceRetention logAnalyticsWorkspaceSku: logAnalyticsWorkspaceSku networkInterfaceNamePrefix: resourceNames.outputs.networkInterfaceNamePrefix + networkName: resourceNames.outputs.networkName organizationalUnitPath: organizationalUnitPath recoveryServices: recoveryServices recoveryServicesPrivateDnsZoneResourceId: '${privateDnsZoneResourceIdPrefix}${resourceNames.outputs.backupPrivateDnsZoneName}' @@ -429,6 +430,7 @@ module management 'modules/management/management.bicep' = { roleDefinitions: logic.outputs.roleDefinitions scalingTool: scalingTool securityLogAnalyticsWorkspaceResourceId: securityLogAnalyticsWorkspaceResourceId + serviceName: resourceNames.outputs.serviceName sessionHostCount: sessionHostCount storageService: logic.outputs.storageService subnetResourceId: length(deploymentLocations) == 1 ? network_controlPlane.outputs.subnetResourceId : network_hosts.outputs.subnetResourceId @@ -548,8 +550,11 @@ module fslogix 'modules/fslogix/fslogix.bicep' = { resourceGroupStorage: resourceNames.outputs.resourceGroupStorage securityPrincipalNames: map(securityPrincipals, item => item.name) securityPrincipalObjectIds: map(securityPrincipals, item => item.objectId) + serviceName: resourceNames.outputs.serviceName smbServerLocation: logic.outputs.smbServerLocation storageAccountNamePrefix: resourceNames.outputs.storageAccountNamePrefix + storageAccountNetworkInterfaceNamePrefix: resourceNames.outputs.storageAccountNetworkInterfaceNamePrefix + storageAccountPrivateEndpointNamePrefix: resourceNames.outputs.storageAccountPrivateEndpointNamePrefix storageCount: storageCount storageEncryptionKeyName: management.outputs.storageEncryptionKeyName storageIndex: storageIndex @@ -615,6 +620,7 @@ module sessionHosts 'modules/sessionHosts/sessionHosts.bicep' = { 'None' ] networkInterfaceNamePrefix: resourceNames.outputs.networkInterfaceNamePrefix + networkName: resourceNames.outputs.networkName organizationalUnitPath: organizationalUnitPath pooledHostPool: logic.outputs.pooledHostPool recoveryServicesVaultName: resourceNames.outputs.recoveryServicesVaultName @@ -629,6 +635,7 @@ module sessionHosts 'modules/sessionHosts/sessionHosts.bicep' = { scalingSessionThresholdPerCPU: scalingSessionThresholdPerCPU securityPrincipalObjectIds: map(securityPrincipals, item => item.objectId) securityLogAnalyticsWorkspaceResourceId: securityLogAnalyticsWorkspaceResourceId + serviceName: resourceNames.outputs.serviceName sessionHostBatchCount: logic.outputs.sessionHostBatchCount sessionHostIndex: sessionHostIndex storageAccountPrefix: resourceNames.outputs.storageAccountNamePrefix diff --git a/src/bicep/add-ons/azureVirtualDesktop/solution.json b/src/bicep/add-ons/azureVirtualDesktop/solution.json index 32ba2ec6a..859d7c7e8 100644 --- a/src/bicep/add-ons/azureVirtualDesktop/solution.json +++ b/src/bicep/add-ons/azureVirtualDesktop/solution.json @@ -5,7 +5,7 @@ "_generator": { "name": "bicep", "version": "0.25.3.34343", - "templateHash": "12211723162582136358" + "templateHash": "17354326795615741405" } }, "parameters": { @@ -551,7 +551,7 @@ "_generator": { "name": "bicep", "version": "0.25.3.34343", - "templateHash": "18297210563466846174" + "templateHash": "6308965299810592998" } }, "parameters": { @@ -1024,7 +1024,7 @@ "resourceAbbreviations": "[variables('$fxv#1')]", "agentSvcPrivateDnsZoneName": "[format('privatelink.agentsvc.azure-automation.{0}', coalesce(variables('privateDnsZoneSuffixes_AzureAutomation')[environment().name], variables('cloudEndpointSuffix')))]", "automationAccountDiagnosticSettingName": "[replace(replace(variables('namingConvention'), variables('resourceAbbreviation'), variables('resourceAbbreviations').diagnosticSettings), variables('locationAbbreviation'), variables('locations')[parameters('locationVirtualMachines')].abbreviation)]", - "automationAccountName": "[replace(replace(replace(variables('namingConvention'), variables('resourceAbbreviation'), variables('resourceAbbreviations').automationAccounts), variables('serviceName'), variables('resourceAbbreviations').automationAccounts), variables('locationAbbreviation'), variables('locations')[parameters('locationVirtualMachines')].abbreviation)]", + "automationAccountName": "[replace(replace(replace(variables('namingConvention'), variables('resourceAbbreviation'), variables('resourceAbbreviations').automationAccounts), format('-{0}', variables('serviceName')), ''), variables('locationAbbreviation'), variables('locations')[parameters('locationVirtualMachines')].abbreviation)]", "automationAccountNetworkInterfaceName": "[replace(replace(replace(variables('namingConvention'), variables('resourceAbbreviation'), variables('resourceAbbreviations').networkInterfaces), variables('serviceName'), format('DSCAndHybridWorker-{0}', variables('resourceAbbreviations').automationAccounts)), variables('locationAbbreviation'), variables('locations')[parameters('locationVirtualMachines')].abbreviation)]", "automationAccountPrivateEndpointName": "[replace(replace(replace(variables('namingConvention'), variables('resourceAbbreviation'), variables('resourceAbbreviations').privateEndpoints), variables('serviceName'), format('DSCAndHybridWorker-{0}', variables('resourceAbbreviations').automationAccounts)), variables('locationAbbreviation'), variables('locations')[parameters('locationVirtualMachines')].abbreviation)]", "availabilitySetNamePrefix": "[format('{0}-', replace(replace(replace(variables('namingConvention'), variables('resourceAbbreviation'), variables('resourceAbbreviations').availabilitySets), format('-{0}', variables('serviceName')), ''), variables('locationAbbreviation'), variables('locations')[parameters('locationVirtualMachines')].abbreviation))]", @@ -1038,7 +1038,7 @@ "desktopApplicationGroupName": "[replace(replace(replace(variables('namingConvention'), variables('resourceAbbreviation'), variables('resourceAbbreviations').desktopApplicationGroups), format('-{0}', variables('serviceName')), ''), variables('locationAbbreviation'), variables('locations')[parameters('locationControlPlane')].abbreviation)]", "diskAccessName": "[replace(replace(replace(variables('namingConvention'), variables('resourceAbbreviation'), variables('resourceAbbreviations').diskAccesses), format('-{0}', variables('serviceName')), ''), variables('locationAbbreviation'), variables('locations')[parameters('locationVirtualMachines')].abbreviation)]", "diskEncryptionSetName": "[replace(replace(replace(variables('namingConvention'), variables('resourceAbbreviation'), variables('resourceAbbreviations').diskEncryptionSets), format('-{0}', variables('serviceName')), ''), variables('locationAbbreviation'), variables('locations')[parameters('locationVirtualMachines')].abbreviation)]", - "diskNamePrefix": "[format('{0}-', replace(replace(replace(variables('namingConvention'), variables('resourceAbbreviation'), variables('resourceAbbreviations').disks), format('-{0}', variables('serviceName')), ''), variables('locationAbbreviation'), variables('locations')[parameters('locationVirtualMachines')].abbreviation))]", + "diskNamePrefix": "[replace(replace(variables('namingConvention'), variables('resourceAbbreviation'), variables('resourceAbbreviations').disks), variables('locationAbbreviation'), variables('locations')[parameters('locationVirtualMachines')].abbreviation)]", "filePrivateDnsZoneName": "[format('privatelink.file.{0}', environment().suffixes.storage)]", "fileShareNames": { "CloudCacheProfileContainer": [ @@ -1067,7 +1067,7 @@ "logAnalyticsWorkspaceName": "[replace(replace(replace(variables('namingConvention'), variables('resourceAbbreviation'), variables('resourceAbbreviations').logAnalyticsWorkspaces), format('-{0}', variables('serviceName')), ''), variables('locationAbbreviation'), variables('locations')[parameters('locationVirtualMachines')].abbreviation)]", "netAppAccountName": "[replace(replace(replace(variables('namingConvention'), variables('resourceAbbreviation'), variables('resourceAbbreviations').netAppAccounts), format('-{0}', variables('serviceName')), ''), variables('locationAbbreviation'), variables('locations')[parameters('locationVirtualMachines')].abbreviation)]", "netAppCapacityPoolName": "[replace(replace(replace(variables('namingConvention'), variables('resourceAbbreviation'), variables('resourceAbbreviations').netAppCapacityPools), format('-{0}', variables('serviceName')), ''), variables('locationAbbreviation'), variables('locations')[parameters('locationVirtualMachines')].abbreviation)]", - "networkInterfaceNamePrefix": "[format('{0}-', replace(replace(variables('namingConvention'), variables('resourceAbbreviation'), variables('resourceAbbreviations').networkInterfaces), variables('locationAbbreviation'), variables('locations')[parameters('locationVirtualMachines')].abbreviation))]", + "networkInterfaceNamePrefix": "[replace(replace(variables('namingConvention'), variables('resourceAbbreviation'), variables('resourceAbbreviations').networkInterfaces), variables('locationAbbreviation'), variables('locations')[parameters('locationVirtualMachines')].abbreviation)]", "networkSecurityGroupNames": [ "[replace(replace(replace(variables('namingConvention'), variables('resourceAbbreviation'), variables('resourceAbbreviations').networkSecurityGroups), format('-{0}', variables('serviceName')), ''), variables('locationAbbreviation'), variables('locations')[parameters('locationControlPlane')].abbreviation)]", "[replace(replace(replace(variables('namingConvention'), variables('resourceAbbreviation'), variables('resourceAbbreviations').networkSecurityGroups), format('-{0}', variables('serviceName')), ''), variables('locationAbbreviation'), variables('locations')[parameters('locationVirtualMachines')].abbreviation)]" @@ -1097,7 +1097,7 @@ "storageAccountNetworkInterfaceNamePrefix": "[replace(replace(replace(replace(variables('namingConvention'), variables('resourceAbbreviation'), variables('resourceAbbreviations').networkInterfaces), variables('serviceName'), variables('resourceAbbreviations').storageAccounts), variables('locationAbbreviation'), variables('locations')[parameters('locationVirtualMachines')].abbreviation), parameters('environmentShortName'), first(parameters('environmentShortName')))]", "storageAccountPrivateEndpointNamePrefix": "[replace(replace(replace(replace(variables('namingConvention'), variables('resourceAbbreviation'), variables('resourceAbbreviations').privateEndpoints), variables('serviceName'), variables('resourceAbbreviations').storageAccounts), variables('locationAbbreviation'), variables('locations')[parameters('locationVirtualMachines')].abbreviation), parameters('environmentShortName'), first(parameters('environmentShortName')))]", "userAssignedIdentityNamePrefix": "[replace(replace(variables('namingConvention'), variables('resourceAbbreviation'), variables('resourceAbbreviations').userAssignedIdentities), variables('locationAbbreviation'), variables('locations')[parameters('locationVirtualMachines')].abbreviation)]", - "virtualMachineNamePrefix": "[replace(replace(replace(replace(replace(variables('namingConvention'), variables('resourceAbbreviation'), variables('resourceAbbreviations').virtualMachines), format('-{0}', variables('serviceName')), ''), variables('locationAbbreviation'), variables('locations')[parameters('locationVirtualMachines')].abbreviation), parameters('environmentShortName'), first(parameters('environmentShortName'))), '-', '')]", + "virtualMachineNamePrefix": "[replace(replace(replace(replace(variables('namingConvention'), variables('resourceAbbreviation'), variables('resourceAbbreviations').virtualMachines), variables('locationAbbreviation'), variables('locations')[parameters('locationVirtualMachines')].abbreviation), parameters('environmentShortName'), first(parameters('environmentShortName'))), '-', '')]", "virtualNetworkNames": [ "[replace(replace(replace(variables('namingConvention'), variables('resourceAbbreviation'), variables('resourceAbbreviations').virtualNetworks), format('-{0}', variables('serviceName')), ''), variables('locationAbbreviation'), variables('locations')[parameters('locationControlPlane')].abbreviation)]", "[replace(replace(replace(variables('namingConvention'), variables('resourceAbbreviation'), variables('resourceAbbreviations').virtualNetworks), format('-{0}', variables('serviceName')), ''), variables('locationAbbreviation'), variables('locations')[parameters('locationVirtualMachines')].abbreviation)]" @@ -1252,6 +1252,10 @@ "type": "string", "value": "[variables('networkInterfaceNamePrefix')]" }, + "networkName": { + "type": "string", + "value": "[variables('networkName')]" + }, "networkSecurityGroupNames": { "type": "array", "value": "[variables('networkSecurityGroupNames')]" @@ -1308,6 +1312,10 @@ "type": "array", "value": "[variables('routeTables')]" }, + "serviceName": { + "type": "string", + "value": "[variables('serviceName')]" + }, "storageAccountNamePrefix": { "type": "string", "value": "[variables('storageAccountNamePrefix')]" @@ -2927,6 +2935,9 @@ "networkInterfaceNamePrefix": { "value": "[reference(subscriptionResourceId('Microsoft.Resources/deployments', format('ResourceNames_{0}', parameters('timestamp'))), '2022-09-01').outputs.networkInterfaceNamePrefix.value]" }, + "networkName": { + "value": "[reference(subscriptionResourceId('Microsoft.Resources/deployments', format('ResourceNames_{0}', parameters('timestamp'))), '2022-09-01').outputs.networkName.value]" + }, "organizationalUnitPath": { "value": "[parameters('organizationalUnitPath')]" }, @@ -2969,6 +2980,9 @@ "securityLogAnalyticsWorkspaceResourceId": { "value": "[parameters('securityLogAnalyticsWorkspaceResourceId')]" }, + "serviceName": { + "value": "[reference(subscriptionResourceId('Microsoft.Resources/deployments', format('ResourceNames_{0}', parameters('timestamp'))), '2022-09-01').outputs.serviceName.value]" + }, "sessionHostCount": { "value": "[parameters('sessionHostCount')]" }, @@ -3014,7 +3028,7 @@ "_generator": { "name": "bicep", "version": "0.25.3.34343", - "templateHash": "1228740426246280285" + "templateHash": "11487646520353594492" } }, "parameters": { @@ -3126,6 +3140,9 @@ "networkInterfaceNamePrefix": { "type": "string" }, + "networkName": { + "type": "string" + }, "organizationalUnitPath": { "type": "string" }, @@ -3168,6 +3185,9 @@ "securityLogAnalyticsWorkspaceResourceId": { "type": "string" }, + "serviceName": { + "type": "string" + }, "sessionHostCount": { "type": "int" }, @@ -3435,7 +3455,7 @@ "value": "[parameters('locationVirtualMachines')]" }, "name": { - "value": "[format('{0}-deployment', parameters('userAssignedIdentityNamePrefix'))]" + "value": "[replace(parameters('userAssignedIdentityNamePrefix'), parameters('serviceName'), 'deployment')]" }, "tags": "[if(contains(parameters('tags'), 'Microsoft.ManagedIdentity/userAssignedIdentities'), createObject('value', parameters('tags')['Microsoft.ManagedIdentity/userAssignedIdentities']), createObject('value', createObject()))]" }, @@ -3569,6 +3589,9 @@ "resourceGroupManagement": { "value": "[parameters('resourceGroupManagement')]" }, + "serviceName": { + "value": "[parameters('serviceName')]" + }, "storageAccountName": { "value": "[split(parameters('artifactsStorageAccountResourceId'), '/')[8]]" }, @@ -3592,7 +3615,7 @@ "_generator": { "name": "bicep", "version": "0.25.3.34343", - "templateHash": "4306236320133689635" + "templateHash": "7286915926579855408" } }, "parameters": { @@ -3602,6 +3625,9 @@ "resourceGroupManagement": { "type": "string" }, + "serviceName": { + "type": "string" + }, "storageAccountName": { "type": "string" }, @@ -3619,7 +3645,7 @@ } }, "variables": { - "name": "[format('{0}-artifacts', parameters('userAssignedIdentityNamePrefix'))]", + "name": "[replace(parameters('userAssignedIdentityNamePrefix'), parameters('serviceName'), 'artifacts')]", "roleDefinitionId": "2a2b9908-6ea1-4ae2-8e65-a410df84e7d1" }, "resources": [ @@ -3751,6 +3777,9 @@ "location": { "value": "[parameters('locationVirtualMachines')]" }, + "serviceName": { + "value": "[parameters('serviceName')]" + }, "subnetResourceId": { "value": "[parameters('subnetResourceId')]" }, @@ -3771,7 +3800,7 @@ "_generator": { "name": "bicep", "version": "0.25.3.34343", - "templateHash": "3085526469752228415" + "templateHash": "3854212705952648622" } }, "parameters": { @@ -3797,6 +3826,9 @@ "location": { "type": "string" }, + "serviceName": { + "type": "string" + }, "subnetResourceId": { "type": "string" }, @@ -3974,7 +4006,7 @@ "value": "[parameters('location')]" }, "name": { - "value": "[format('{0}-encryption', parameters('userAssignedIdentityNamePrefix'))]" + "value": "[replace(parameters('userAssignedIdentityNamePrefix'), parameters('serviceName'), 'encryption')]" }, "tags": "[if(contains(parameters('tags'), 'Microsoft.ManagedIdentity/userAssignedIdentities'), createObject('value', parameters('tags')['Microsoft.ManagedIdentity/userAssignedIdentities']), createObject('value', createObject()))]" }, @@ -4316,12 +4348,18 @@ "networkInterfaceNamePrefix": { "value": "[parameters('networkInterfaceNamePrefix')]" }, + "networkName": { + "value": "[parameters('networkName')]" + }, "organizationalUnitPath": { "value": "[parameters('organizationalUnitPath')]" }, "securityLogAnalyticsWorkspaceResourceId": { "value": "[parameters('securityLogAnalyticsWorkspaceResourceId')]" }, + "serviceName": { + "value": "[parameters('serviceName')]" + }, "subnet": { "value": "[split(parameters('subnetResourceId'), '/')[10]]" }, @@ -4353,7 +4391,7 @@ "_generator": { "name": "bicep", "version": "0.25.3.34343", - "templateHash": "1082833111773432320" + "templateHash": "4264665942068044388" } }, "parameters": { @@ -4393,12 +4431,18 @@ "networkInterfaceNamePrefix": { "type": "string" }, + "networkName": { + "type": "string" + }, "organizationalUnitPath": { "type": "string" }, "securityLogAnalyticsWorkspaceResourceId": { "type": "string" }, + "serviceName": { + "type": "string" + }, "subnet": { "type": "string" }, @@ -4432,12 +4476,12 @@ } }, "variables": { - "networkInterfaceName": "[format('{0}mgt', parameters('networkInterfaceNamePrefix'))]", + "networkInterfaceName": "[replace(parameters('networkInterfaceNamePrefix'), parameters('serviceName'), 'mgt-vm')]", "securitylogAnalyticsWorkspaceName": "[if(variables('securityMonitoring'), split(parameters('securityLogAnalyticsWorkspaceResourceId'), '/')[8], '')]", "securityLogAnalyticsWorkspaceResourceGroupName": "[if(variables('securityMonitoring'), split(parameters('securityLogAnalyticsWorkspaceResourceId'), '/')[4], resourceGroup().name)]", "securityLogAnalyticsWorkspaceSubscriptionId": "[if(variables('securityMonitoring'), split(parameters('securityLogAnalyticsWorkspaceResourceId'), '/')[2], subscription().subscriptionId)]", "securityMonitoring": "[if(empty(parameters('securityLogAnalyticsWorkspaceResourceId')), false(), true())]", - "virtualMachineName": "[format('{0}mgt', parameters('virtualMachineNamePrefix'))]" + "virtualMachineName": "[replace(replace(parameters('virtualMachineNamePrefix'), parameters('serviceName'), 'mgt'), parameters('networkName'), '')]" }, "resources": [ { @@ -4492,7 +4536,7 @@ }, "storageAccountType": "[parameters('diskSku')]" }, - "name": "[format('{0}mgt', parameters('diskNamePrefix'))]" + "name": "[replace(parameters('diskNamePrefix'), parameters('serviceName'), 'mgt-vm')]" }, "dataDisks": [] }, @@ -7618,12 +7662,21 @@ "securityPrincipalObjectIds": { "value": "[map(parameters('securityPrincipals'), lambda('item', lambdaVariables('item').objectId))]" }, + "serviceName": { + "value": "[reference(subscriptionResourceId('Microsoft.Resources/deployments', format('ResourceNames_{0}', parameters('timestamp'))), '2022-09-01').outputs.serviceName.value]" + }, "smbServerLocation": { "value": "[reference(subscriptionResourceId('Microsoft.Resources/deployments', format('Logic_{0}', parameters('timestamp'))), '2022-09-01').outputs.smbServerLocation.value]" }, "storageAccountNamePrefix": { "value": "[reference(subscriptionResourceId('Microsoft.Resources/deployments', format('ResourceNames_{0}', parameters('timestamp'))), '2022-09-01').outputs.storageAccountNamePrefix.value]" }, + "storageAccountNetworkInterfaceNamePrefix": { + "value": "[reference(subscriptionResourceId('Microsoft.Resources/deployments', format('ResourceNames_{0}', parameters('timestamp'))), '2022-09-01').outputs.storageAccountNetworkInterfaceNamePrefix.value]" + }, + "storageAccountPrivateEndpointNamePrefix": { + "value": "[reference(subscriptionResourceId('Microsoft.Resources/deployments', format('ResourceNames_{0}', parameters('timestamp'))), '2022-09-01').outputs.storageAccountPrivateEndpointNamePrefix.value]" + }, "storageCount": { "value": "[parameters('storageCount')]" }, @@ -7659,7 +7712,7 @@ "_generator": { "name": "bicep", "version": "0.25.3.34343", - "templateHash": "5718452863906302578" + "templateHash": "12002064648343864093" } }, "parameters": { @@ -7762,12 +7815,21 @@ "securityPrincipalNames": { "type": "array" }, + "serviceName": { + "type": "string" + }, "smbServerLocation": { "type": "string" }, "storageAccountNamePrefix": { "type": "string" }, + "storageAccountNetworkInterfaceNamePrefix": { + "type": "string" + }, + "storageAccountPrivateEndpointNamePrefix": { + "type": "string" + }, "storageCount": { "type": "int" }, @@ -8247,9 +8309,18 @@ "securityPrincipalObjectIds": { "value": "[parameters('securityPrincipalObjectIds')]" }, + "serviceName": { + "value": "[parameters('serviceName')]" + }, "storageAccountNamePrefix": { "value": "[parameters('storageAccountNamePrefix')]" }, + "storageAccountNetworkInterfaceNamePrefix": { + "value": "[parameters('storageAccountNetworkInterfaceNamePrefix')]" + }, + "storageAccountPrivateEndpointNamePrefix": { + "value": "[parameters('storageAccountPrivateEndpointNamePrefix')]" + }, "storageCount": { "value": "[parameters('storageCount')]" }, @@ -8303,7 +8374,7 @@ "_generator": { "name": "bicep", "version": "0.25.3.34343", - "templateHash": "14793803037488919131" + "templateHash": "16386142985010277329" } }, "parameters": { @@ -8382,10 +8453,19 @@ "securityPrincipalNames": { "type": "array" }, + "serviceName": { + "type": "string" + }, "storageAccountNamePrefix": { "type": "string", "minLength": 3 }, + "storageAccountNetworkInterfaceNamePrefix": { + "type": "string" + }, + "storageAccountPrivateEndpointNamePrefix": { + "type": "string" + }, "storageCount": { "type": "int" }, @@ -8549,14 +8629,14 @@ }, "type": "Microsoft.Network/privateEndpoints", "apiVersion": "2023-04-01", - "name": "[format('pe-{0}{1}-file', parameters('storageAccountNamePrefix'), padLeft(add(range(0, parameters('storageCount'))[copyIndex()], parameters('storageIndex')), 2, '0'))]", + "name": "[format('{0}{1}', replace(parameters('storageAccountPrivateEndpointNamePrefix'), parameters('serviceName'), 'file'), padLeft(add(range(0, parameters('storageCount'))[copyIndex()], parameters('storageIndex')), 2, '0'))]", "location": "[parameters('location')]", "tags": "[parameters('tagsPrivateEndpoints')]", "properties": { - "customNetworkInterfaceName": "[format('nic-{0}{1}-file', parameters('storageAccountNamePrefix'), padLeft(add(range(0, parameters('storageCount'))[copyIndex()], parameters('storageIndex')), 2, '0'))]", + "customNetworkInterfaceName": "[format('{0}{1}', replace(parameters('storageAccountNetworkInterfaceNamePrefix'), parameters('serviceName'), 'file'), padLeft(add(range(0, parameters('storageCount'))[copyIndex()], parameters('storageIndex')), 2, '0'))]", "privateLinkServiceConnections": [ { - "name": "[format('pe-{0}', format('{0}{1}', parameters('storageAccountNamePrefix'), padLeft(add(range(0, parameters('storageCount'))[range(0, parameters('storageCount'))[copyIndex()]], parameters('storageIndex')), 2, '0')))]", + "name": "[format('{0}{1}', replace(parameters('storageAccountPrivateEndpointNamePrefix'), parameters('serviceName'), 'file'), padLeft(add(range(0, parameters('storageCount'))[copyIndex()], parameters('storageIndex')), 2, '0'))]", "properties": { "privateLinkServiceId": "[resourceId('Microsoft.Storage/storageAccounts', format('{0}{1}', parameters('storageAccountNamePrefix'), padLeft(add(range(0, parameters('storageCount'))[range(0, parameters('storageCount'))[copyIndex()]], parameters('storageIndex')), 2, '0')))]", "groupIds": [ @@ -8570,7 +8650,6 @@ } }, "dependsOn": [ - "[resourceId('Microsoft.Storage/storageAccounts', format('{0}{1}', parameters('storageAccountNamePrefix'), padLeft(add(range(0, parameters('storageCount'))[range(0, parameters('storageCount'))[copyIndex()]], parameters('storageIndex')), 2, '0')))]", "[resourceId('Microsoft.Storage/storageAccounts', format('{0}{1}', parameters('storageAccountNamePrefix'), padLeft(add(range(0, parameters('storageCount'))[range(0, parameters('storageCount'))[copyIndex()]], parameters('storageIndex')), 2, '0')))]" ] }, @@ -8581,7 +8660,7 @@ }, "type": "Microsoft.Network/privateEndpoints/privateDnsZoneGroups", "apiVersion": "2021-08-01", - "name": "[format('{0}/{1}', format('pe-{0}{1}-file', parameters('storageAccountNamePrefix'), padLeft(add(range(0, parameters('storageCount'))[range(0, parameters('storageCount'))[copyIndex()]], parameters('storageIndex')), 2, '0')), format('{0}{1}', parameters('storageAccountNamePrefix'), padLeft(add(range(0, parameters('storageCount'))[copyIndex()], parameters('storageIndex')), 2, '0')))]", + "name": "[format('{0}/{1}', format('{0}{1}', replace(parameters('storageAccountPrivateEndpointNamePrefix'), parameters('serviceName'), 'file'), padLeft(add(range(0, parameters('storageCount'))[range(0, parameters('storageCount'))[copyIndex()]], parameters('storageIndex')), 2, '0')), format('{0}{1}', parameters('storageAccountNamePrefix'), padLeft(add(range(0, parameters('storageCount'))[copyIndex()], parameters('storageIndex')), 2, '0')))]", "properties": { "privateDnsZoneConfigs": [ { @@ -8593,7 +8672,7 @@ ] }, "dependsOn": [ - "[resourceId('Microsoft.Network/privateEndpoints', format('pe-{0}{1}-file', parameters('storageAccountNamePrefix'), padLeft(add(range(0, parameters('storageCount'))[range(0, parameters('storageCount'))[copyIndex()]], parameters('storageIndex')), 2, '0')))]", + "[resourceId('Microsoft.Network/privateEndpoints', format('{0}{1}', replace(parameters('storageAccountPrivateEndpointNamePrefix'), parameters('serviceName'), 'file'), padLeft(add(range(0, parameters('storageCount'))[range(0, parameters('storageCount'))[copyIndex()]], parameters('storageIndex')), 2, '0')))]", "storageAccounts" ] }, @@ -9639,6 +9718,9 @@ "networkInterfaceNamePrefix": { "value": "[reference(subscriptionResourceId('Microsoft.Resources/deployments', format('ResourceNames_{0}', parameters('timestamp'))), '2022-09-01').outputs.networkInterfaceNamePrefix.value]" }, + "networkName": { + "value": "[reference(subscriptionResourceId('Microsoft.Resources/deployments', format('ResourceNames_{0}', parameters('timestamp'))), '2022-09-01').outputs.networkName.value]" + }, "organizationalUnitPath": { "value": "[parameters('organizationalUnitPath')]" }, @@ -9681,6 +9763,9 @@ "securityLogAnalyticsWorkspaceResourceId": { "value": "[parameters('securityLogAnalyticsWorkspaceResourceId')]" }, + "serviceName": { + "value": "[reference(subscriptionResourceId('Microsoft.Resources/deployments', format('ResourceNames_{0}', parameters('timestamp'))), '2022-09-01').outputs.serviceName.value]" + }, "sessionHostBatchCount": { "value": "[reference(subscriptionResourceId('Microsoft.Resources/deployments', format('Logic_{0}', parameters('timestamp'))), '2022-09-01').outputs.sessionHostBatchCount.value]" }, @@ -9740,7 +9825,7 @@ "_generator": { "name": "bicep", "version": "0.25.3.34343", - "templateHash": "5923296477539659124" + "templateHash": "148665908438674755" } }, "parameters": { @@ -9864,6 +9949,9 @@ "networkInterfaceNamePrefix": { "type": "string" }, + "networkName": { + "type": "string" + }, "organizationalUnitPath": { "type": "string" }, @@ -9912,6 +10000,9 @@ "securityLogAnalyticsWorkspaceResourceId": { "type": "string" }, + "serviceName": { + "type": "string" + }, "sessionHostBatchCount": { "type": "int" }, @@ -10240,6 +10331,9 @@ "networkInterfaceNamePrefix": { "value": "[parameters('networkInterfaceNamePrefix')]" }, + "networkName": { + "value": "[parameters('networkName')]" + }, "organizationalUnitPath": { "value": "[parameters('organizationalUnitPath')]" }, @@ -10252,6 +10346,9 @@ "securityLogAnalyticsWorkspaceResourceId": { "value": "[parameters('securityLogAnalyticsWorkspaceResourceId')]" }, + "serviceName": { + "value": "[parameters('serviceName')]" + }, "sessionHostCount": "[if(and(equals(range(1, parameters('sessionHostBatchCount'))[copyIndex()], parameters('sessionHostBatchCount')), greater(parameters('divisionRemainderValue'), 0)), createObject('value', parameters('divisionRemainderValue')), createObject('value', parameters('maxResourcesPerTemplateDeployment')))]", "sessionHostIndex": "[if(equals(range(1, parameters('sessionHostBatchCount'))[copyIndex()], 1), createObject('value', parameters('sessionHostIndex')), createObject('value', add(mul(sub(range(1, parameters('sessionHostBatchCount'))[copyIndex()], 1), parameters('maxResourcesPerTemplateDeployment')), parameters('sessionHostIndex'))))]", "storageAccountPrefix": { @@ -10310,7 +10407,7 @@ "_generator": { "name": "bicep", "version": "0.25.3.34343", - "templateHash": "17511805322486017859" + "templateHash": "7703628870831507233" } }, "parameters": { @@ -10419,6 +10516,9 @@ "networkInterfaceNamePrefix": { "type": "string" }, + "networkName": { + "type": "string" + }, "organizationalUnitPath": { "type": "string" }, @@ -10431,6 +10531,9 @@ "securityLogAnalyticsWorkspaceResourceId": { "type": "string" }, + "serviceName": { + "type": "string" + }, "sessionHostCount": { "type": "int" }, @@ -10535,7 +10638,7 @@ }, "type": "Microsoft.Network/networkInterfaces", "apiVersion": "2020-05-01", - "name": "[format('{0}{1}', parameters('networkInterfaceNamePrefix'), padLeft(add(range(0, parameters('sessionHostCount'))[copyIndex()], parameters('sessionHostIndex')), 4, '0'))]", + "name": "[format('{0}-{1}', replace(parameters('networkInterfaceNamePrefix'), format('-{0}', parameters('serviceName')), ''), padLeft(add(range(0, parameters('sessionHostCount'))[copyIndex()], parameters('sessionHostIndex')), 4, '0'))]", "location": "[parameters('location')]", "tags": "[parameters('tagsNetworkInterfaces')]", "properties": { @@ -10563,7 +10666,7 @@ }, "type": "Microsoft.Compute/virtualMachines", "apiVersion": "2021-03-01", - "name": "[format('{0}{1}', parameters('virtualMachineNamePrefix'), padLeft(add(range(0, parameters('sessionHostCount'))[copyIndex()], parameters('sessionHostIndex')), 4, '0'))]", + "name": "[format('{0}{1}', replace(parameters('virtualMachineNamePrefix'), format('{0}{1}', parameters('serviceName'), parameters('networkName')), ''), padLeft(add(range(0, parameters('sessionHostCount'))[copyIndex()], parameters('sessionHostIndex')), 4, '0'))]", "location": "[parameters('location')]", "tags": "[parameters('tagsVirtualMachines')]", "zones": "[if(equals(parameters('availability'), 'AvailabilityZones'), createArray(parameters('availabilityZones')[mod(range(0, parameters('sessionHostCount'))[copyIndex()], length(parameters('availabilityZones')))]), null())]", @@ -10581,7 +10684,7 @@ "storageProfile": { "imageReference": "[variables('imageReference')]", "osDisk": { - "name": "[format('{0}{1}', parameters('diskNamePrefix'), padLeft(add(range(0, parameters('sessionHostCount'))[copyIndex()], parameters('sessionHostIndex')), 4, '0'))]", + "name": "[format('{0}-{1}', replace(parameters('diskNamePrefix'), format('-{0}', parameters('serviceName')), ''), padLeft(add(range(0, parameters('sessionHostCount'))[copyIndex()], parameters('sessionHostIndex')), 4, '0'))]", "osType": "Windows", "createOption": "FromImage", "caching": "ReadWrite", @@ -10596,7 +10699,7 @@ "dataDisks": [] }, "osProfile": { - "computerName": "[format('{0}{1}', parameters('virtualMachineNamePrefix'), padLeft(add(range(0, parameters('sessionHostCount'))[copyIndex()], parameters('sessionHostIndex')), 4, '0'))]", + "computerName": "[format('{0}{1}', replace(parameters('virtualMachineNamePrefix'), format('{0}{1}', parameters('serviceName'), parameters('networkName')), ''), padLeft(add(range(0, parameters('sessionHostCount'))[copyIndex()], parameters('sessionHostIndex')), 4, '0'))]", "adminUsername": "[parameters('virtualMachineUsername')]", "adminPassword": "[parameters('virtualMachinePassword')]", "windowsConfiguration": { @@ -10609,7 +10712,7 @@ "networkProfile": { "networkInterfaces": [ { - "id": "[resourceId('Microsoft.Network/networkInterfaces', format('{0}{1}', parameters('networkInterfaceNamePrefix'), padLeft(add(range(0, parameters('sessionHostCount'))[copyIndex()], parameters('sessionHostIndex')), 4, '0')))]", + "id": "[resourceId('Microsoft.Network/networkInterfaces', format('{0}-{1}', replace(parameters('networkInterfaceNamePrefix'), format('-{0}', parameters('serviceName')), ''), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')))]", "properties": { "deleteOption": "Delete" } @@ -10642,7 +10745,7 @@ }, "type": "Microsoft.Compute/virtualMachines/extensions", "apiVersion": "2021-03-01", - "name": "[format('{0}/{1}', format('{0}{1}', parameters('virtualMachineNamePrefix'), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')), 'IaaSAntimalware')]", + "name": "[format('{0}/{1}', format('{0}{1}', replace(parameters('virtualMachineNamePrefix'), format('{0}{1}', parameters('serviceName'), parameters('networkName')), ''), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')), 'IaaSAntimalware')]", "location": "[parameters('location')]", "tags": "[parameters('tagsVirtualMachines')]", "properties": { @@ -10664,7 +10767,7 @@ } }, "dependsOn": [ - "[resourceId('Microsoft.Compute/virtualMachines', format('{0}{1}', parameters('virtualMachineNamePrefix'), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')))]" + "[resourceId('Microsoft.Compute/virtualMachines', format('{0}{1}', replace(parameters('virtualMachineNamePrefix'), format('{0}{1}', parameters('serviceName'), parameters('networkName')), ''), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')))]" ] }, { @@ -10674,7 +10777,7 @@ }, "type": "Microsoft.Compute/virtualMachines/extensions", "apiVersion": "2021-03-01", - "name": "[format('{0}/{1}', format('{0}{1}', parameters('virtualMachineNamePrefix'), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')), 'GuestAttestation')]", + "name": "[format('{0}/{1}', format('{0}{1}', replace(parameters('virtualMachineNamePrefix'), format('{0}{1}', parameters('serviceName'), parameters('networkName')), ''), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')), 'GuestAttestation')]", "location": "[parameters('location')]", "properties": { "publisher": "Microsoft.Azure.Security.WindowsAttestation", @@ -10697,7 +10800,7 @@ } }, "dependsOn": [ - "[resourceId('Microsoft.Compute/virtualMachines', format('{0}{1}', parameters('virtualMachineNamePrefix'), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')))]" + "[resourceId('Microsoft.Compute/virtualMachines', format('{0}{1}', replace(parameters('virtualMachineNamePrefix'), format('{0}{1}', parameters('serviceName'), parameters('networkName')), ''), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')))]" ] }, { @@ -10708,7 +10811,7 @@ "condition": "[and(parameters('monitoring'), equals(parameters('virtualMachineMonitoringAgent'), 'LogAnalyticsAgent'))]", "type": "Microsoft.Compute/virtualMachines/extensions", "apiVersion": "2021-03-01", - "name": "[format('{0}/{1}', format('{0}{1}', parameters('virtualMachineNamePrefix'), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')), 'MicrosoftmonitoringAgent')]", + "name": "[format('{0}/{1}', format('{0}{1}', replace(parameters('virtualMachineNamePrefix'), format('{0}{1}', parameters('serviceName'), parameters('networkName')), ''), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')), 'MicrosoftmonitoringAgent')]", "location": "[parameters('location')]", "tags": "[parameters('tagsVirtualMachines')]", "properties": { @@ -10725,7 +10828,7 @@ }, "dependsOn": [ "extension_IaasAntimalware", - "[resourceId('Microsoft.Compute/virtualMachines', format('{0}{1}', parameters('virtualMachineNamePrefix'), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')))]" + "[resourceId('Microsoft.Compute/virtualMachines', format('{0}{1}', replace(parameters('virtualMachineNamePrefix'), format('{0}{1}', parameters('serviceName'), parameters('networkName')), ''), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')))]" ] }, { @@ -10736,7 +10839,7 @@ "condition": "[and(parameters('monitoring'), equals(parameters('virtualMachineMonitoringAgent'), 'AzureMonitorAgent'))]", "type": "Microsoft.Compute/virtualMachines/extensions", "apiVersion": "2023-03-01", - "name": "[format('{0}/{1}', format('{0}{1}', parameters('virtualMachineNamePrefix'), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')), 'AzureMonitorWindowsAgent')]", + "name": "[format('{0}/{1}', format('{0}{1}', replace(parameters('virtualMachineNamePrefix'), format('{0}{1}', parameters('serviceName'), parameters('networkName')), ''), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')), 'AzureMonitorWindowsAgent')]", "location": "[parameters('location')]", "tags": "[parameters('tagsVirtualMachines')]", "properties": { @@ -10747,7 +10850,7 @@ "enableAutomaticUpgrade": true }, "dependsOn": [ - "[resourceId('Microsoft.Compute/virtualMachines', format('{0}{1}', parameters('virtualMachineNamePrefix'), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')))]" + "[resourceId('Microsoft.Compute/virtualMachines', format('{0}{1}', replace(parameters('virtualMachineNamePrefix'), format('{0}{1}', parameters('serviceName'), parameters('networkName')), ''), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')))]" ] }, { @@ -10758,7 +10861,7 @@ "condition": "[and(parameters('monitoring'), equals(parameters('virtualMachineMonitoringAgent'), 'AzureMonitorAgent'))]", "type": "Microsoft.Insights/dataCollectionRuleAssociations", "apiVersion": "2022-06-01", - "scope": "[format('Microsoft.Compute/virtualMachines/{0}', format('{0}{1}', parameters('virtualMachineNamePrefix'), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')))]", + "scope": "[format('Microsoft.Compute/virtualMachines/{0}', format('{0}{1}', replace(parameters('virtualMachineNamePrefix'), format('{0}{1}', parameters('serviceName'), parameters('networkName')), ''), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')))]", "name": "[parameters('dataCollectionRuleAssociationName')]", "properties": { "dataCollectionRuleId": "[parameters('dataCollectionRuleResourceId')]", @@ -10766,7 +10869,7 @@ }, "dependsOn": [ "extension_AzureMonitorWindowsAgent", - "[resourceId('Microsoft.Compute/virtualMachines', format('{0}{1}', parameters('virtualMachineNamePrefix'), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')))]" + "[resourceId('Microsoft.Compute/virtualMachines', format('{0}{1}', replace(parameters('virtualMachineNamePrefix'), format('{0}{1}', parameters('serviceName'), parameters('networkName')), ''), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')))]" ] }, { @@ -10776,7 +10879,7 @@ }, "type": "Microsoft.Compute/virtualMachines/extensions", "apiVersion": "2021-03-01", - "name": "[format('{0}/{1}', format('{0}{1}', parameters('virtualMachineNamePrefix'), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')), 'CustomScriptExtension')]", + "name": "[format('{0}/{1}', format('{0}{1}', replace(parameters('virtualMachineNamePrefix'), format('{0}{1}', parameters('serviceName'), parameters('networkName')), ''), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')), 'CustomScriptExtension')]", "location": "[parameters('location')]", "tags": "[parameters('tagsVirtualMachines')]", "properties": { @@ -10802,7 +10905,7 @@ "dependsOn": [ "dataCollectionRuleAssociation", "extension_MicrosoftMonitoringAgent", - "[resourceId('Microsoft.Compute/virtualMachines', format('{0}{1}', parameters('virtualMachineNamePrefix'), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')))]" + "[resourceId('Microsoft.Compute/virtualMachines', format('{0}{1}', replace(parameters('virtualMachineNamePrefix'), format('{0}{1}', parameters('serviceName'), parameters('networkName')), ''), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')))]" ] }, { @@ -10813,7 +10916,7 @@ "condition": "[contains(parameters('activeDirectorySolution'), 'DomainServices')]", "type": "Microsoft.Compute/virtualMachines/extensions", "apiVersion": "2021-03-01", - "name": "[format('{0}/{1}', format('{0}{1}', parameters('virtualMachineNamePrefix'), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')), 'JsonADDomainExtension')]", + "name": "[format('{0}/{1}', format('{0}{1}', replace(parameters('virtualMachineNamePrefix'), format('{0}{1}', parameters('serviceName'), parameters('networkName')), ''), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')), 'JsonADDomainExtension')]", "location": "[parameters('location')]", "tags": "[parameters('tagsVirtualMachines')]", "properties": { @@ -10835,7 +10938,7 @@ }, "dependsOn": [ "[extensionResourceId(format('/subscriptions/{0}/resourceGroups/{1}', subscription().subscriptionId, parameters('resourceGroupManagement')), 'Microsoft.Resources/deployments', format('CSE_DrainMode_{0}_{1}', parameters('batchCount'), parameters('timestamp')))]", - "[resourceId('Microsoft.Compute/virtualMachines', format('{0}{1}', parameters('virtualMachineNamePrefix'), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')))]" + "[resourceId('Microsoft.Compute/virtualMachines', format('{0}{1}', replace(parameters('virtualMachineNamePrefix'), format('{0}{1}', parameters('serviceName'), parameters('networkName')), ''), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')))]" ] }, { @@ -10846,7 +10949,7 @@ "condition": "[not(contains(parameters('activeDirectorySolution'), 'DomainServices'))]", "type": "Microsoft.Compute/virtualMachines/extensions", "apiVersion": "2021-03-01", - "name": "[format('{0}/{1}', format('{0}{1}', parameters('virtualMachineNamePrefix'), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')), 'AADLoginForWindows')]", + "name": "[format('{0}/{1}', format('{0}{1}', replace(parameters('virtualMachineNamePrefix'), format('{0}{1}', parameters('serviceName'), parameters('networkName')), ''), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')), 'AADLoginForWindows')]", "location": "[parameters('location')]", "tags": "[parameters('tagsVirtualMachines')]", "properties": { @@ -10858,7 +10961,7 @@ }, "dependsOn": [ "[extensionResourceId(format('/subscriptions/{0}/resourceGroups/{1}', subscription().subscriptionId, parameters('resourceGroupManagement')), 'Microsoft.Resources/deployments', format('CSE_DrainMode_{0}_{1}', parameters('batchCount'), parameters('timestamp')))]", - "[resourceId('Microsoft.Compute/virtualMachines', format('{0}{1}', parameters('virtualMachineNamePrefix'), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')))]" + "[resourceId('Microsoft.Compute/virtualMachines', format('{0}{1}', replace(parameters('virtualMachineNamePrefix'), format('{0}{1}', parameters('serviceName'), parameters('networkName')), ''), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')))]" ] }, { @@ -10869,7 +10972,7 @@ "condition": "[variables('amdVmSize')]", "type": "Microsoft.Compute/virtualMachines/extensions", "apiVersion": "2021-03-01", - "name": "[format('{0}/{1}', format('{0}{1}', parameters('virtualMachineNamePrefix'), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')), 'AmdGpuDriverWindows')]", + "name": "[format('{0}/{1}', format('{0}{1}', replace(parameters('virtualMachineNamePrefix'), format('{0}{1}', parameters('serviceName'), parameters('networkName')), ''), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')), 'AmdGpuDriverWindows')]", "location": "[parameters('location')]", "tags": "[parameters('tagsVirtualMachines')]", "properties": { @@ -10882,7 +10985,7 @@ "dependsOn": [ "extension_AADLoginForWindows", "extension_JsonADDomainExtension", - "[resourceId('Microsoft.Compute/virtualMachines', format('{0}{1}', parameters('virtualMachineNamePrefix'), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')))]" + "[resourceId('Microsoft.Compute/virtualMachines', format('{0}{1}', replace(parameters('virtualMachineNamePrefix'), format('{0}{1}', parameters('serviceName'), parameters('networkName')), ''), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')))]" ] }, { @@ -10893,7 +10996,7 @@ "condition": "[variables('nvidiaVmSize')]", "type": "Microsoft.Compute/virtualMachines/extensions", "apiVersion": "2021-03-01", - "name": "[format('{0}/{1}', format('{0}{1}', parameters('virtualMachineNamePrefix'), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')), 'NvidiaGpuDriverWindows')]", + "name": "[format('{0}/{1}', format('{0}{1}', replace(parameters('virtualMachineNamePrefix'), format('{0}{1}', parameters('serviceName'), parameters('networkName')), ''), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')), 'NvidiaGpuDriverWindows')]", "location": "[parameters('location')]", "tags": "[parameters('tagsVirtualMachines')]", "properties": { @@ -10906,7 +11009,7 @@ "dependsOn": [ "extension_AADLoginForWindows", "extension_JsonADDomainExtension", - "[resourceId('Microsoft.Compute/virtualMachines', format('{0}{1}', parameters('virtualMachineNamePrefix'), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')))]" + "[resourceId('Microsoft.Compute/virtualMachines', format('{0}{1}', replace(parameters('virtualMachineNamePrefix'), format('{0}{1}', parameters('serviceName'), parameters('networkName')), ''), padLeft(add(range(0, parameters('sessionHostCount'))[range(0, parameters('sessionHostCount'))[copyIndex()]], parameters('sessionHostIndex')), 4, '0')))]" ] }, { diff --git a/src/bicep/mlz.bicep b/src/bicep/mlz.bicep index a03b66201..8f90ab90b 100644 --- a/src/bicep/mlz.bicep +++ b/src/bicep/mlz.bicep @@ -562,7 +562,7 @@ var resourceGroupNamingConvention = replace(namingConvention, resourceToken, 'rg var routeTableNamingConvention = replace(namingConvention, resourceToken, 'rt') var storageAccountNamingConvention = toLower('${replace(replace(namingConvention, resourceToken, 'st'), '-', '')}unique_token') var subnetNamingConvention = replace(namingConvention, resourceToken, 'snet') -var userAssignedIdentityNamingConvention = replace(namingConvention, resourceToken, 'uaid') +var userAssignedIdentityNamingConvention = replace(namingConvention, resourceToken, 'id') var virtualMachineNamingConvention = replace(namingConvention, resourceToken, 'vm') var virtualNetworkNamingConvention = replace(namingConvention, resourceToken, 'vnet') @@ -577,8 +577,8 @@ var hubKeyVaultPrivateEndpointName = replace(replace(privateEndpointNamingConven var hubKeyVaultShortName = replace(replace(keyVaultNamingConvention, serviceToken, ''), networkToken, hubShortName) var hubKeyVaultUniqueName = replace(hubKeyVaultShortName, 'unique_token', uniqueString(resourcePrefix, environmentAbbreviation, hubSubscriptionId)) var hubLogStorageAccountName = take(hubLogStorageAccountUniqueName, 24) -var hubLogStorageAccountNetworkInterfaceName = replace(replace(networkInterfaceNamingConvention, serviceToken, '${serviceToken}-st'), networkToken, hubName) -var hubLogStorageAccountPrivateEndpointName = replace(replace(privateEndpointNamingConvention, serviceToken, '${serviceToken}-st'), networkToken, hubName) +var hubLogStorageAccountNetworkInterfaceNamePrefix = replace(replace(networkInterfaceNamingConvention, serviceToken, '${serviceToken}-st'), networkToken, hubName) +var hubLogStorageAccountPrivateEndpointNamePrefix = replace(replace(privateEndpointNamingConvention, serviceToken, '${serviceToken}-st'), networkToken, hubName) var hubLogStorageAccountShortName = replace(replace(storageAccountNamingConvention, serviceToken, ''), networkToken, hubShortName) var hubLogStorageAccountUniqueName = replace(hubLogStorageAccountShortName, 'unique_token', uniqueString(resourcePrefix, environmentAbbreviation, hubSubscriptionId)) var hubNetworkWatcherName = replace(replace(networkWatcherNamingConvention, '-${serviceToken}', ''), networkToken, hubName) @@ -1039,8 +1039,8 @@ module hubStorage './core/hub-storage.bicep' = { keyVaultUri: customerManagedKeys.outputs.keyVaultUri location: location logStorageAccountName: hubLogStorageAccountName - logStorageAccountNetworkInterfaceNamePrefix: hubLogStorageAccountNetworkInterfaceName - logStorageAccountPrivateEndpointNamePrefix: hubLogStorageAccountPrivateEndpointName + logStorageAccountNetworkInterfaceNamePrefix: hubLogStorageAccountNetworkInterfaceNamePrefix + logStorageAccountPrivateEndpointNamePrefix: hubLogStorageAccountPrivateEndpointNamePrefix logStorageSkuName: logStorageSkuName serviceToken: serviceToken storageEncryptionKeyName: customerManagedKeys.outputs.storageKeyName @@ -1064,8 +1064,8 @@ module spokeStorage './core/spoke-storage.bicep' = [for (spoke, i) in spokes: { keyVaultUri: customerManagedKeys.outputs.keyVaultUri location: location logStorageAccountName: spoke.logStorageAccountName - logStorageAccountNetworkInterfaceNamePrefix: spoke.logStorageAccountNetworkInterfaceName - logStorageAccountPrivateEndpointNamePrefix: spoke.logStorageAccountPrivateEndpointName + logStorageAccountNetworkInterfaceNamePrefix: spoke.logStorageAccountNetworkInterfaceNamePrefix + logStorageAccountPrivateEndpointNamePrefix: spoke.logStorageAccountPrivateEndpointNamePrefix logStorageSkuName: logStorageSkuName serviceToken: serviceToken storageEncryptionKeyName: customerManagedKeys.outputs.storageKeyName diff --git a/src/bicep/mlz.json b/src/bicep/mlz.json index a19cceeac..92828e024 100644 --- a/src/bicep/mlz.json +++ b/src/bicep/mlz.json @@ -5,7 +5,7 @@ "_generator": { "name": "bicep", "version": "0.25.3.34343", - "templateHash": "3170235898096527362" + "templateHash": "6655483553945362084" } }, "parameters": { @@ -1254,7 +1254,7 @@ "routeTableNamingConvention": "[replace(variables('namingConvention'), variables('resourceToken'), 'rt')]", "storageAccountNamingConvention": "[toLower(format('{0}unique_token', replace(replace(variables('namingConvention'), variables('resourceToken'), 'st'), '-', '')))]", "subnetNamingConvention": "[replace(variables('namingConvention'), variables('resourceToken'), 'snet')]", - "userAssignedIdentityNamingConvention": "[replace(variables('namingConvention'), variables('resourceToken'), 'uaid')]", + "userAssignedIdentityNamingConvention": "[replace(variables('namingConvention'), variables('resourceToken'), 'id')]", "virtualMachineNamingConvention": "[replace(variables('namingConvention'), variables('resourceToken'), 'vm')]", "virtualNetworkNamingConvention": "[replace(variables('namingConvention'), variables('resourceToken'), 'vnet')]", "hubName": "hub", @@ -1266,8 +1266,8 @@ "hubKeyVaultShortName": "[replace(replace(variables('keyVaultNamingConvention'), variables('serviceToken'), ''), variables('networkToken'), variables('hubShortName'))]", "hubKeyVaultUniqueName": "[replace(variables('hubKeyVaultShortName'), 'unique_token', uniqueString(parameters('resourcePrefix'), parameters('environmentAbbreviation'), parameters('hubSubscriptionId')))]", "hubLogStorageAccountName": "[take(variables('hubLogStorageAccountUniqueName'), 24)]", - "hubLogStorageAccountNetworkInterfaceName": "[replace(replace(variables('networkInterfaceNamingConvention'), variables('serviceToken'), format('{0}-st', variables('serviceToken'))), variables('networkToken'), variables('hubName'))]", - "hubLogStorageAccountPrivateEndpointName": "[replace(replace(variables('privateEndpointNamingConvention'), variables('serviceToken'), format('{0}-st', variables('serviceToken'))), variables('networkToken'), variables('hubName'))]", + "hubLogStorageAccountNetworkInterfaceNamePrefix": "[replace(replace(variables('networkInterfaceNamingConvention'), variables('serviceToken'), format('{0}-st', variables('serviceToken'))), variables('networkToken'), variables('hubName'))]", + "hubLogStorageAccountPrivateEndpointNamePrefix": "[replace(replace(variables('privateEndpointNamingConvention'), variables('serviceToken'), format('{0}-st', variables('serviceToken'))), variables('networkToken'), variables('hubName'))]", "hubLogStorageAccountShortName": "[replace(replace(variables('storageAccountNamingConvention'), variables('serviceToken'), ''), variables('networkToken'), variables('hubShortName'))]", "hubLogStorageAccountUniqueName": "[replace(variables('hubLogStorageAccountShortName'), 'unique_token', uniqueString(parameters('resourcePrefix'), parameters('environmentAbbreviation'), parameters('hubSubscriptionId')))]", "hubNetworkWatcherName": "[replace(replace(variables('networkWatcherNamingConvention'), format('-{0}', variables('serviceToken')), ''), variables('networkToken'), variables('hubName'))]", @@ -6395,10 +6395,10 @@ "value": "[variables('hubLogStorageAccountName')]" }, "logStorageAccountNetworkInterfaceNamePrefix": { - "value": "[variables('hubLogStorageAccountNetworkInterfaceName')]" + "value": "[variables('hubLogStorageAccountNetworkInterfaceNamePrefix')]" }, "logStorageAccountPrivateEndpointNamePrefix": { - "value": "[variables('hubLogStorageAccountPrivateEndpointName')]" + "value": "[variables('hubLogStorageAccountPrivateEndpointNamePrefix')]" }, "logStorageSkuName": { "value": "[parameters('logStorageSkuName')]" @@ -6754,10 +6754,10 @@ "value": "[variables('spokes')[copyIndex()].logStorageAccountName]" }, "logStorageAccountNetworkInterfaceNamePrefix": { - "value": "[variables('spokes')[copyIndex()].logStorageAccountNetworkInterfaceName]" + "value": "[variables('spokes')[copyIndex()].logStorageAccountNetworkInterfaceNamePrefix]" }, "logStorageAccountPrivateEndpointNamePrefix": { - "value": "[variables('spokes')[copyIndex()].logStorageAccountPrivateEndpointName]" + "value": "[variables('spokes')[copyIndex()].logStorageAccountPrivateEndpointNamePrefix]" }, "logStorageSkuName": { "value": "[parameters('logStorageSkuName')]"