Azure Virtual Network now supports updates without subnet property
Azure API supports the HTTP methods PUT, GET, DELETE for the CRUD (Create/Retrieve/Update/Delete) operations on your resources. The PUT operation is used for both Create and Update. For existing resources, using a PUT with the existing resources preserves them and adds any new resources supplied in the JSON. If any of the existing resources are omitted from the JSON for the PUT operation, those resources are removed from the Azure deployment.
Based on customer support cases and feedback, we observed that this behavior causes problems for customers while performing updates to existing deployments. This is a challenge in the case of subnets in the VNet where any updates to the virtual network, or addition of resources (e.g. adding a routing table), to a virtual network require you to supply the entire virtual network configuration in addition to the subnets. To make it easier for customers, we have implemented a change in the PUT API behavior for virtual network updates. This change allows you to skip the subnet specification in a PUT call without deleting the existing subnets. This capability is now available in a Limited Preview in all the EUAP regions, US West Central and US North with API version 2023-09-01.
Previous behavior
The existing behavior has been to expect a subnet property in the PUT virtual network call. If a subnet property isn't included, the subnets are deleted. This might not be the intention.
New PUT VNet behavior
Assuming your existing configuration is as follows:
|
"subnets": [ { "name": "SubnetA", "properties": {...} }, { "name": "SubnetB", "properties": {...} }, { "name": "SubnetC", "properties": {...} }, { "name": "SubnetD", "properties": {...} }
] |
The updated behavior is as follows:
- If a PUT virtual network doesn't include a subnet property, no changes to the existing set of subnets is made.
- If subnet property is explicitly marked as empty, we will treat this as a request to delete all the existing subnets. For example:
|
"subnets": [] |
OR
|
"subnets": null |
- If a subnet property is supplied with specific values as follows:
|
"subnets": [ { "name": "SubnetA", "properties": {...} }, { "name": "Subnet-B", "properties": {...} }, { "name": "Subnet-X", "properties": {...} } ] |
In this case, the following changes are made to the virtual network:
- SubnetA is unchanged. Assuming the supplied configuration is the same as existing.
- SubnetB, SubnetC and SubnetD are deleted.
- Two new subnets Subnet-B and Subnet-X are created with the new configuration.
This behavior remains unchanged from what Azure currently has today.
Next Steps
Test the new behavior in the regions listed above and share your feedback.
Published on:
Learn moreRelated posts
Integration Testing Azure Functions with Reqnroll and C#, Part 5 - Using Corvus.Testing.ReqnRoll in a build pipeline
If you use Azure Functions on a regular basis, you'll likely have grappled with the challenge of testing them. In the final post in this serie...
Integration Testing Azure Functions with Reqnroll and C#, Part 4 - Controlling your functions with additional configuration
If you use Azure Functions on a regular basis, you'll likely have grappled with the challenge of testing them. In the fourth of this series of...
Integration Testing Azure Functions with Reqnroll and C#, Part 3 - Using hooks to start Functions
If you use Azure Functions on a regular basis, you'll likely have grappled with the challenge of testing them. In the third of a series of pos...
Integration Testing Azure Functions with Reqnroll and C#, Part 2 - Using step bindings to start Functions
If you use Azure Functions on a regular basis, you'll likely have grappled with the challenge of testing them. In the second of a series of po...
Integration Testing Azure Functions with Reqnroll and C#, Part 1 - Introduction
If you use Azure Functions on a regular basis, you'll likely have grappled with the challenge of testing them. In the first of a series of pos...
Announcing Azure MCP Server 2.0 Stable Release for Self-Hosted Agentic Cloud Automation
Azure MCP Server 2.0 is now generally available, delivering first-class self-hosting, stronger security hardening, and a faster foundation for...
Azure Security: Private Vs. Service Endpoints
When connecting securely to a platform service such as a key vault or an Azure storage account, Microsoft recommends using a private endpoint ...
Give your Foundry Agent Custom Tools with MCP Servers on Azure Functions
Learn how to connect your MCP server hosted on Azure Functions to Microsoft Foundry agents. This post covers authentication options and setup ...
Azure Data Factory Tips for Reliable Microsoft Dynamics 365 CE and Dataverse Integrations
Reliable integrations between Microsoft Dynamics 365 Customer Engagement and external systems can become challenging. This is especially true ...
Scalable AI with Azure Cosmos DB: Tredence Intelligent Document Processing (IDP) | March 2026
Azure Cosmos DB enables scalable AI-driven document processing, addressing one of the biggest barriers to operational scale in today’s enterpr...