Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Bicep resource definition
The pools resource type can be deployed with operations that target:
For a list of changed properties in each API version, see change log.
Resource format
To create a Microsoft.DevOpsInfrastructure/pools resource, add the following Bicep to your template.
resource symbolicname 'Microsoft.DevOpsInfrastructure/pools@2025-09-20' = {
scope: resourceSymbolicName or scope
identity: {
type: 'string'
userAssignedIdentities: {
{customized property}: {}
}
}
location: 'string'
name: 'string'
properties: {
agentProfile: {
resourcePredictions: any(...)
resourcePredictionsProfile: {
kind: 'string'
// For remaining properties, see ResourcePredictionsProfile objects
}
kind: 'string'
// For remaining properties, see AgentProfile objects
}
devCenterProjectResourceId: 'string'
fabricProfile: {
kind: 'string'
// For remaining properties, see FabricProfile objects
}
maximumConcurrency: int
organizationProfile: {
kind: 'string'
// For remaining properties, see OrganizationProfile objects
}
provisioningState: 'string'
runtimeConfiguration: {
workFolder: 'string'
}
}
tags: {
{customized property}: 'string'
}
}
OrganizationProfile objects
Set the kind property to specify the type of object.
For AzureDevOps, use:
{
alias: 'string'
kind: 'AzureDevOps'
organizations: [
{
alias: 'string'
openAccess: bool
parallelism: int
projects: [
'string'
]
url: 'string'
}
]
permissionProfile: {
groups: [
'string'
]
kind: 'string'
users: [
'string'
]
}
}
For GitHub, use:
{
kind: 'GitHub'
organizations: [
{
repositories: [
'string'
]
url: 'string'
}
]
}
AgentProfile objects
Set the kind property to specify the type of object.
For Stateful, use:
{
gracePeriodTimeSpan: 'string'
kind: 'Stateful'
maxAgentLifetime: 'string'
}
For Stateless, use:
{
kind: 'Stateless'
}
ResourcePredictionsProfile objects
Set the kind property to specify the type of object.
For Automatic, use:
{
kind: 'Automatic'
predictionPreference: 'string'
}
For Manual, use:
{
kind: 'Manual'
}
FabricProfile objects
Set the kind property to specify the type of object.
For Vmss, use:
{
images: [
{
aliases: [
'string'
]
buffer: 'string'
ephemeralType: 'string'
resourceId: 'string'
wellKnownImageName: 'string'
}
]
kind: 'Vmss'
networkProfile: {
staticIpAddressCount: int
subnetId: 'string'
}
osProfile: {
logonType: 'string'
secretsManagementSettings: {
certificateStoreLocation: 'string'
certificateStoreName: 'string'
keyExportable: bool
observedCertificates: [
'string'
]
}
}
sku: {
name: 'string'
}
storageProfile: {
dataDisks: [
{
caching: 'string'
diskSizeGiB: int
driveLetter: 'string'
storageAccountType: 'string'
}
]
osDiskStorageAccountType: 'string'
}
}
Property Values
Microsoft.DevOpsInfrastructure/pools
| Name | Description | Value |
|---|---|---|
| identity | The managed service identities assigned to this resource. | ManagedServiceIdentity |
| location | The geo-location where the resource lives | string (required) |
| name | The resource name | string Constraints: Pattern = ^[a-zA-Z0-9][a-zA-Z0-9-.]*$ (required) |
| properties | The resource-specific properties for this resource. | PoolProperties |
| scope | Use when creating a resource at a scope that is different than the deployment scope. | Set this property to the symbolic name of a resource to apply the extension resource. |
| tags | Resource tags | Dictionary of tag names and values. See Tags in templates |
AgentProfile
| Name | Description | Value |
|---|---|---|
| kind | Set to 'Stateful' for type Stateful. Set to 'Stateless' for type StatelessAgentProfile. | 'Stateful' 'Stateless' (required) |
| resourcePredictions | Defines pool buffer/stand-by agents. | any |
| resourcePredictionsProfile | Defines how the pool buffer/stand-by agents is provided. | ResourcePredictionsProfile |
AutomaticResourcePredictionsProfile
| Name | Description | Value |
|---|---|---|
| kind | Determines how the stand-by scheme should be provided. | 'Automatic' (required) |
| predictionPreference | Determines the balance between cost and performance. | 'Balanced' 'BestPerformance' 'MoreCostEffective' 'MorePerformance' 'MostCostEffective' |
AzureDevOpsOrganizationProfile
| Name | Description | Value |
|---|---|---|
| alias | An alias to reference the Azure DevOps pool name. | string |
| kind | Discriminator property for OrganizationProfile. | 'AzureDevOps' (required) |
| organizations | The list of Azure DevOps organizations the pool should be present in. | Organization[] (required) |
| permissionProfile | The type of permission which determines which accounts are admins on the Azure DevOps pool. | AzureDevOpsPermissionProfile |
AzureDevOpsPermissionProfile
| Name | Description | Value |
|---|---|---|
| groups | Group email addresses | string[] |
| kind | Determines who has admin permissions to the Azure DevOps pool. | 'CreatorOnly' 'Inherit' 'SpecificAccounts' (required) |
| users | User email addresses | string[] |
DataDisk
| Name | Description | Value |
|---|---|---|
| caching | The type of caching to be enabled for the data disks. The default value for caching is readwrite. For information about the caching options see: https://blogs.msdn.microsoft.com/windowsazurestorage/2012/06/27/exploring-windows-azure-drives-disks-and-images/. | 'None' 'ReadOnly' 'ReadWrite' |
| diskSizeGiB | The initial disk size in gigabytes. | int |
| driveLetter | The drive letter for the empty data disk. If not specified, it will be the first available letter. | string |
| storageAccountType | The storage Account type to be used for the data disk. If omitted, the default is "standard_lrs". | 'Premium_LRS' 'Premium_ZRS' 'StandardSSD_LRS' 'StandardSSD_ZRS' 'Standard_LRS' |
DevOpsAzureSku
| Name | Description | Value |
|---|---|---|
| name | The Azure SKU name of the machines in the pool. | string (required) |
FabricProfile
| Name | Description | Value |
|---|---|---|
| kind | Set to 'Vmss' for type VmssFabricProfile. | 'Vmss' (required) |
GitHubOrganization
| Name | Description | Value |
|---|---|---|
| repositories | Optional list of repositories in which the pool should be created. | string[] |
| url | The GitHub organization URL in which the pool should be created. | string (required) |
GitHubOrganizationProfile
| Name | Description | Value |
|---|---|---|
| kind | Discriminator property for OrganizationProfile. | 'GitHub' (required) |
| organizations | The list of GitHub organizations/repositories the pool should be present in. | GitHubOrganization[] (required) |
ManagedServiceIdentity
| Name | Description | Value |
|---|---|---|
| type | Type of managed service identity (where both SystemAssigned and UserAssigned types are allowed). | 'None' 'SystemAssigned' 'SystemAssigned,UserAssigned' 'UserAssigned' (required) |
| userAssignedIdentities | The set of user assigned identities associated with the resource. The userAssignedIdentities dictionary keys will be ARM resource ids in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}. The dictionary values can be empty objects ({}) in requests. | ManagedServiceIdentityUserAssignedIdentities |
ManagedServiceIdentityUserAssignedIdentities
| Name | Description | Value |
|---|
ManualResourcePredictionsProfile
| Name | Description | Value |
|---|---|---|
| kind | Determines how the stand-by scheme should be provided. | 'Manual' (required) |
NetworkProfile
| Name | Description | Value |
|---|---|---|
| staticIpAddressCount | The number of static public IP addresses for outgoing connections assigned to the pool. | int |
| subnetId | The subnet id on which to put all machines created in the pool. | string |
Organization
| Name | Description | Value |
|---|---|---|
| alias | An alias to reference the Azure DevOps pool name. | string |
| openAccess | Determines if the pool should have open access to all projects in this organization. | bool |
| parallelism | How many machines can be created at maximum in this organization out of the maximumConcurrency of the pool. | int |
| projects | Optional list of projects in which the pool should be created. | string[] |
| url | The Azure DevOps organization URL in which the pool should be created. | string (required) |
OrganizationProfile
| Name | Description | Value |
|---|---|---|
| kind | Set to 'AzureDevOps' for type AzureDevOpsOrganizationProfile. Set to 'GitHub' for type GitHubOrganizationProfile. | 'AzureDevOps' 'GitHub' (required) |
OsProfile
| Name | Description | Value |
|---|---|---|
| logonType | Determines how the service should be run. By default, this will be set to Service. | 'Interactive' 'Service' |
| secretsManagementSettings | The secret management settings of the machines in the pool. | SecretsManagementSettings |
PoolImage
| Name | Description | Value |
|---|---|---|
| aliases | List of aliases to reference the image by. | string[] |
| buffer | The percentage of the buffer to be allocated to this image. | string |
| ephemeralType | The ephemeral type of the image. | 'Automatic' 'CacheDisk' 'ResourceDisk' |
| resourceId | The resource id of the image. | string |
| wellKnownImageName | The image to use from a well-known set of images made available to customers. | string |
PoolProperties
| Name | Description | Value |
|---|---|---|
| agentProfile | Defines how the machine will be handled once it executed a job. | AgentProfile (required) |
| devCenterProjectResourceId | The resource id of the DevCenter Project the pool belongs to. | string (required) |
| fabricProfile | Defines the type of fabric the agent will run on. | FabricProfile (required) |
| maximumConcurrency | Defines how many resources can there be created at any given time. | int Constraints: Min value = 1 Max value = 10000 (required) |
| organizationProfile | Defines the organization in which the pool will be used. | OrganizationProfile (required) |
| provisioningState | The status of the current operation. | 'Accepted' 'Canceled' 'Deleting' 'Failed' 'Provisioning' 'Succeeded' 'Updating' |
| runtimeConfiguration | The runtime configuration of the pool. | RuntimeConfiguration |
ResourcePredictionsProfile
| Name | Description | Value |
|---|---|---|
| kind | Set to 'Automatic' for type AutomaticResourcePredictionsProfile. Set to 'Manual' for type ManualResourcePredictionsProfile. | 'Automatic' 'Manual' (required) |
RuntimeConfiguration
| Name | Description | Value |
|---|---|---|
| workFolder | The target work folder of the task agent on the machine. | string |
SecretsManagementSettings
| Name | Description | Value |
|---|---|---|
| certificateStoreLocation | Where to store certificates on the machine. | string |
| certificateStoreName | Name of the certificate store to use on the machine, currently 'My' and 'Root' are supported. | 'My' 'Root' |
| keyExportable | Defines if the key of the certificates should be exportable. | bool (required) |
| observedCertificates | The list of certificates to install on all machines in the pool. | string[] (required) |
Stateful
| Name | Description | Value |
|---|---|---|
| gracePeriodTimeSpan | How long should the machine be kept around after it ran a workload when there are no stand-by agents. The maximum is one week. | string |
| kind | Discriminator property for AgentProfile. | 'Stateful' (required) |
| maxAgentLifetime | How long should stateful machines be kept around. The maximum is one week. | string |
StatelessAgentProfile
| Name | Description | Value |
|---|---|---|
| kind | Discriminator property for AgentProfile. | 'Stateless' (required) |
StorageProfile
| Name | Description | Value |
|---|---|---|
| dataDisks | A list of empty data disks to attach. | DataDisk[] |
| osDiskStorageAccountType | The Azure SKU name of the machines in the pool. | 'Premium' 'Standard' 'StandardSSD' |
TrackedResourceTags
| Name | Description | Value |
|---|
UserAssignedIdentity
| Name | Description | Value |
|---|
VmssFabricProfile
| Name | Description | Value |
|---|---|---|
| images | The VM images of the machines in the pool. | PoolImage[] (required) |
| kind | Discriminator property for FabricProfile. | 'Vmss' (required) |
| networkProfile | The network profile of the machines in the pool. | NetworkProfile |
| osProfile | The OS profile of the machines in the pool. | OsProfile |
| sku | The Azure SKU of the machines in the pool. | DevOpsAzureSku (required) |
| storageProfile | The storage profile of the machines in the pool. | StorageProfile |
Usage Examples
Azure Verified Modules
The following Azure Verified Modules can be used to deploy this resource type.
| Module | Description |
|---|---|
| DevOps Infrastructure Pool | AVM Resource Module for DevOps Infrastructure Pool |
ARM template resource definition
The pools resource type can be deployed with operations that target:
For a list of changed properties in each API version, see change log.
Resource format
To create a Microsoft.DevOpsInfrastructure/pools resource, add the following JSON to your template.
{
"type": "Microsoft.DevOpsInfrastructure/pools",
"apiVersion": "2025-09-20",
"name": "string",
"identity": {
"type": "string",
"userAssignedIdentities": {
"{customized property}": {
}
}
},
"location": "string",
"properties": {
"agentProfile": {
"resourcePredictions": {},
"resourcePredictionsProfile": {
"kind": "string"
// For remaining properties, see ResourcePredictionsProfile objects
},
"kind": "string"
// For remaining properties, see AgentProfile objects
},
"devCenterProjectResourceId": "string",
"fabricProfile": {
"kind": "string"
// For remaining properties, see FabricProfile objects
},
"maximumConcurrency": "int",
"organizationProfile": {
"kind": "string"
// For remaining properties, see OrganizationProfile objects
},
"provisioningState": "string",
"runtimeConfiguration": {
"workFolder": "string"
}
},
"tags": {
"{customized property}": "string"
}
}
OrganizationProfile objects
Set the kind property to specify the type of object.
For AzureDevOps, use:
{
"alias": "string",
"kind": "AzureDevOps",
"organizations": [
{
"alias": "string",
"openAccess": "bool",
"parallelism": "int",
"projects": [ "string" ],
"url": "string"
}
],
"permissionProfile": {
"groups": [ "string" ],
"kind": "string",
"users": [ "string" ]
}
}
For GitHub, use:
{
"kind": "GitHub",
"organizations": [
{
"repositories": [ "string" ],
"url": "string"
}
]
}
AgentProfile objects
Set the kind property to specify the type of object.
For Stateful, use:
{
"gracePeriodTimeSpan": "string",
"kind": "Stateful",
"maxAgentLifetime": "string"
}
For Stateless, use:
{
"kind": "Stateless"
}
ResourcePredictionsProfile objects
Set the kind property to specify the type of object.
For Automatic, use:
{
"kind": "Automatic",
"predictionPreference": "string"
}
For Manual, use:
{
"kind": "Manual"
}
FabricProfile objects
Set the kind property to specify the type of object.
For Vmss, use:
{
"images": [
{
"aliases": [ "string" ],
"buffer": "string",
"ephemeralType": "string",
"resourceId": "string",
"wellKnownImageName": "string"
}
],
"kind": "Vmss",
"networkProfile": {
"staticIpAddressCount": "int",
"subnetId": "string"
},
"osProfile": {
"logonType": "string",
"secretsManagementSettings": {
"certificateStoreLocation": "string",
"certificateStoreName": "string",
"keyExportable": "bool",
"observedCertificates": [ "string" ]
}
},
"sku": {
"name": "string"
},
"storageProfile": {
"dataDisks": [
{
"caching": "string",
"diskSizeGiB": "int",
"driveLetter": "string",
"storageAccountType": "string"
}
],
"osDiskStorageAccountType": "string"
}
}
Property Values
Microsoft.DevOpsInfrastructure/pools
| Name | Description | Value |
|---|---|---|
| apiVersion | The api version | '2025-09-20' |
| identity | The managed service identities assigned to this resource. | ManagedServiceIdentity |
| location | The geo-location where the resource lives | string (required) |
| name | The resource name | string Constraints: Pattern = ^[a-zA-Z0-9][a-zA-Z0-9-.]*$ (required) |
| properties | The resource-specific properties for this resource. | PoolProperties |
| tags | Resource tags | Dictionary of tag names and values. See Tags in templates |
| type | The resource type | 'Microsoft.DevOpsInfrastructure/pools' |
AgentProfile
| Name | Description | Value |
|---|---|---|
| kind | Set to 'Stateful' for type Stateful. Set to 'Stateless' for type StatelessAgentProfile. | 'Stateful' 'Stateless' (required) |
| resourcePredictions | Defines pool buffer/stand-by agents. | any |
| resourcePredictionsProfile | Defines how the pool buffer/stand-by agents is provided. | ResourcePredictionsProfile |
AutomaticResourcePredictionsProfile
| Name | Description | Value |
|---|---|---|
| kind | Determines how the stand-by scheme should be provided. | 'Automatic' (required) |
| predictionPreference | Determines the balance between cost and performance. | 'Balanced' 'BestPerformance' 'MoreCostEffective' 'MorePerformance' 'MostCostEffective' |
AzureDevOpsOrganizationProfile
| Name | Description | Value |
|---|---|---|
| alias | An alias to reference the Azure DevOps pool name. | string |
| kind | Discriminator property for OrganizationProfile. | 'AzureDevOps' (required) |
| organizations | The list of Azure DevOps organizations the pool should be present in. | Organization[] (required) |
| permissionProfile | The type of permission which determines which accounts are admins on the Azure DevOps pool. | AzureDevOpsPermissionProfile |
AzureDevOpsPermissionProfile
| Name | Description | Value |
|---|---|---|
| groups | Group email addresses | string[] |
| kind | Determines who has admin permissions to the Azure DevOps pool. | 'CreatorOnly' 'Inherit' 'SpecificAccounts' (required) |
| users | User email addresses | string[] |
DataDisk
| Name | Description | Value |
|---|---|---|
| caching | The type of caching to be enabled for the data disks. The default value for caching is readwrite. For information about the caching options see: https://blogs.msdn.microsoft.com/windowsazurestorage/2012/06/27/exploring-windows-azure-drives-disks-and-images/. | 'None' 'ReadOnly' 'ReadWrite' |
| diskSizeGiB | The initial disk size in gigabytes. | int |
| driveLetter | The drive letter for the empty data disk. If not specified, it will be the first available letter. | string |
| storageAccountType | The storage Account type to be used for the data disk. If omitted, the default is "standard_lrs". | 'Premium_LRS' 'Premium_ZRS' 'StandardSSD_LRS' 'StandardSSD_ZRS' 'Standard_LRS' |
DevOpsAzureSku
| Name | Description | Value |
|---|---|---|
| name | The Azure SKU name of the machines in the pool. | string (required) |
FabricProfile
| Name | Description | Value |
|---|---|---|
| kind | Set to 'Vmss' for type VmssFabricProfile. | 'Vmss' (required) |
GitHubOrganization
| Name | Description | Value |
|---|---|---|
| repositories | Optional list of repositories in which the pool should be created. | string[] |
| url | The GitHub organization URL in which the pool should be created. | string (required) |
GitHubOrganizationProfile
| Name | Description | Value |
|---|---|---|
| kind | Discriminator property for OrganizationProfile. | 'GitHub' (required) |
| organizations | The list of GitHub organizations/repositories the pool should be present in. | GitHubOrganization[] (required) |
ManagedServiceIdentity
| Name | Description | Value |
|---|---|---|
| type | Type of managed service identity (where both SystemAssigned and UserAssigned types are allowed). | 'None' 'SystemAssigned' 'SystemAssigned,UserAssigned' 'UserAssigned' (required) |
| userAssignedIdentities | The set of user assigned identities associated with the resource. The userAssignedIdentities dictionary keys will be ARM resource ids in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}. The dictionary values can be empty objects ({}) in requests. | ManagedServiceIdentityUserAssignedIdentities |
ManagedServiceIdentityUserAssignedIdentities
| Name | Description | Value |
|---|
ManualResourcePredictionsProfile
| Name | Description | Value |
|---|---|---|
| kind | Determines how the stand-by scheme should be provided. | 'Manual' (required) |
NetworkProfile
| Name | Description | Value |
|---|---|---|
| staticIpAddressCount | The number of static public IP addresses for outgoing connections assigned to the pool. | int |
| subnetId | The subnet id on which to put all machines created in the pool. | string |
Organization
| Name | Description | Value |
|---|---|---|
| alias | An alias to reference the Azure DevOps pool name. | string |
| openAccess | Determines if the pool should have open access to all projects in this organization. | bool |
| parallelism | How many machines can be created at maximum in this organization out of the maximumConcurrency of the pool. | int |
| projects | Optional list of projects in which the pool should be created. | string[] |
| url | The Azure DevOps organization URL in which the pool should be created. | string (required) |
OrganizationProfile
| Name | Description | Value |
|---|---|---|
| kind | Set to 'AzureDevOps' for type AzureDevOpsOrganizationProfile. Set to 'GitHub' for type GitHubOrganizationProfile. | 'AzureDevOps' 'GitHub' (required) |
OsProfile
| Name | Description | Value |
|---|---|---|
| logonType | Determines how the service should be run. By default, this will be set to Service. | 'Interactive' 'Service' |
| secretsManagementSettings | The secret management settings of the machines in the pool. | SecretsManagementSettings |
PoolImage
| Name | Description | Value |
|---|---|---|
| aliases | List of aliases to reference the image by. | string[] |
| buffer | The percentage of the buffer to be allocated to this image. | string |
| ephemeralType | The ephemeral type of the image. | 'Automatic' 'CacheDisk' 'ResourceDisk' |
| resourceId | The resource id of the image. | string |
| wellKnownImageName | The image to use from a well-known set of images made available to customers. | string |
PoolProperties
| Name | Description | Value |
|---|---|---|
| agentProfile | Defines how the machine will be handled once it executed a job. | AgentProfile (required) |
| devCenterProjectResourceId | The resource id of the DevCenter Project the pool belongs to. | string (required) |
| fabricProfile | Defines the type of fabric the agent will run on. | FabricProfile (required) |
| maximumConcurrency | Defines how many resources can there be created at any given time. | int Constraints: Min value = 1 Max value = 10000 (required) |
| organizationProfile | Defines the organization in which the pool will be used. | OrganizationProfile (required) |
| provisioningState | The status of the current operation. | 'Accepted' 'Canceled' 'Deleting' 'Failed' 'Provisioning' 'Succeeded' 'Updating' |
| runtimeConfiguration | The runtime configuration of the pool. | RuntimeConfiguration |
ResourcePredictionsProfile
| Name | Description | Value |
|---|---|---|
| kind | Set to 'Automatic' for type AutomaticResourcePredictionsProfile. Set to 'Manual' for type ManualResourcePredictionsProfile. | 'Automatic' 'Manual' (required) |
RuntimeConfiguration
| Name | Description | Value |
|---|---|---|
| workFolder | The target work folder of the task agent on the machine. | string |
SecretsManagementSettings
| Name | Description | Value |
|---|---|---|
| certificateStoreLocation | Where to store certificates on the machine. | string |
| certificateStoreName | Name of the certificate store to use on the machine, currently 'My' and 'Root' are supported. | 'My' 'Root' |
| keyExportable | Defines if the key of the certificates should be exportable. | bool (required) |
| observedCertificates | The list of certificates to install on all machines in the pool. | string[] (required) |
Stateful
| Name | Description | Value |
|---|---|---|
| gracePeriodTimeSpan | How long should the machine be kept around after it ran a workload when there are no stand-by agents. The maximum is one week. | string |
| kind | Discriminator property for AgentProfile. | 'Stateful' (required) |
| maxAgentLifetime | How long should stateful machines be kept around. The maximum is one week. | string |
StatelessAgentProfile
| Name | Description | Value |
|---|---|---|
| kind | Discriminator property for AgentProfile. | 'Stateless' (required) |
StorageProfile
| Name | Description | Value |
|---|---|---|
| dataDisks | A list of empty data disks to attach. | DataDisk[] |
| osDiskStorageAccountType | The Azure SKU name of the machines in the pool. | 'Premium' 'Standard' 'StandardSSD' |
TrackedResourceTags
| Name | Description | Value |
|---|
UserAssignedIdentity
| Name | Description | Value |
|---|
VmssFabricProfile
| Name | Description | Value |
|---|---|---|
| images | The VM images of the machines in the pool. | PoolImage[] (required) |
| kind | Discriminator property for FabricProfile. | 'Vmss' (required) |
| networkProfile | The network profile of the machines in the pool. | NetworkProfile |
| osProfile | The OS profile of the machines in the pool. | OsProfile |
| sku | The Azure SKU of the machines in the pool. | DevOpsAzureSku (required) |
| storageProfile | The storage profile of the machines in the pool. | StorageProfile |
Usage Examples
Terraform (AzAPI provider) resource definition
The pools resource type can be deployed with operations that target:
For a list of changed properties in each API version, see change log.
Resource format
To create a Microsoft.DevOpsInfrastructure/pools resource, add the following Terraform to your template.
resource "azapi_resource" "symbolicname" {
type = "Microsoft.DevOpsInfrastructure/pools@2025-09-20"
name = "string"
parent_id = "string"
identity {
type = "string"
identity_ids = [
"string"
]
}
location = "string"
tags = {
{customized property} = "string"
}
body = {
properties = {
agentProfile = {
resourcePredictions = ?
resourcePredictionsProfile = {
kind = "string"
// For remaining properties, see ResourcePredictionsProfile objects
}
kind = "string"
// For remaining properties, see AgentProfile objects
}
devCenterProjectResourceId = "string"
fabricProfile = {
kind = "string"
// For remaining properties, see FabricProfile objects
}
maximumConcurrency = int
organizationProfile = {
kind = "string"
// For remaining properties, see OrganizationProfile objects
}
provisioningState = "string"
runtimeConfiguration = {
workFolder = "string"
}
}
}
}
OrganizationProfile objects
Set the kind property to specify the type of object.
For AzureDevOps, use:
{
alias = "string"
kind = "AzureDevOps"
organizations = [
{
alias = "string"
openAccess = bool
parallelism = int
projects = [
"string"
]
url = "string"
}
]
permissionProfile = {
groups = [
"string"
]
kind = "string"
users = [
"string"
]
}
}
For GitHub, use:
{
kind = "GitHub"
organizations = [
{
repositories = [
"string"
]
url = "string"
}
]
}
AgentProfile objects
Set the kind property to specify the type of object.
For Stateful, use:
{
gracePeriodTimeSpan = "string"
kind = "Stateful"
maxAgentLifetime = "string"
}
For Stateless, use:
{
kind = "Stateless"
}
ResourcePredictionsProfile objects
Set the kind property to specify the type of object.
For Automatic, use:
{
kind = "Automatic"
predictionPreference = "string"
}
For Manual, use:
{
kind = "Manual"
}
FabricProfile objects
Set the kind property to specify the type of object.
For Vmss, use:
{
images = [
{
aliases = [
"string"
]
buffer = "string"
ephemeralType = "string"
resourceId = "string"
wellKnownImageName = "string"
}
]
kind = "Vmss"
networkProfile = {
staticIpAddressCount = int
subnetId = "string"
}
osProfile = {
logonType = "string"
secretsManagementSettings = {
certificateStoreLocation = "string"
certificateStoreName = "string"
keyExportable = bool
observedCertificates = [
"string"
]
}
}
sku = {
name = "string"
}
storageProfile = {
dataDisks = [
{
caching = "string"
diskSizeGiB = int
driveLetter = "string"
storageAccountType = "string"
}
]
osDiskStorageAccountType = "string"
}
}
Property Values
Microsoft.DevOpsInfrastructure/pools
| Name | Description | Value |
|---|---|---|
| identity | The managed service identities assigned to this resource. | ManagedServiceIdentity |
| location | The geo-location where the resource lives | string (required) |
| name | The resource name | string Constraints: Pattern = ^[a-zA-Z0-9][a-zA-Z0-9-.]*$ (required) |
| parent_id | The ID of the resource to apply this extension resource to. | string (required) |
| properties | The resource-specific properties for this resource. | PoolProperties |
| tags | Resource tags | Dictionary of tag names and values. |
| type | The resource type | "Microsoft.DevOpsInfrastructure/pools@2025-09-20" |
AgentProfile
| Name | Description | Value |
|---|---|---|
| kind | Set to 'Stateful' for type Stateful. Set to 'Stateless' for type StatelessAgentProfile. | 'Stateful' 'Stateless' (required) |
| resourcePredictions | Defines pool buffer/stand-by agents. | any |
| resourcePredictionsProfile | Defines how the pool buffer/stand-by agents is provided. | ResourcePredictionsProfile |
AutomaticResourcePredictionsProfile
| Name | Description | Value |
|---|---|---|
| kind | Determines how the stand-by scheme should be provided. | 'Automatic' (required) |
| predictionPreference | Determines the balance between cost and performance. | 'Balanced' 'BestPerformance' 'MoreCostEffective' 'MorePerformance' 'MostCostEffective' |
AzureDevOpsOrganizationProfile
| Name | Description | Value |
|---|---|---|
| alias | An alias to reference the Azure DevOps pool name. | string |
| kind | Discriminator property for OrganizationProfile. | 'AzureDevOps' (required) |
| organizations | The list of Azure DevOps organizations the pool should be present in. | Organization[] (required) |
| permissionProfile | The type of permission which determines which accounts are admins on the Azure DevOps pool. | AzureDevOpsPermissionProfile |
AzureDevOpsPermissionProfile
| Name | Description | Value |
|---|---|---|
| groups | Group email addresses | string[] |
| kind | Determines who has admin permissions to the Azure DevOps pool. | 'CreatorOnly' 'Inherit' 'SpecificAccounts' (required) |
| users | User email addresses | string[] |
DataDisk
| Name | Description | Value |
|---|---|---|
| caching | The type of caching to be enabled for the data disks. The default value for caching is readwrite. For information about the caching options see: https://blogs.msdn.microsoft.com/windowsazurestorage/2012/06/27/exploring-windows-azure-drives-disks-and-images/. | 'None' 'ReadOnly' 'ReadWrite' |
| diskSizeGiB | The initial disk size in gigabytes. | int |
| driveLetter | The drive letter for the empty data disk. If not specified, it will be the first available letter. | string |
| storageAccountType | The storage Account type to be used for the data disk. If omitted, the default is "standard_lrs". | 'Premium_LRS' 'Premium_ZRS' 'StandardSSD_LRS' 'StandardSSD_ZRS' 'Standard_LRS' |
DevOpsAzureSku
| Name | Description | Value |
|---|---|---|
| name | The Azure SKU name of the machines in the pool. | string (required) |
FabricProfile
| Name | Description | Value |
|---|---|---|
| kind | Set to 'Vmss' for type VmssFabricProfile. | 'Vmss' (required) |
GitHubOrganization
| Name | Description | Value |
|---|---|---|
| repositories | Optional list of repositories in which the pool should be created. | string[] |
| url | The GitHub organization URL in which the pool should be created. | string (required) |
GitHubOrganizationProfile
| Name | Description | Value |
|---|---|---|
| kind | Discriminator property for OrganizationProfile. | 'GitHub' (required) |
| organizations | The list of GitHub organizations/repositories the pool should be present in. | GitHubOrganization[] (required) |
ManagedServiceIdentity
| Name | Description | Value |
|---|---|---|
| type | Type of managed service identity (where both SystemAssigned and UserAssigned types are allowed). | 'None' 'SystemAssigned' 'SystemAssigned,UserAssigned' 'UserAssigned' (required) |
| userAssignedIdentities | The set of user assigned identities associated with the resource. The userAssignedIdentities dictionary keys will be ARM resource ids in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}. The dictionary values can be empty objects ({}) in requests. | ManagedServiceIdentityUserAssignedIdentities |
ManagedServiceIdentityUserAssignedIdentities
| Name | Description | Value |
|---|
ManualResourcePredictionsProfile
| Name | Description | Value |
|---|---|---|
| kind | Determines how the stand-by scheme should be provided. | 'Manual' (required) |
NetworkProfile
| Name | Description | Value |
|---|---|---|
| staticIpAddressCount | The number of static public IP addresses for outgoing connections assigned to the pool. | int |
| subnetId | The subnet id on which to put all machines created in the pool. | string |
Organization
| Name | Description | Value |
|---|---|---|
| alias | An alias to reference the Azure DevOps pool name. | string |
| openAccess | Determines if the pool should have open access to all projects in this organization. | bool |
| parallelism | How many machines can be created at maximum in this organization out of the maximumConcurrency of the pool. | int |
| projects | Optional list of projects in which the pool should be created. | string[] |
| url | The Azure DevOps organization URL in which the pool should be created. | string (required) |
OrganizationProfile
| Name | Description | Value |
|---|---|---|
| kind | Set to 'AzureDevOps' for type AzureDevOpsOrganizationProfile. Set to 'GitHub' for type GitHubOrganizationProfile. | 'AzureDevOps' 'GitHub' (required) |
OsProfile
| Name | Description | Value |
|---|---|---|
| logonType | Determines how the service should be run. By default, this will be set to Service. | 'Interactive' 'Service' |
| secretsManagementSettings | The secret management settings of the machines in the pool. | SecretsManagementSettings |
PoolImage
| Name | Description | Value |
|---|---|---|
| aliases | List of aliases to reference the image by. | string[] |
| buffer | The percentage of the buffer to be allocated to this image. | string |
| ephemeralType | The ephemeral type of the image. | 'Automatic' 'CacheDisk' 'ResourceDisk' |
| resourceId | The resource id of the image. | string |
| wellKnownImageName | The image to use from a well-known set of images made available to customers. | string |
PoolProperties
| Name | Description | Value |
|---|---|---|
| agentProfile | Defines how the machine will be handled once it executed a job. | AgentProfile (required) |
| devCenterProjectResourceId | The resource id of the DevCenter Project the pool belongs to. | string (required) |
| fabricProfile | Defines the type of fabric the agent will run on. | FabricProfile (required) |
| maximumConcurrency | Defines how many resources can there be created at any given time. | int Constraints: Min value = 1 Max value = 10000 (required) |
| organizationProfile | Defines the organization in which the pool will be used. | OrganizationProfile (required) |
| provisioningState | The status of the current operation. | 'Accepted' 'Canceled' 'Deleting' 'Failed' 'Provisioning' 'Succeeded' 'Updating' |
| runtimeConfiguration | The runtime configuration of the pool. | RuntimeConfiguration |
ResourcePredictionsProfile
| Name | Description | Value |
|---|---|---|
| kind | Set to 'Automatic' for type AutomaticResourcePredictionsProfile. Set to 'Manual' for type ManualResourcePredictionsProfile. | 'Automatic' 'Manual' (required) |
RuntimeConfiguration
| Name | Description | Value |
|---|---|---|
| workFolder | The target work folder of the task agent on the machine. | string |
SecretsManagementSettings
| Name | Description | Value |
|---|---|---|
| certificateStoreLocation | Where to store certificates on the machine. | string |
| certificateStoreName | Name of the certificate store to use on the machine, currently 'My' and 'Root' are supported. | 'My' 'Root' |
| keyExportable | Defines if the key of the certificates should be exportable. | bool (required) |
| observedCertificates | The list of certificates to install on all machines in the pool. | string[] (required) |
Stateful
| Name | Description | Value |
|---|---|---|
| gracePeriodTimeSpan | How long should the machine be kept around after it ran a workload when there are no stand-by agents. The maximum is one week. | string |
| kind | Discriminator property for AgentProfile. | 'Stateful' (required) |
| maxAgentLifetime | How long should stateful machines be kept around. The maximum is one week. | string |
StatelessAgentProfile
| Name | Description | Value |
|---|---|---|
| kind | Discriminator property for AgentProfile. | 'Stateless' (required) |
StorageProfile
| Name | Description | Value |
|---|---|---|
| dataDisks | A list of empty data disks to attach. | DataDisk[] |
| osDiskStorageAccountType | The Azure SKU name of the machines in the pool. | 'Premium' 'Standard' 'StandardSSD' |
TrackedResourceTags
| Name | Description | Value |
|---|
UserAssignedIdentity
| Name | Description | Value |
|---|
VmssFabricProfile
| Name | Description | Value |
|---|---|---|
| images | The VM images of the machines in the pool. | PoolImage[] (required) |
| kind | Discriminator property for FabricProfile. | 'Vmss' (required) |
| networkProfile | The network profile of the machines in the pool. | NetworkProfile |
| osProfile | The OS profile of the machines in the pool. | OsProfile |
| sku | The Azure SKU of the machines in the pool. | DevOpsAzureSku (required) |
| storageProfile | The storage profile of the machines in the pool. | StorageProfile |
Usage Examples
Azure Verified Modules
The following Azure Verified Modules can be used to deploy this resource type.
| Module | Description |
|---|---|
| DevOps Pools | AVM Resource Module for DevOps Pools |