Skip to content

[BUG] Setting staticIpAddressCount on Managed DevOps Pool causes GET response to omit permissionProfile and return unexpected fields (osProfile, images[].aliases, images[].ephemeralType) #42195

@QixiaLu

Description

@QixiaLu

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugThis issue requires a change to an existing behavior in the product in order to be resolved.customer-reportedIssues that are reported by GitHub users external to the Azure organization.questionThe issue doesn't require a change to the product in order to be resolved. Most issues start as that

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions