API Spec link
https://github.com/Azure/azure-rest-api-specs/blob/main/specification/devopsinfrastructure/Microsoft.DevOpsInfrastructure/main.tsp
API Spec version
2025-09-20
Describe the bug
When creating a Managed DevOps Pool (Microsoft.DevOpsInfrastructure/pools) with properties.fabricProfile.networkProfile.staticIpAddressCount set to a non-zero value (e.g. 1), the subsequent GET response differs from a pool created without staticIpAddressCount:
- permissionProfile is missing — The PUT request includes organizationProfile.permissionProfile with "kind": "Inherit", but the GET response omits permissionProfile entirely.
- Unexpected fields appear in the GET response — The following fields, which were never sent in the PUT request body, are returned:
- fabricProfile.osProfile (e.g. with logonType and secretsManagementSettings)
- fabricProfile.images[].aliases
- fabricProfile.images[].ephemeralType
When staticIpAddressCount is not set (or omitted), the GET response correctly reflects what was sent in the PUT — permissionProfile is present and the extra fields do not appear.
Expected behavior
The GET response should be consistent regardless of whether staticIpAddressCount is set
Actual behavior
When staticIpAddressCount is set in properties.fabricProfile.networkProfile:
- GET response is missing organizationProfile.permissionProfile — it was sent as "kind": "Inherit" during creation but is absent in the response.
- GET response contains unexpected fields that were never sent in the PUT:
- fabricProfile.osProfile — appears with default/system-generated values
- fabricProfile.images[].aliases — populated with values not sent by the client
- fabricProfile.images[].ephemeralType — populated with values not sent by the client
When staticIpAddressCount is not set, none of these issues occur — the GET response accurately reflects the PUT payload.
Reproduction Steps
Compare GET result between Create a pool WITHOUT and WITH staticIpAddressCount — send a PUT to Microsoft.DevOpsInfrastructure/pools/{poolName} (API version 2025-09-20):
{
"location": "eastus2",
"properties": {
"organizationProfile": {
"kind": "AzureDevOps",
"organizations": [
{
"url": "https://dev.azure.com/<org>",
"projects": ["<project>"]
}
],
"permissionProfile": {
"kind": "Inherit"
}
},
"fabricProfile": {
"kind": "Vmss",
"sku": { "name": "Standard_D2as_v5" },
"images": [
{
"wellKnownImageName": "ubuntu-22.04/latest",
"buffer": "*"
}
],
"networkProfile": {
"subnetId": "/subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.Network/virtualNetworks/<vnet>/subnets/<subnet>"
}
},
"maximumConcurrency": 1,
"devCenterProjectResourceId": "/subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.DevCenter/projects/<project>",
"agentProfile": { "kind": "Stateless" }
}
}
Environment
No response
API Spec link
https://github.com/Azure/azure-rest-api-specs/blob/main/specification/devopsinfrastructure/Microsoft.DevOpsInfrastructure/main.tsp
API Spec version
2025-09-20
Describe the bug
When creating a Managed DevOps Pool (Microsoft.DevOpsInfrastructure/pools) with properties.fabricProfile.networkProfile.staticIpAddressCount set to a non-zero value (e.g. 1), the subsequent GET response differs from a pool created without staticIpAddressCount:
When staticIpAddressCount is not set (or omitted), the GET response correctly reflects what was sent in the PUT — permissionProfile is present and the extra fields do not appear.
Expected behavior
The GET response should be consistent regardless of whether staticIpAddressCount is set
Actual behavior
When staticIpAddressCount is set in properties.fabricProfile.networkProfile:
When staticIpAddressCount is not set, none of these issues occur — the GET response accurately reflects the PUT payload.
Reproduction Steps
Compare GET result between Create a pool WITHOUT and WITH staticIpAddressCount — send a PUT to Microsoft.DevOpsInfrastructure/pools/{poolName} (API version 2025-09-20):
Environment
No response