Skip to content

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.

Module Information

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