|
| 1 | +/* |
| 2 | + Root Bicep file for deploying Hub subscription bootstrap resources needed for Terraform to continue: |
| 3 | + - Private VNet |
| 4 | + - Managed DevOps Pool (for VNet-integrated ADO build agents) |
| 5 | + - Managed Identity for Terraform |
| 6 | + - Blob Storage Account with Container, Private Endpoint, and public access disabled |
| 7 | + - Private DNS for Storage Account Private Endpoint |
| 8 | +
|
| 9 | + Subscription pre-requisites: |
| 10 | + - az provider register --namespace 'Microsoft.DevOpsInfrastructure' |
| 11 | + - az provider register --namespace 'Microsoft.DevCenter' |
| 12 | +
|
| 13 | + Run once, deployment of the Managed DevOps Pool will fail. |
| 14 | + Manually Grant 'Reader' and 'Network Contributor' RBAC roles to the Service Principal 'DevopsInfrastructure' on the VNet resource. |
| 15 | + Re-run, it will succeed. This cannot be automated in Bicep, the object ID (which needs to be resolved from the appId) will be considered invalid, even though it's fine using az cli. |
| 16 | +*/ |
| 17 | + |
| 18 | +targetScope = 'subscription' |
| 19 | + |
| 20 | +param devopsSubnetAddressPrefix string |
| 21 | +// param enableSoftDelete bool |
| 22 | +param hubType string // live / nonlive |
| 23 | +param region string = 'uksouth' |
| 24 | +param regionShortName string = 'uks' |
| 25 | +param vnetAddressPrefixes array |
| 26 | + |
| 27 | +// var keyVaultName = 'kv-lungcs-${envConfig}-inf' |
| 28 | + |
| 29 | +var devopsSubnetName = 'sn-hub-${hubType}-${regionShortName}-devops' |
| 30 | +var devCenterName = 'devc-hub-${hubType}-${regionShortName}' |
| 31 | +var devCenterProjectName = 'prj-hub-${hubType}-${regionShortName}' |
| 32 | +var poolName = 'private-pool-hub-${hubType}-${regionShortName}' |
| 33 | +var resourceGroupName = 'rg-hub-${hubType}-${regionShortName}-bootstrap' |
| 34 | +var virtualNetworkName = 'vnet-hub-${hubType}-${regionShortName}' |
| 35 | + |
| 36 | +// var miADOtoAZname = 'mi-${appShortName}-${envConfig}-adotoaz-uks' |
| 37 | +// var miGHtoADOname = 'mi-${appShortName}-${envConfig}-ghtoado-uks' |
| 38 | + |
| 39 | +resource bootstrapRG 'Microsoft.Resources/resourceGroups@2025-04-01' = { |
| 40 | + name: resourceGroupName |
| 41 | + location: region |
| 42 | +} |
| 43 | + |
| 44 | +@description('Virtual Network Deployment') |
| 45 | +module virtualNetwork 'modules/virtualNetwork.bicep' = { |
| 46 | + scope: bootstrapRG |
| 47 | + params: { |
| 48 | + name: virtualNetworkName |
| 49 | + addressPrefixes: vnetAddressPrefixes |
| 50 | + } |
| 51 | +} |
| 52 | + |
| 53 | +@description('Managed DevOps Pool Deployment') |
| 54 | +module managedDevopsPool 'modules/managedDevopsPool.bicep' = { |
| 55 | + scope: bootstrapRG |
| 56 | + params: { |
| 57 | + adoOrg: 'nhse-pps-1' |
| 58 | + agentProfileMaxAgentLifetime: '00.04:00:00' |
| 59 | + devCenterName: devCenterName |
| 60 | + devCenterProjectName: devCenterProjectName |
| 61 | + devopsSubnetName: devopsSubnetName |
| 62 | + devopsSubnetAddressPrefix: devopsSubnetAddressPrefix |
| 63 | + poolName: poolName |
| 64 | + virtualNetworkName: virtualNetwork.outputs.name |
| 65 | + } |
| 66 | +} |
0 commit comments