Skip to content

Virtual Networks

miniblue emulates Azure Virtual Networks (VNets) and subnets via the ARM API. These endpoints are compatible with the Terraform azurerm_virtual_network and azurerm_subnet resources.

API endpoints

Virtual Networks

Method Path Description
PUT /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/virtualNetworks/{name} Create or update
GET /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/virtualNetworks/{name} Get
DELETE /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/virtualNetworks/{name} Delete
GET /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/virtualNetworks List

Subnets

Method Path Description
PUT .../virtualNetworks/{vnet}/subnets/{subnet} Create or update
GET .../virtualNetworks/{vnet}/subnets/{subnet} Get
DELETE .../virtualNetworks/{vnet}/subnets/{subnet} Delete
GET .../virtualNetworks/{vnet}/subnets List

Create a VNet

curl -X PUT "http://localhost:4566/subscriptions/sub1/resourceGroups/myRG/providers/Microsoft.Network/virtualNetworks/my-vnet?api-version=2020-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "location": "eastus",
    "properties": {
      "addressSpace": {
        "addressPrefixes": ["10.0.0.0/16"]
      }
    }
  }'

Response (201 Created):

{
  "id": "/subscriptions/sub1/resourceGroups/myRG/providers/Microsoft.Network/virtualNetworks/my-vnet",
  "name": "my-vnet",
  "type": "Microsoft.Network/virtualNetworks",
  "location": "eastus",
  "etag": "W/\"miniblue\"",
  "properties": {
    "provisioningState": "Succeeded",
    "resourceGuid": "00000000-0000-0000-0000-000000000000",
    "addressSpace": {
      "addressPrefixes": ["10.0.0.0/16"]
    },
    "dhcpOptions": {
      "dnsServers": []
    },
    "subnets": [],
    "virtualNetworkPeerings": [],
    "enableDdosProtection": false,
    "enableVmProtection": false
  }
}

Get a VNet

curl "http://localhost:4566/subscriptions/sub1/resourceGroups/myRG/providers/Microsoft.Network/virtualNetworks/my-vnet?api-version=2020-06-01"

The response includes a subnets array populated from the store.

Create a subnet

The parent VNet must exist first.

curl -X PUT "http://localhost:4566/subscriptions/sub1/resourceGroups/myRG/providers/Microsoft.Network/virtualNetworks/my-vnet/subnets/my-subnet?api-version=2020-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "properties": {
      "addressPrefix": "10.0.1.0/24"
    }
  }'

Response (201 Created):

{
  "id": "/subscriptions/sub1/resourceGroups/myRG/providers/Microsoft.Network/virtualNetworks/my-vnet/subnets/my-subnet",
  "name": "my-subnet",
  "etag": "W/\"miniblue\"",
  "type": "Microsoft.Network/virtualNetworks/subnets",
  "properties": {
    "provisioningState": "Succeeded",
    "addressPrefix": "10.0.1.0/24",
    "addressPrefixes": ["10.0.1.0/24"],
    "serviceEndpoints": [],
    "delegations": [],
    "privateEndpointNetworkPolicies": "Disabled",
    "privateLinkServiceNetworkPolicies": "Enabled",
    "defaultOutboundAccess": true
  }
}

List subnets

curl "http://localhost:4566/subscriptions/sub1/resourceGroups/myRG/providers/Microsoft.Network/virtualNetworks/my-vnet/subnets?api-version=2020-06-01"

Delete a subnet

curl -X DELETE "http://localhost:4566/subscriptions/sub1/resourceGroups/myRG/providers/Microsoft.Network/virtualNetworks/my-vnet/subnets/my-subnet?api-version=2020-06-01"

Delete a VNet

curl -X DELETE "http://localhost:4566/subscriptions/sub1/resourceGroups/myRG/providers/Microsoft.Network/virtualNetworks/my-vnet?api-version=2020-06-01"

Deleting a VNet also deletes all its subnets.

azlocal

# Create
azlocal network vnet create --name my-vnet --resource-group myRG \
  --address-prefix 10.0.0.0/16 --location eastus

# Show
azlocal network vnet show --name my-vnet --resource-group myRG

# List
azlocal network vnet list --resource-group myRG

# Delete
azlocal network vnet delete --name my-vnet --resource-group myRG

Terraform

resource "azurerm_virtual_network" "example" {
  name                = "example-vnet"
  address_space       = ["10.0.0.0/16"]
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
}

resource "azurerm_subnet" "example" {
  name                 = "example-subnet"
  resource_group_name  = azurerm_resource_group.example.name
  virtual_network_name = azurerm_virtual_network.example.name
  address_prefixes     = ["10.0.1.0/24"]
}

See the Terraform guide for full provider configuration.