Azure Managed DevOps Pool: Agent provisioning fails with UnableToDownloadWorkerCheckNetwork and no agents are created

Navdeep Singh 0 Reputation points
2026-10-16T05:54:28.0933333+00:00

I'm trying to use an Azure Managed DevOps Pool for Azure Pipelines, but agents never get provisioned.

Environment

  • Azure Managed DevOps Pool
  • Ubuntu 24.04 image
  • VM sizes tested: Standard_B2s and Standard_D2ads_v5
  • Regions tested: East US 2 and Central India
  • Dev Center and Dev Center Project recreated multiple times
  • New VNet and delegated subnet created (Microsoft.DevOpsInfrastructure/pools)
  • No NSG attached
  • No Route Table attached
  • Azure-provided DNS
  • Tested with and without Managed Identity

Scenario I create the Managed DevOps Pool successfully and associate it with Azure Pipelines. When a pipeline is queued, Azure DevOps attempts to acquire an agent from the pool.

Result The pipeline remains stuck at:

  • Acquiring an agent from the cloud
  • We are provisioning an agent for request...
  • Pool provider seems slow

Pool metrics show:

  • Demand = 1
  • Ready = 0
  • Provisioned = 0
  • Failed > 40

The Managed DevOps Pool dashboard reports:

  • Failure Stage: ProvisioningResource
  • Error Code: UnableToDownloadWorkerCheckNetwork

No agents ever appear in the Agents blade, and no VM Scale Set resources are created in the subscription.

Troubleshooting** **performed

  • Recreated the pool multiple times
  • Recreated Dev Center and Dev Center Project
  • Tested different regions and VM sizes
  • Verified subnet delegation
  • Verified no NSG or Route Table is attached
  • Verified Azure DNS is being used
  • Verified required role assignments exist on the VNet
  • Verified pool creation succeeds (provisioningState`` ``=`` ``Succeeded)
  • Verified Azure DevOps can submit provisioning requests to the pool

Questions

  1. What exactly does the UnableToDownloadWorkerCheckNetwork error indicate?
  2. What resource or package is the worker attempting to download during this step?
  3. Are there any known prerequisites or networking requirements that could cause provisioning to fail before any VMSS or agent is created?

Any guidance on further diagnostics would be appreciated.

Azure DevOps
0 comments No comments

1 answer

Sort by: Oldest
  1. AI answer

    2026-10-16T05:56:04.35+00:00

    UnableToDownloadWorkerCheckNetwork means the provisioning infrastructure cannot reach a prerequisite download endpoint, so first check whether the new subnet is private (defaultOutboundAccess: false) and, if it has no other working egress path, associate an Azure NAT Gateway or another explicit outbound mechanism.

    1. Verify and provide outbound connectivity

    Having no NSG or route table does not guarantee Internet egress. For API versions released after March 31, 2026, new virtual networks default to private subnets, and the Azure portal already defaults to creating private subnets. A private subnet cannot reach public endpoints unless it has explicit outbound connectivity.^1^

    1. Open Azure portal → Virtual network → Subnets → your MDP subnet.
    2. Inspect the subnet configuration/resource JSON for defaultOutboundAccess.
    3. Determine whether the subnet already has an explicit egress mechanism:
      • Azure NAT Gateway
      • Azure Firewall or another network virtual appliance with appropriate routing
      • Another supported explicit outbound design
    4. If defaultOutboundAccess is false and none exists:
      • Create an Azure NAT Gateway with a public IP.
      • Associate it with the MDP subnet.
      • Queue another pipeline and check whether Provisioned and Ready increase.

    A NAT Gateway associated with a subnet provides outbound access through its public IP.^2^ Suitable Azure permissions are required to create the gateway and modify the subnet association.

    If explicit egress already exists, do not add another mechanism yet; test the required endpoints and investigate filtering upstream.

    2. Allow the worker, agent, and Ubuntu endpoints

    Microsoft defines this error as network infrastructure blocking one of the prerequisite endpoints. The unqualified error does not identify which one; only an endpoint-qualified error such as UnableToDownloadWorkerCheckNetwork[<endpoint>], provisioning logs, or connectivity testing can narrow it down.^3^

    The worker download is:

    • rmprodbuilds.azureedge.net — Managed DevOps Pools worker binaries and startup scripts.
    • rm-agent.prod.manageddevops.microsoft.com — agent portion of the worker binaries; covered by *.prod.manageddevops.microsoft.com.
    • *.queue.core.windows.net — worker queue communication.

    The machine subsequently needs:

    • download.agent.dev.azure.com — Azure Pipelines agent package.
    • dev.azure.com — Azure DevOps communication.
    • Ubuntu provisioning endpoints:
      • azure.archive.ubuntu.com over HTTP 80
      • www.microsoft.com
      • security.ubuntu.com
      • packages.microsoft.com
      • ppa.launchpad.net
      • dl.fedoraproject.org

    The remaining documented endpoints use HTTPS unless stated otherwise.^4^

    Check for controls outside the subnet itself:

    • Azure Firewall or another upstream firewall
    • Azure Policy affecting private subnets or egress
    • Hub/spoke routing inherited outside the subnet
    • DNS filtering
    • TLS inspection, particularly if the code changes to UnableToDownloadWorkerCheckNetwork_TLSIssue
    • Proxy variables baked into the image; incorrectly configured VSTS_AGENT_INPUT_PROXY* variables cause provisioning failures

    3. Validate endpoint reachability correctly

    Microsoft provides ValidateMDPEndpoints.ps1, which must run from a resource using the network path being tested.^4^

    However, an MDP subnet is delegated for exclusive pool use, so an ordinary customer VM normally cannot be deployed into the already-associated subnet. Use one of these approaches:

    1. During a controlled recreation, run the test VM before delegating and associating the subnet.
    2. Use a temporary subnet with identical DNS, NSG, route, firewall, policy, and egress settings.
    3. Temporarily detach/reconfigure the exact subnet only if operationally safe.

    An equivalent subnet is only an approximation. Separately compare every subnet-specific setting on the actual MDP subnet.

    4. Why no VMSS appears

    This absence is expected. Managed DevOps Pools uses a hosted-on-behalf architecture: agent VMs exist in a Microsoft-owned subscription, while your delegated subnet supplies their network connection. Consequently, no customer-owned VM Scale Set needs to appear in your subscription.^5^

    5. Capture evidence before escalation

    Configure Managed DevOps Pool → Monitoring → Diagnostic settings → Add diagnostic setting, enable Resource Provisioning Logs, and send them to a storage account or event hub. Reproduce the failure and retain the timestamps, request IDs, endpoint-qualified errors, image, SKU, region, and outbound configuration.^6^

    If all required endpoints succeed from an accurately equivalent path and provisioning still fails across regions, open an Azure support request with those logs and request IDs. That separates an upstream service-side failure from an unobserved subnet or egress restriction.


    References

    1. Default outbound access in Azure
    2. What is Azure NAT Gateway?
    3. Monitor - Managed DevOps Pools | Microsoft Learn
    4. Configure networking - Managed DevOps Pools | Microsoft Learn
    5. Microsoft Managed DevOps Pools architecture overview
    6. Diagnostics logs
    AI-generated content may be incorrect. Read our transparency notes for more information.

    Was this answer helpful?

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.