Azure Virtual Network
Compatible with ARM-speaking clients, Terraform's AzureRM provider, and OpenTofu resources that provision basic Microsoft.Network dependencies for local VM workflows.
No Docker required. Network is an in-process ARM control-plane emulator. It stores resource state and returns Azure-shaped responses, but it does not create real routing, packet isolation, firewall enforcement, or IP allocation.
Features
- Virtual networks — CreateOrUpdate, Get, Delete, and List by resource group
- Subnets — CreateOrUpdate, Get, Delete, and List under a virtual network
- Network interfaces — CreateOrUpdate, Get, Delete, and List by resource group
- Public IP addresses — CreateOrUpdate, Get, Delete, and List by resource group
- Network security groups — CreateOrUpdate, Get, Delete, and List by resource group
- Terraform/OpenTofu compatibility — supports the Network resources needed by
azurerm_linux_virtual_machine - Resource group listing — Network resources appear in ARM resource group resource listings
Created resources return properties.provisioningState = "Succeeded". NICs synthesize a dynamic private IP (10.0.0.4) when no private IP is supplied, and public IP resources synthesize a dynamic public IP (20.0.0.4) when no address is supplied.
Endpoints
All operations use ARM paths:
GET /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/virtualNetworks
PUT /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/virtualNetworks/{name}
GET /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/virtualNetworks/{name}
DELETE /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/virtualNetworks/{name}
GET /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/virtualNetworks/{vnet}/subnets
PUT /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/virtualNetworks/{vnet}/subnets/{name}
GET /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/virtualNetworks/{vnet}/subnets/{name}
DELETE /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/virtualNetworks/{vnet}/subnets/{name}
PUT /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/networkInterfaces/{name}
GET /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/networkInterfaces/{name}
DELETE /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/networkInterfaces/{name}
PUT /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/publicIPAddresses/{name}
GET /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/publicIPAddresses/{name}
DELETE /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/publicIPAddresses/{name}
PUT /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/networkSecurityGroups/{name}
GET /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/networkSecurityGroups/{name}
DELETE /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/networkSecurityGroups/{name}
Terraform And OpenTofu
The compatibility suites exercise Network through the same local emulator path used in CI:
If port 4577 is already in use, run the suites against another emulator port:
The Network coverage lives in:
compatibility-tests/compat-terraformcompatibility-tests/compat-opentofu
The current Network scope is enough for Terraform/OpenTofu to create and destroy a resource group with VNet, subnet, NIC, public IP, NSG, and a VM that references the NIC.
Configuration
floci-az:
services:
network:
enabled: true # Microsoft.Network — VNet, subnets, NIC, public IP, NSG, and DNS zones
arm:
enabled: true # central management plane; disabling it turns OFF all ARM-based services
| Environment Variable | Default | Description |
|---|---|---|
FLOCI_AZ_SERVICES_NETWORK_ENABLED |
true |
Enable/disable all of Microsoft.Network (VNet, subnets, NIC, public IP, NSG, and DNS zones). When disabled, /providers/Microsoft.Network/... calls return 404 ResourceNotFound; the rest of ARM keeps working. |
FLOCI_AZ_SERVICES_ARM_ENABLED |
true |
Enable/disable the ARM management plane itself (/providers, /subscriptions, resource groups). Disabling it turns off every ARM-based service (vm, aks, sql, redis, acr, servicebus, apim, monitor, network, storage/keyvault ARM) — use only to fully shut down the management plane. |
Scope And Limitations
- No real L2/L3 networking, routing, peering, DNS, packet forwarding, or service endpoints
- No NSG rule enforcement; NSG resources are stored as ARM state only
- No private endpoint, route table, NAT gateway, load balancer, or application gateway behavior
- No real IP address management; default private and public IPs are synthesized for SDK and provider compatibility
- Deletes are state-only; deleting a VNet also removes its child subnets from the in-memory store
The goal is API parity for local provisioning workflows, especially SDK, Azure CLI, Terraform, and OpenTofu flows that need Network dependencies before creating other Azure resources.