diff --git a/Infrastructure/main.bicep b/Infrastructure/main.bicep index d35d428..4f544f9 100644 --- a/Infrastructure/main.bicep +++ b/Infrastructure/main.bicep @@ -4,8 +4,8 @@ param websitePassword string @secure() param sessionSecret string -@description('Custom name for the App Service. If not provided, defaults to wa-{solutionId}') -param appServiceName string = '' +@description('Resource naming template with {resourcetype} placeholder. Example: "d365ce-dev-erp-{resourcetype}" creates "d365ce-dev-erp-wa" for web app and "d365ce-dev-erp-asp" for app service plan. If not provided, defaults to "{resourcetype}-{solutionId}".') +param resourceNameTemplate string = '' param adoOrganizationUrl string = '' param adoProjectName string = '' @@ -31,11 +31,12 @@ param entraIdAllowedGroups string = '' param disablePasswordAuth bool = false var location = resourceGroup().location -var resolvedAppServiceName = empty(appServiceName) ? 'wa-${solutionId}' : appServiceName +var resolvedAppServicePlanName = empty(resourceNameTemplate) ? 'asp-${solutionId}' : replace(resourceNameTemplate, '{resourcetype}', 'asp') +var resolvedWebAppName = empty(resourceNameTemplate) ? 'wa-${solutionId}' : replace(resourceNameTemplate, '{resourcetype}', 'wa') @description('Create an App Service Plan') resource appServicePlan 'Microsoft.Web/serverfarms@2021-02-01' = { - name: 'asp-${solutionId}' + name: resolvedAppServicePlanName location: location sku: { name: 'F1' @@ -48,7 +49,7 @@ resource appServicePlan 'Microsoft.Web/serverfarms@2021-02-01' = { @description('Create a Web App') resource webApp 'Microsoft.Web/sites@2021-02-01' = { - name: resolvedAppServiceName + name: resolvedWebAppName location: location identity: { type: 'SystemAssigned' @@ -74,7 +75,7 @@ resource webApp 'Microsoft.Web/sites@2021-02-01' = { } { name: 'NEXTAUTH_URL' - value: 'https://${resolvedAppServiceName}.azurewebsites.net' + value: 'https://${resolvedWebAppName}.azurewebsites.net' } { name: 'WEBSITE_NODE_DEFAULT_VERSION' diff --git a/Setup/azure-pipelines-deploy-jobs.yml b/Setup/azure-pipelines-deploy-jobs.yml index 6781e8d..2b976c5 100644 --- a/Setup/azure-pipelines-deploy-jobs.yml +++ b/Setup/azure-pipelines-deploy-jobs.yml @@ -23,7 +23,7 @@ parameters: - name: websiteName type: string default: '' - - name: appServiceName + - name: resourceNameTemplate type: string default: '' - name: adoOrganizationUrl @@ -64,7 +64,17 @@ steps: inlineScript: | # Create resource group az group create --name ${{ parameters.azureResourceGroupName }} --location ${{ parameters.azureLocation }} - + + # Debug: Show resource naming configuration + $resourceNameTemplate = "${{ parameters.resourceNameTemplate }}" + if ($resourceNameTemplate) { + Write-Host "Using resource name template: $resourceNameTemplate" + Write-Host " App Service Plan: $($resourceNameTemplate -replace '\{resourcetype\}', 'asp')" + Write-Host " Web App: $($resourceNameTemplate -replace '\{resourcetype\}', 'wa')" + } else { + Write-Host "Using default naming: asp-${{ parameters.websiteName }}, wa-${{ parameters.websiteName }}" + } + # Deploy bicep template $jsonResult = az deployment group create ` --resource-group ${{ parameters.azureResourceGroupName }} ` @@ -72,7 +82,7 @@ steps: --parameters websitePassword="${{ parameters.websitePassword }}" ` --parameters sessionSecret="${{ parameters.websiteSessionSecret }}" ` --parameters solutionId="${{ parameters.websiteName }}" ` - --parameters appServiceName="${{ parameters.appServiceName }}" ` + --parameters resourceNameTemplate="${{ parameters.resourceNameTemplate }}" ` --parameters adoOrganizationUrl="${{ parameters.adoOrganizationUrl }}" ` --parameters adoProjectName="${{ parameters.adoProjectName }}" ` --parameters adoRepositoryName="${{ parameters.adoRepositoryName }}" ` diff --git a/Setup/azure-pipelines-external.yml b/Setup/azure-pipelines-external.yml index 04b63bc..a585bf8 100644 --- a/Setup/azure-pipelines-external.yml +++ b/Setup/azure-pipelines-external.yml @@ -30,7 +30,7 @@ # - EntraIdAllowedGroups (comma-separated list of Entra ID group object IDs) # # Optional variables (for custom naming): -# - AppServiceName (custom App Service name, defaults to wa-{WebsiteName} if not provided) +# - AzureServiceNameTemplate (naming template with {resourcetype} placeholder, e.g., "d365ce-dev-erp-{resourcetype}") trigger: none pr: none @@ -100,7 +100,7 @@ stages: websitePassword: $(WebsitePassword) websiteSessionSecret: $(WebsiteSessionSecret) websiteName: $(WebsiteName) - appServiceName: ${{ coalesce(variables.AppServiceName, '') }} + resourceNameTemplate: '$(AzureServiceNameTemplate)' adoOrganizationUrl: $(System.CollectionUri) adoProjectName: $(System.TeamProject) adoRepositoryName: ${{ coalesce(variables.AdoRepositoryName, '') }}