diff --git a/deploy/deploy.ps1 b/deploy/deploy.ps1 index 56524a0..e5f1fba 100644 --- a/deploy/deploy.ps1 +++ b/deploy/deploy.ps1 @@ -256,6 +256,16 @@ process { return $validLocations.Contains($Location) } + # Create unique string to be used in naming for each deployment instance + Function New-UniqueIPAMDeployString { + $unique = (-join ((48..57) + (97..122) | Get-Random -Count 13 | % {[char]$_})) + + $script:UIAppName = $UIAppName + "-" + $unique + $script:EngineAppName = $EngineAppName + "-" + $unique + + return $unique + } + Function Deploy-IPAMApplications { Param( [Parameter(Mandatory=$false)] @@ -648,6 +658,8 @@ process { [string]$EngineAppId, [Parameter(Mandatory=$true)] [string]$EngineSecret, + [Parameter(Mandatory=$true)] + [string]$UniqueSuffix, [Parameter(Mandatory=$false)] [string]$NamePrefix, [Parameter(Mandatory=$false)] @@ -672,6 +684,10 @@ process { uiAppId = $UiAppId } + if($UniqueSuffix) { + $deploymentParameters.Add('uniqueSuffix', $UniqueSuffix) + } + if($NamePrefix) { $deploymentParameters.Add('namePrefix', $NamePrefix) } @@ -802,8 +818,11 @@ process { exit } } + if ($PSCmdlet.ParameterSetName -in ('Full', 'AppsOnly', 'Function', 'FuncAppsOnly')) { + $unique = New-UniqueIPAMDeployString + $appDetails = Deploy-IPAMApplications ` -UIAppName $UIAppName ` -EngineAppName $EngineAppName ` @@ -834,6 +853,7 @@ process { if ($PSCmdlet.ParameterSetName -in ('Full', 'TemplateOnly', 'Function', 'FuncTemplateOnly')) { $deployment = Deploy-Bicep @appDetails ` + -UniqueSuffix $unique ` -NamePrefix $NamePrefix ` -AzureCloud $azureCloud ` -PrivateAcr $PrivateAcr ` diff --git a/deploy/main.bicep b/deploy/main.bicep index 619a97e..9ed8e92 100644 --- a/deploy/main.bicep +++ b/deploy/main.bicep @@ -1,8 +1,8 @@ // Global parameters targetScope = 'subscription' -@description('GUID for Resource Naming') -param guid string = newGuid() +@description('Unique String for Resource Naming') +param uniqueSuffix string @description('Deployment Location') param location string = deployment().location @@ -35,18 +35,18 @@ param tags object = {} @description('IPAM Resource Names') param resourceNames object = { - functionName: '${namePrefix}-${uniqueString(guid)}' - appServiceName: '${namePrefix}-${uniqueString(guid)}' - appServicePlanName: '${namePrefix}-asp-${uniqueString(guid)}' - cosmosAccountName: '${namePrefix}-dbacct-${uniqueString(guid)}' + functionName: '${namePrefix}-${uniqueSuffix}' + appServiceName: '${namePrefix}-${uniqueSuffix}' + appServicePlanName: '${namePrefix}-asp-${uniqueSuffix}' + cosmosAccountName: '${namePrefix}-dbacct-${uniqueSuffix}' cosmosContainerName: '${namePrefix}-ctr' cosmosDatabaseName: '${namePrefix}-db' - keyVaultName: '${namePrefix}-kv-${uniqueString(guid)}' - workspaceName: '${namePrefix}-law-${uniqueString(guid)}' - managedIdentityName: '${namePrefix}-mi-${uniqueString(guid)}' - resourceGroupName: '${namePrefix}-rg-${uniqueString(guid)}' - storageAccountName: '${namePrefix}stg${uniqueString(guid)}' - containerRegistryName: '${namePrefix}acr${uniqueString(guid)}' + keyVaultName: '${namePrefix}-kv-${uniqueSuffix}' + workspaceName: '${namePrefix}-law-${uniqueSuffix}' + managedIdentityName: '${namePrefix}-mi-${uniqueSuffix}' + resourceGroupName: '${namePrefix}-rg-${uniqueSuffix}' + storageAccountName: '${namePrefix}stg${uniqueSuffix}' + containerRegistryName: '${namePrefix}acr${uniqueSuffix}' } // Resource Group