Managed DevOps Pool
Creates a Managed DevOps Pool that provides elastic Azure DevOps agents. Networking is either VNet injection into a delegated subnet or a Microsoft-managed isolated network with static outbound IP addresses; the two are mutually exclusive. VNet injection has prerequisites the module cannot create for you: the subnet must be empty and delegated to Microsoft.DevOpsInfrastructure/pools, it is exclusive to a single pool, the pool and the virtual network must be in the same region, and the DevOpsInfrastructure service principal must hold Reader and Network Contributor on the virtual network. Also note that Managed DevOps Pools enforces its own per-VM-family core quota, separate from and usually much smaller than the Compute quota, so size the pool against that number. Supports stateful and stateless agent profiles, user-assigned identities, Key Vault observed certificates and role assignments on the pool.
Summary
Managed DevOps Pool with VNet injection support for Azure DevOps agents.
| Property |
Value |
| Owner |
platform-team |
| Support |
Support |
| Version |
1.0.2 |
Resource Types
| Resource Type |
Microsoft.Authorization/roleAssignments |
Microsoft.DevOpsInfrastructure/pools |
Usage
module pool 'br:geitbicepmodweucr01.azurecr.io/bicep/modules/dev-ops-infrastructure/pool:1.0.2' = {
name: 'pool'
params: {
// Required parameters
par_pool_name: <string>
par_dev_center_project_id: <string>
par_maximum_concurrency: <int>
par_fabric_profile_sku_name: <string>
par_images: <array>
par_agent_profile: <agentProfileType>
par_organization_profile: <organizationProfileType>
par_static_ip_address_count: <int>
}
}
Parameters
| Name |
Type |
Description |
Default |
par_agent_profile |
agentProfileType |
How agent machines are handled between jobs, and how standby capacity is provisioned. |
required |
par_dev_center_project_id |
string |
Resource ID of the Dev Center project the pool belongs to. |
required |
par_fabric_profile_sku_name |
string |
Azure VM size for agent machines, for example Standard_D4ads_v5. Read the remaining Managed DevOps Pools quota for the VM family before choosing a size: GET /subscriptions//providers/Microsoft.DevOpsInfrastructure/locations//usages?api-version=2024-04-04-preview. Get-AzVMUsage reports the Compute quota, which is a different and typically much larger number. |
required |
par_images |
array |
Images available to the pool. Each entry supplies either a wellKnownImageName such as ubuntu-22.04/latest, or the resourceId of a custom image. |
required |
par_location |
string |
Azure region for the pool. Must be the same region as the virtual network when VNet injection is used, otherwise pool creation fails. Defaults to the resource group location. |
[resourceGroup().location] |
par_managed_identities |
managedIdentitiesType |
User-assigned identities to attach to the pool. There is no system-assigned option because the resource provider rejects one at create time; this differs from the dev-center/devcenter and dev-center/project modules, which do accept SystemAssigned. Attach an identity when agents need to reach Key Vault or a container registry. The DevOpsInfrastructure service principal must hold Managed Identity Operator (f1a07417-d97a-45cb-824c-7a7467783830) on any identity listed here, otherwise the pool API does not return its IP addresses. Defaults to none. |
@{user_assigned_resource_ids=System.Object[]} |
par_maximum_concurrency |
int |
Maximum number of agent machines that may exist at any moment. Multiplied by the core count of par_fabric_profile_sku_name, this must fit the Managed DevOps Pools core quota for that VM family in the target region. That quota is separate from the Compute quota and is usually far smaller, so a value the Compute quota would allow can still be rejected with InsufficientCoreQuota. |
required |
par_organization_profile |
organizationProfileType |
Azure DevOps organizations and projects the pool serves. There is deliberately no default: the pool must never point at an organization by accident. |
required |
par_os_profile |
osProfileType |
Operating system profile for agent machines. Defaults to a service logon with no observed certificates. |
@{logonType=Service} |
par_pool_name |
string |
Name of the Managed DevOps Pool. Must start with a letter or digit and contain only letters, digits, hyphens and dots. |
required |
par_role_assignments |
array |
Optional. Role assignments applied to the pool. Defaults to none. |
`` |
par_static_ip_address_count |
int |
Optional. Number of Microsoft-managed static outbound IP addresses for a pool on the isolated network. Only used when par_subnet_id is empty. Leave unset to use default outbound access, which Azure is retiring. |
required |
par_storage_profile |
storageProfileType |
Storage profile for agent machines. Defaults to a Premium OS disk with no data disks. |
@{osDiskStorageAccountType=Premium} |
par_subnet_id |
string |
Optional. Resource ID of the delegated subnet agents are injected into. The subnet must be delegated to Microsoft.DevOpsInfrastructure/pools, must be empty, and is exclusive to this pool. Mutually exclusive with par_static_ip_address_count; when both are supplied, this wins. Defaults to empty, meaning no VNet injection. |
`` |
par_tags |
object |
Resource tags applied to the pool. |
`` |
Outputs
| Name |
Type |
Description |
out_pool_id |
string |
Resource ID of the deployed Managed DevOps Pool. |
out_pool_name |
string |
Name of the deployed Managed DevOps Pool. |
Versions
Pin an exact version. Ranges are not supported.
| Version |
Reference |
1.0.2 (latest) |
br/Euvic-Modules:dev-ops-infrastructure/pool:1.0.2 |
1.0.1 |
br/Euvic-Modules:dev-ops-infrastructure/pool:1.0.1 |