Create and Provision a Network Fabric using Azure CLI

This article describes how to create a Network Fabric by using the Azure Command Line Interface (AzCLI). This document also shows you how to check the status, update, or delete a Network Fabric.

Prerequisites

  • An Azure account with an active subscription.
  • Install the latest version of the CLI commands. For information about installing the CLI commands, see Install Azure CLI
  • A Network Fabric controller manages multiple Network Fabrics on the same Azure region.
  • Physical Operator-Nexus instance with cabling as per BoM version.
  • Express Route connectivity between NFC and Operator-Nexus instances.
  • Terminal server pre-configured with username and password installed and configured
  • PE devices pre-configured with necessary VLANs, Route-Targets and IP addresses.
  • Supported SKU information is inventoried here

Steps to Provision a Fabric & Racks

  • Create a Network Fabric by providing racks, server count, SKU & network configuration.
  • Create a Network to Network Interconnect by providing Layer2 & Layer 3 Parameters
  • Update the serial number in the networkDevice resource with the actual serial number on the device.
  • Configure the terminal server with the serial numbers of all the devices.
  • Provision the Network Fabric.

Fabric Configuration

The following table specifies parameters used to create Network Fabric,

$prefix: /subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroupName/providers/Microsoft.ManagedNetworkFabric/networkFabricControllers

Parameter Description Example Required Type
resource-group Name of the resource group "NFResourceGroup" True
location Operator-Nexus Azure region "eastus" True
resource-name Name of the FabricResource NF-ResourceName True
nf-sku Fabric SKU ID is the SKU of the ordered BoM version. See Network Fabric SKUs. M4-A400-A100-C16-ab True String
nfc-id Network Fabric Controller "ARM resource ID" $prefix/NFCName True
rackcount Number of compute racks per fabric. Possible values are 2-8 8 True
serverCountPerRack Number of compute servers per rack. Possible values are 4, 8, 12 or 16 16 True
ipv4Prefix IPv4 Prefix of the management network. This Prefix should be unique across all Network Fabrics in a Network Fabric Controller. Prefix length should be at least 19 (/20 isn't allowed, /18 and lower are allowed) 10.246.0.0/19 True
ipv6Prefix IPv6 Prefix of the management network. This Prefix should be unique across all Network Fabrics in a Network Fabric Controller. 10:5:0:0::/59 True
management-network-config Details of management network True
infrastructureVpnConfiguration Details of management VPN connection between Network Fabric and infrastructure services in Network Fabric Controller True
optionBProperties Details of MPLS option 10B is used for connectivity between Network Fabric and Network Fabric Controller True
importRouteTargets Route targets are now defined for specific IP subnet class, such as IPv4 and IPv6. Values of import route targets to be configured on CEs for exchanging routes between CE & PE via MPLS option 10B, e.g., 65048:10039 True(If OptionB enabled)
exportRouteTargets Route targets are now defined for specific IP subnet class, such as IPv4 and IPv6. Values of export route targets to be configured on CEs for exchanging routes between CE & PE via MPLS option 10B e.g., 65048:10039 True(If OptionB enabled)
workloadVpnConfiguration Details of workload VPN connection between Network Fabric and workload services in Network Fabric Controller
optionBProperties Details of MPLS option 10B is used for connectivity between Network Fabric and Network Fabric Controller
importRouteTargets Route targets are now defined for specific IP subnet class, such as IPv4 and IPv6. Values of import route targets to be configured on CEs for exchanging routes between CE & PE via MPLS option 10B e.g., 65048:10050 True(If OptionB enabled)
exportRouteTargets Route targets are now defined for specific IP subnet class, such as IPv4 and IPv6. Values of export route targets to be configured on CEs for exchanging routes between CE & PE via MPLS option 10B e.g., 65048:10050 True(If OptionB enabled)
ts-config Terminal Server Configuration Details True
primaryIpv4Prefix The terminal server Net1 interface should be assigned the first usable IP from the prefix and the corresponding interface on PE should be assigned the second usable address 20.0.10.0/30, TS Net1 interface should be assigned 20.0.10.1 and PE interface 20.0.10.2 True
secondaryIpv4Prefix IPv4 Prefix for connectivity between TS and PE2. The terminal server Net2 interface should be assigned the first usable IP from the prefix and the corresponding interface on PE should be assigned the second usable address 20.0.0.4/30, TS Net2 interface should be assigned 20.0.10.5 and PE interface 20.0.10.6 True
username Username configured on the terminal server that the services use to configure TS username True
password Password configured on the terminal server that the services use to configure TS password True
serialNumber Serial number of Terminal Server SN of the Terminal Server

Create a Network Fabric

Resource group must be created before Network Fabric creation. It's recommended to create a separate resource group for each Network Fabric. Resource group can be created by the following command:

az group create -n NFResourceGroup -l "East US"

Run the following command to create the Network Fabric:


az networkfabric fabric create \ 
--resource-group "NFResourceGroupName" 
--location "<Location>" \
--resource-name "NFName" \
--nf-sku "NFSKU" \
--nfc-id "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroupName/providers/Microsoft.ManagedNetworkFabric/networkFabricControllers/NFCName" 
--fabric-asn 65048 
--ipv4-prefix 10.2.0.0/19 
--ipv6-prefix fda0:d59c:da02::/59 
--rack-count 4
--server-count-per-rack 8
--ts-config '{"primaryIpv4Prefix":"20.0.1.0/30", "secondaryIpv4Prefix":"20.0.0.0/30", "username":"****", "password": "****", "serialNumber":"TerminalServerSerialNumber"}' 
--managed-network-config '{"infrastructureVpnConfiguration":{"peeringOption":"OptionB","optionBProperties":{"routeTargets": {"importIpv4RouteTargets":["65048:10039"], "importIpv6RouteTargets":["65048:10039"], "exportIpv4RouteTargets":["65048:10039"], "exportIpv6RouteTargets":["65048:10039"]}}},"workloadVpnConfiguration":{"peeringOption":"OptionB","optionBProperties":{"routeTargets": {"importIpv4RouteTargets":["65048:10050"], "importIpv6RouteTargets":["65048:10039"], "exportIpv4RouteTargets":["65048:10039"], "exportIpv6RouteTargets":["65048:10039"]}}}}

Note

  • if it's a four racks set up then the rack count would be 4
  • if it's an eight rack set up then the rack count would be 8

Expected output:

{
  "id": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/microsoft.managednetworkfabric/networkfabrics/NFName",
  "name": "NFName",
  "type": "microsoft.managednetworkfabric/networkfabrics",
  "location": "<Location>",
  "systemData": {
    "createdBy": "97fdd529-68de-4ba5-aa3c-adf86bd564bf",
    "createdByType": "Application",
    "createdAt": "2023-XX-XXT18:29:58.3785568Z",
    "lastModifiedBy": "97fdd529-68de-4ba5-aa3c-adf86bd564bf",
    "lastModifiedByType": "Application",
    "lastModifiedAt": "2023-XX-XXT18:29:58.3785568Z"
  },
  "properties": {
    "fabricVersion": "1.0.0",
    "networkFabricSku": "NFSKU",
    "networkFabricControllerId": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFCResourceGroup/providers/microsoft.managednetworkfabric/networkfabriccontrollers/NFCName",
    "terminalServerConfiguration": {
      "username": "XXXX",
      "serialNumber": "TerminalServerSerialNumber",
      "primaryIpv4Prefix": "20.0.1.0/30",
      "secondaryIpv4Prefix": "20.0.0.0/30"
    },
    "managementNetworkConfiguration": {
      "infrastructureVpnConfiguration": {
        "administrativeState": "Enabled",
        "peeringOption": "OptionB",
        "optionBProperties": {
            "routeTargets": {
            "importIpv4RouteTargets": [
              "65048:10039"
            ],
            "importIpv6RouteTargets": [
              "65048:10039"
            ],
            "exportIpv4RouteTargets": [
              "65048:10039"
            ],
            "exportIpv6RouteTargets": [
              "65048:10039"
            ]
          }
        }
      },
      "workloadVpnConfiguration": {
        "administrativeState": "Enabled",
        "peeringOption": "OptionB",
        "optionBProperties": {
            "routeTargets": {
            "importIpv4RouteTargets": [
              "65048:10039"
            ],
            "importIpv6RouteTargets": [
              "65048:10039"
            ],
            "exportIpv4RouteTargets": [
              "65048:10039"
            ],
            "exportIpv6RouteTargets": [
              "65048:10039"
            ]
          }
        }
      }
    },
    "provisioningState": "Updating",
    "rackCount": 4,
    "serverCountPerRack": 8,
    "ipv4Prefix": "10.30.0.0/19",
    "ipv6Prefix": "fda0:d59c:df02::/59",
    "fabricASN": 65048
  }
}


Show Network Fabric

az networkfarbic fabric show --resource-group "NFResourceGroupName" --resource-name "NFName"

Expected output:


{
  "configurationState": "Provisioned",
  "fabricASN": 65048,
  "fabricVersion": "1.0.0",
  "id": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/microsoft.managednetworkfabric/networkfabrics/NFName",
  "ipv4Prefix": "10.2.0.0/19",
  "ipv6Prefix": "fda0:d59c:df02::/59",
  "l2IsolationDomains": [],
  "l3IsolationDomains": [],
  "location": "<Location>",
  "managementNetworkConfiguration": {
    "infrastructureVpnConfiguration": {
      "administrativeState": "Enabled",
      "optionBProperties": {
          "routeTargets": {
          "exportIpv4RouteTargets": [
            "65048:10039"
          ],
          "exportIpv6RouteTargets": [
            "65048:10039"
          ],
          "importIpv4RouteTargets": [
            "65048:10039"
          ],
          "importIpv6RouteTargets": [
            "65048:10039"
          ]
        }
      },
      "peeringOption": "OptionB"
    },
    "workloadVpnConfiguration": {
      "administrativeState": "Enabled",
      "optionBProperties": {
          "routeTargets": {
          "exportIpv4RouteTargets": [
            "65048:10039"
          ],
          "exportIpv6RouteTargets": [
            "65048:10039"
          ],
          "importIpv4RouteTargets": [
            "65048:10039"
          ],
          "importIpv6RouteTargets": [
            "65048:10039"
          ]
        }
      },
      "peeringOption": "OptionB"
    }
  },
  "name": "NFName",
  "networkFabricControllerId": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFCResourceGroupName/providers/microsoft.managednetworkfabric/networkfabriccontrollers/NFCName",
  "networkFabricSku": "NFSKU",
  "provisioningState": "Succeeded",
  "rackCount": 4,
  "racks": [
    "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourcegroups/NFResourceGroup/providers/microsoft.managednetworkfabric/networkracks/NFName-aggrack",
    "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourcegroups/NFResourceGroup/providers/microsoft.managednetworkfabric/networkracks/NFName-comprack1",
    "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourcegroups/NFResourceGroup/providers/microsoft.managednetworkfabric/networkracks/NFName-comprack2",
    "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourcegroups/NFResourceGroup/providers/microsoft.managednetworkfabric/networkracks/NFName-comprack3",
    "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourcegroups/NFResourceGroup/providers/microsoft.managednetworkfabric/networkracks/NFName-comprack4"
  ],
  "resourceGroup": "NFResourceGroup",
  "serverCountPerRack": 8,
  "systemData": {
    "createdAt": "2023-XX-XXT18:29:58.3785568Z",
    "createdBy": "97fdd529-68de-4ba5-aa3c-adf86bd564bf",
    "createdByType": "Application",
    "lastModifiedAt": "2023-XX-XXT04:32:02.7129198Z",
    "lastModifiedBy": "d1bd24c7-b27f-477e-86dd-939e107873d7",
    "lastModifiedByType": "Application"
  },
  "terminalServerConfiguration": {
    "primaryIpv4Prefix": "20.0.1.0/30",
    "secondaryIpv4Prefix": "20.0.0.0/30",
    "serialNumber": "TerminalServerSerialNumber",
    "username": "XXXX"
  },
  "type": "microsoft.managednetworkfabric/networkfabrics"
}

List all Network Fabrics in a resource group

az networkfabric fabric list --resource-group "NFResourceGroup"  

Expected output:

{
  "configurationState": "Provisioned",
  "fabricASN": 65048,
  "fabricVersion": "1.0.0",
  "id": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/microsoft.managednetworkfabric/networkfabrics/NFName",
  "ipv4Prefix": "10.2.0.0/19",
  "ipv6Prefix": "fda0:d59c:df02::/59",
  "l2IsolationDomains": [],
  "l3IsolationDomains": [],
  "location": "<Location>",
  "managementNetworkConfiguration": {
    "infrastructureVpnConfiguration": {
      "administrativeState": "Enabled",
      "optionBProperties": {
          "routeTargets": {
          "exportIpv4RouteTargets": [
            "65048:10039"
          ],
          "exportIpv6RouteTargets": [
            "65048:10039"
          ],
          "importIpv4RouteTargets": [
            "65048:10039"
          ],
          "importIpv6RouteTargets": [
            "65048:10039"
          ]
        }
      },
      "peeringOption": "OptionB"
    },
    "workloadVpnConfiguration": {
      "administrativeState": "Enabled",
      "optionBProperties": {
          "routeTargets": {
          "exportIpv4RouteTargets": [
            "65048:10039"
          ],
          "exportIpv6RouteTargets": [
            "65048:10039"
          ],
          "importIpv4RouteTargets": [
            "65048:10039"
          ],
          "importIpv6RouteTargets": [
            "65048:10039"
          ]
        }
      },
      "peeringOption": "OptionB"
    }
  },
  "name": "NFName",
  "networkFabricControllerId": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFCResourceGroupName/providers/microsoft.managednetworkfabric/networkfabriccontrollers/NFCName",
  "networkFabricSku": "NFSKU",
  "provisioningState": "Succeeded",
  "rackCount": 4,
  "racks": [
    "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourcegroups/NFResourceGroup/providers/microsoft.managednetworkfabric/networkracks/NFName-aggrack",
    "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourcegroups/NFResourceGroup/providers/microsoft.managednetworkfabric/networkracks/NFName-comprack1",
    "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourcegroups/NFResourceGroup/providers/microsoft.managednetworkfabric/networkracks/NFName-comprack2",
    "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourcegroups/NFResourceGroup/providers/microsoft.managednetworkfabric/networkracks/NFName-comprack3",
    "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourcegroups/NFResourceGroup/providers/microsoft.managednetworkfabric/networkracks/NFName-comprack4"
  ],
  "resourceGroup": "NFResourceGroup",
  "serverCountPerRack": 8,
  "systemData": {
    "createdAt": "2023-XX-XXT18:29:58.3785568Z",
    "createdBy": "97fdd529-68de-4ba5-aa3c-adf86bd564bf",
    "createdByType": "Application",
    "lastModifiedAt": "2023-XX-XXT04:32:02.7129198Z",
    "lastModifiedBy": "d1bd24c7-b27f-477e-86dd-939e107873d7",
    "lastModifiedByType": "Application"
  },
  "terminalServerConfiguration": {
    "primaryIpv4Prefix": "20.0.1.0/30",
    "secondaryIpv4Prefix": "20.0.0.0/30",
    "serialNumber": "TerminalServerSerialNumber",
    "username": "XXXX"
  },
  "type": "microsoft.managednetworkfabric/networkfabrics"
}  

Configure an NNI

The following table specifies parameters used to create Network-to-Network Interconnect.

Parameter Description Example Required Type
isMangementType Configuration to make NNI to be used for management of Fabric. Default value is true. Possible values are True/False True True
useOptionB Configuration to enable optionB. Possible values are True/False True True
layer2Configuration Layer 2 configuration
portCount Number of ports that are part of the port-channel. Maximum value is based on Fabric SKU 3
mtu Maximum transmission unit between CE and PE. 1500
layer3Configuration Layer 3 configuration between CEs and PEs True
primaryIpv4Prefix IPv4 Prefix for connectivity between CE1 and PE1. CE1 port-channel interface is assigned the first usable IP from the prefix and the corresponding interface on PE1 should be assigned the second usable address 10.246.0.124/31, CE1 port-channel interface is assigned 10.246.0.125 and PE1 port-channel interface should be assigned 10.246.0.126 String
secondaryIpv4Prefix IPv4 Prefix for connectivity between CE2 and PE2. CE2 port-channel interface is assigned the first usable IP from the prefix and the corresponding interface on PE2 should be assigned the second usable address 10.246.0.128/31, CE2 port-channel interface should be assigned 10.246.0.129 and PE2 port-channel interface 10.246.0.130 String
primaryIpv6Prefix IPv6 Prefix for connectivity between CE1 and PE1. CE1 port-channel interface is assigned the first usable IP from the prefix and the corresponding interface on PE1 should be assigned the second usable address 3FFE:FFFF:0:CD30::a1 is assigned to CE1 and 3FFE:FFFF:0:CD30::a2 is assigned to PE1. Default value is 3FFE:FFFF:0:CD30::a0/127 String
secondaryIpv6Prefix IPv6 Prefix for connectivity between CE2 and PE2. CE2 port-channel interface is assigned the first usable IP from the prefix and the corresponding interface on PE2 should be assigned the second usable address 3FFE:FFFF:0:CD30::a5 is assigned to CE2 and 3FFE:FFFF:0:CD30::a6 is assigned to PE2. Default value is 3FFE:FFFF:0:CD30::a4/127. String
fabricAsn ASN number assigned on CE for BGP peering with PE 65048
peerAsn ASN number assigned on PE for BGP peering with CE. For iBGP between PE/CE, the value should be same as fabricAsn, for eBGP the value should be different from fabricAsn 65048 True
fabricAsn ASN number assigned on CE for BGP peering with PE 65048
vlan-Id Vlan for NNI.Range is between 501-4095 501
importRoutePolicy Details to import route policy.
exportRoutePolicy Details to export route policy.
nni-type The default value is CE. CE and NPB are the options CE, PE

Create a Network to Network Interconnect (NNI)

Resource group & Network Fabric must be created before Network to Network Interconnect creation.

Run the following command to create the Network to Network Interconnect (Default nni type is CE):


az networkfabric nni create \
--resource-group "NFResourceGroup" \
--location "<Location>" \
--resource-name "NFNNIName" \
--fabric "NFFabric" \
--is-management-type "True" \
--use-option-b "False" \
--layer2-configuration '{"portCount": 3, "mtu": 1500}' \
--layer3-configuration '{"peerASN": 65048, "vlanId": 501, "primaryIpv4Prefix": "10.2.0.124/30", "secondaryIpv4Prefix": "10.2.0.128/30", "primaryIpv6Prefix": "10:2:0:124::400/127", "secondaryIpv6Prefix": "10:2:0:124::402/127"}'

Expected output:

{
  "id": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroupName/providers/microsoft.managednetworkfabric/networkfabrics/NFName/networkToNetworkInterconnects/NFNNIName",
  "name": "NFNNIName",
  "type": "microsoft.managednetworkfabric/networkfabrics/networktonetworkinterconnects",
  "systemData": {
    "createdBy": "97fdd529-68de-4ba5-aa3c-adf86bd564bf",
    "createdByType": "Application",
    "createdAt": "2023-XX-XXT18:30:14.613498Z",
    "lastModifiedBy": "97fdd529-68de-4ba5-aa3c-adf86bd564bf",
    "lastModifiedByType": "Application",
    "lastModifiedAt": "2023-XX-XXT18:30:14.613498Z"
  },
  "properties": {
    "administrativeState": "Enabled",
    "nniType": "CE",
    "isManagementType": "True",
    "useOptionB": "False",
    "layer2Configuration": {
      "mtu": 1500
    },
    "optionBLayer3Configuration": {
      "peerASN": 65050,
      "vlanId": 501,
      "fabricASN": 0,
      "primaryIpv4Prefix": "10.2.0.124/30",
      "primaryIpv6Prefix": "10:2:0:124::400/127"
      "secondaryIpv4Prefix": "10.2.0.128/30"
      "secondaryIpv6Prefix": "10:2:0:124::402/127"
    },
    "provisioningState": "Accepted",
    "configurationState": "Succeeded"
  }
}

Show Network Fabric NNIs (Network to Network Interface)

az networkfabric nni show -g "NFResourceGroup" --resource-name "NFNNIName" --fabric "NFFabric"

Expected output:

{
  "administrativeState": "Enabled",
  "configurationState": "Succeeded",
  "id": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroupName/providers/microsoft.managednetworkfabric/networkfabrics/NFName/networkToNetworkInterconnects/NFNNIName",
  "isManagementType": "True",
  "layer2Configuration": {
    "mtu": 1500
  },
  "name": "nffab2lab180723-nni",
  "nniType": "CE",
  "optionBLayer3Configuration": {
    "fabricASN": 0,
    "peerASN": 65050,
    "primaryIpv4Prefix": "10.2.0.124/30",
    "primaryIpv6Prefix": "10:2:0:124::400/127"
    "secondaryIpv4Prefix": "10.2.0.128/30"
    "secondaryIpv6Prefix": "10:2:0:124::402/127"
    "vlanId": 501
  },
  "provisioningState": "Succeeded",
  "resourceGroup": "NFResourceGroupName",
  "systemData": {
    "createdAt": "2023-XX-XXT18:30:14.613498Z",
    "createdBy": "97fdd529-68de-4ba5-aa3c-adf86bd564bf",
    "createdByType": "Application",
    "lastModifiedAt": "2023-XX-XXT18:30:14.613498Z",
    "lastModifiedBy": "97fdd529-68de-4ba5-aa3c-adf86bd564bf",
    "lastModifiedByType": "Application"
  },
  "type": "microsoft.managednetworkfabric/networkfabrics/networktonetworkinterconnects",
  "useOptionB": "False"
}

List or Get Network Fabric NNI (Network to Network Interface)

az networkfabric nni list -g NFResourceGroup --fabric NFFabric

Expected output:

{
  "administrativeState": "Enabled",
  "configurationState": "Succeeded",
  "id": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroupName/providers/microsoft.managednetworkfabric/networkfabrics/NFName/networkToNetworkInterconnects/NFNNIName",
  "isManagementType": "True",
  "layer2Configuration": {
    "mtu": 1500
  },
  "name": "nffab2lab180723-nni",
  "nniType": "CE",
  "optionBLayer3Configuration": {
    "fabricASN": 0,
    "peerASN": 65050,
    "primaryIpv4Prefix": "10.2.0.124/30",
    "primaryIpv6Prefix": "10:2:0:124::400/127"
    "secondaryIpv4Prefix": "10.2.0.128/30"
    "secondaryIpv6Prefix": "10:2:0:124::402/127"
    "vlanId": 501
  },
  "provisioningState": "Succeeded",
  "resourceGroup": "NFResourceGroupName",
  "systemData": {
    "createdAt": "2023-XX-XXT18:30:14.613498Z",
    "createdBy": "97fdd529-68de-4ba5-aa3c-adf86bd564bf",
    "createdByType": "Application",
    "lastModifiedAt": "2023-XX-XXT18:30:14.613498Z",
    "lastModifiedBy": "97fdd529-68de-4ba5-aa3c-adf86bd564bf",
    "lastModifiedByType": "Application"
  },
  "type": "microsoft.managednetworkfabric/networkfabrics/networktonetworkinterconnects",
  "useOptionB": "False"
}

Next Steps

  • Update the serial number in the networkDevice resource with the actual serial number on the device. The device sends the serial number as part of DHCP request.
  • Configure the terminal server with the serial numbers of all the devices (which also hosts DHCP server)
  • Provision the network devices via zero-touch provisioning mode, Based on the serial number in the DHCP request, the DHCP server responds with the boot configuration file for the corresponding device

Update Network Fabric Devices

Run the following command to update Network Fabric Devices:


az networkfabric device update \
--resource-group "NFResourceGroup" \
--resource-name "Network-Device-Name" \
--host-name "example-hostname" \
--serial-number "xxxx"

Expected output:

{
  "id": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkDevices/Network-Device-Name",
  "name": "Network-Device-Name",
  "type": "microsoft.managednetworkfabric/networkdevices",
  "location": "<Location>",
  "systemData": {
    "createdBy": "d1bd24c7-b27f-477e-86dd-939e107873d7",
    "createdByType": "Application",
    "createdAt": "2023-XX-XXT18:30:03.11544Z",
    "lastModifiedBy": "97fdd529-68de-4ba5-aa3c-adf86bd564bf",
    "lastModifiedByType": "Application",
    "lastModifiedAt": "2023-XX-XXT18:30:29.1296291Z"
  },
  "properties": {
    "networkRackId": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkRacks/Network-Device-Name",
    "networkDeviceSku": "DefaultSku",
    "networkDeviceRole": "XX",
    "hostName": "example-hostname",
    "serialNumber": "AXXXX;DCS-XXXXX-24;XX.XX;JXXXXXXX",
    "version": "",
    "configurationState": "Succeeded",
    "administrativeState": "Enabled",
    "provisioningState": "Succeeded"
  }

Note

The The preceding code serves only as an example. You should update all the devices that are part of both AggrRack and computeRacks

For example, AggrRack consists of:

  • CE01
  • CE02
  • TOR17
  • TOR18
  • MgmtSwitch01
  • MgmtSwitch02 (and so on, for other switches)

List or Get Network Fabric Devices

Run the following command to list Network Fabric devices in a resource group:

az networkfabric device list --resource-group "NFResourceGroup"

Expected output:

[
  {
    "administrativeState": "Enabled",
    "configurationState": "Succeeded",
    "hostName": "example-hostname",
    "id": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkDevices/Network-Device-Name",
    "location": "<Location>",
    "name": "Network-Device-Name",
    "networkDeviceRole": "CE",
    "networkDeviceSku": "DefaultSku",
    "networkRackId": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkRacks/Network-Device-Name-aggrack",
    "provisioningState": "Succeeded",
    "resourceGroup": "NFResourceGroup",
    "serialNumber": "AXXXX;DCS-XXXXX-24;XX.XX;JXXXXXXX",
    "systemData": {
      "createdAt": "2023-XX-XXT18:30:00.5266816Z",
      "createdBy": "d1bd24c7-b27f-477e-86dd-939e107873d7",
      "createdByType": "Application",
      "lastModifiedAt": "2023-XX-XXT18:30:23.2231751Z",
      "lastModifiedBy": "97fdd529-68de-4ba5-aa3c-adf86bd564bf",
      "lastModifiedByType": "Application"
    },
    "type": "microsoft.managednetworkfabric/networkdevices",
    "version": ""
  },
  {
    "administrativeState": "Enabled",
    "configurationState": "Succeeded",
    "hostName": "AR-MGMT2",
    "id": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkDevices/Network-Device-Name",
    "location": "<Location>",
    "name": "Network-Device-Name",
    "networkDeviceRole": "TS",
    "networkDeviceSku": "DefaultSku",
    "networkRackId": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkRacks/Network-Device-Name-aggrack",
    "provisioningState": "Succeeded",
    "resourceGroup": "NFResourceGroup",
    "serialNumber": "AXXXX;DCS-XXXXX-24;XX.XX;JXXXXXXX",
    "systemData": {
      "createdAt": "2023-XX-XXT18:30:00.727495Z",
      "createdBy": "d1bd24c7-b27f-477e-86dd-939e107873d7",
      "createdByType": "Application",
      "lastModifiedAt": "2023-XX-XXT18:30:33.7864881Z",
      "lastModifiedBy": "97fdd529-68de-4ba5-aa3c-adf86bd564bf",
      "lastModifiedByType": "Application"
    },
    "type": "microsoft.managednetworkfabric/networkdevices",
    "version": ""
  },
  {
    "administrativeState": "Enabled",
    "configurationState": "Succeeded",
    "hostName": "example-hostname",
    "id": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkDevices/Network-Device-Name",
    "location": "<Location>",
    "name": "Network-Device-Name",
    "networkDeviceRole": "NPB",
    "networkDeviceSku": "DefaultSku",
    "networkRackId": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkRacks/Network-Device-Name-aggrack",
    "provisioningState": "Succeeded",
    "resourceGroup": "NFResourceGroup",
    "serialNumber": "AXXXX;DCS-XXXXX-24;XX.XX;JXXXXXXX",
    "systemData": {
      "createdAt": "2023-XX-XXT18:30:00.7582997Z",
      "createdBy": "d1bd24c7-b27f-477e-86dd-939e107873d7",
      "createdByType": "Application",
      "lastModifiedAt": "2023-XX-XXT18:30:34.9110792Z",
      "lastModifiedBy": "97fdd529-68de-4ba5-aa3c-adf86bd564bf",
      "lastModifiedByType": "Application"
    },
    "type": "microsoft.managednetworkfabric/networkdevices",
    "version": ""
  },
  {
    "administrativeState": "Enabled",
    "configurationState": "Succeeded",
    "hostName": "example-hostname",
    "id": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkDevices/Network-Device-Name",
    "location": "<Location>",
    "name": "Network-Device-Name",
    "networkDeviceRole": "CE",
    "networkDeviceSku": "DefaultSku",
    "networkRackId": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkRacks/Network-Device-Name-aggrack",
    "provisioningState": "Succeeded",
    "resourceGroup": "NFResourceGroup",
    "serialNumber": "AXXXX;DCS-XXXXX-24;XX.XX;JXXXXXXX",
    "systemData": {
      "createdAt": "2023-XX-XXT18:30:00.7210136Z",
      "createdBy": "d1bd24c7-b27f-477e-86dd-939e107873d7",
      "createdByType": "Application",
      "lastModifiedAt": "2023-XX-XXT18:30:24.426339Z",
      "lastModifiedBy": "97fdd529-68de-4ba5-aa3c-adf86bd564bf",
      "lastModifiedByType": "Application"
    },
    "type": "microsoft.managednetworkfabric/networkdevices",
    "version": ""
  },
  {
    "administrativeState": "Enabled",
    "configurationState": "Succeeded",
    "hostName": "example-hostname",
    "id": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkDevices/Network-Device-Name",
    "location": "<Location>",
    "name": "Network-Device-Name",
    "networkDeviceRole": "TS",
    "networkDeviceSku": "DefaultSku",
    "networkRackId": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkRacks/Network-Device-Name-aggrack",
    "provisioningState": "Succeeded",
    "resourceGroup": "NFResourceGroup",
    "serialNumber": "AXXXX;DCS-XXXXX-24;XX.XX;JXXXXXXX",
    "systemData": {
      "createdAt": "2023-XX-XXT18:30:00.7722959Z",
      "createdBy": "d1bd24c7-b27f-477e-86dd-939e107873d7",
      "createdByType": "Application",
      "lastModifiedAt": "2023-XX-XXT18:30:25.7076346Z",
      "lastModifiedBy": "97fdd529-68de-4ba5-aa3c-adf86bd564bf",
      "lastModifiedByType": "Application"
    },
    "type": "microsoft.managednetworkfabric/networkdevices",
    "version": ""
  },
  {
    "administrativeState": "Enabled",
    "configurationState": "Succeeded",
    "hostName": "example-hostname",
    "id": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkDevices/Network-Device-Name",
    "location": "<Location>",
    "name": "Network-Device-Name",
    "networkDeviceRole": "ToR",
    "networkDeviceSku": "DefaultSku",
    "networkRackId": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkRacks/nffab2lab180723-comprack1",
    "provisioningState": "Succeeded",
    "resourceGroup": "NFResourceGroup",
    "serialNumber": "AXXXX;DCS-XXXXX-24;XX.XX;JXXXXXXX",
    "systemData": {
      "createdAt": "2023-XX-XXT18:30:03.0049164Z",
      "createdBy": "d1bd24c7-b27f-477e-86dd-939e107873d7",
      "createdByType": "Application",
      "lastModifiedAt": "2023-XX-XXT18:30:28.0046231Z",
      "lastModifiedBy": "97fdd529-68de-4ba5-aa3c-adf86bd564bf",
      "lastModifiedByType": "Application"
    },
    "type": "microsoft.managednetworkfabric/networkdevices",
    "version": ""
  },
  {
    "administrativeState": "Enabled",
    "configurationState": "Succeeded",
    "hostName": "example-hostname",
    "id": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkDevices/Network-Device-Name",
    "location": "<Location>",
    "name": "Network-Device-Name",
    "networkDeviceRole": "TS",
    "networkDeviceSku": "DefaultSku",
    "networkRackId": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkRacks/nffab2lab180723-comprack1",
    "provisioningState": "Succeeded",
    "resourceGroup": "NFResourceGroup",
    "serialNumber": "AXXXX;DCS-XXXXX-24;XX.XX;JXXXXXXX",
    "systemData": {
      "createdAt": "2023-XX-XXT18:30:03.11544Z",
      "createdBy": "d1bd24c7-b27f-477e-86dd-939e107873d7",
      "createdByType": "Application",
      "lastModifiedAt": "2023-XX-XXT18:30:29.1296291Z",
      "lastModifiedBy": "97fdd529-68de-4ba5-aa3c-adf86bd564bf",
      "lastModifiedByType": "Application"
    },
    "type": "microsoft.managednetworkfabric/networkdevices",
    "version": ""
  },
  {
    "administrativeState": "Enabled",
    "configurationState": "Succeeded",
    "hostName": "example-hostname",
    "id": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkDevices/Network-Device-Name",
    "location": "<Location>",
    "name": "Network-Device-Name",
    "networkDeviceRole": "ToR",
    "networkDeviceSku": "DefaultSku",
    "networkRackId": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkRacks/nffab2lab180723-comprack1",
    "provisioningState": "Succeeded",
    "resourceGroup": "NFResourceGroup",
    "serialNumber": "AXXXX;DCS-XXXXX-24;XX.XX;JXXXXXXX",
    "systemData": {
      "createdAt": "2023-XX-XXT18:30:03.1893834Z",
      "createdBy": "d1bd24c7-b27f-477e-86dd-939e107873d7",
      "createdByType": "Application",
      "lastModifiedAt": "2023-XX-XXT18:30:26.7545474Z",
      "lastModifiedBy": "97fdd529-68de-4ba5-aa3c-adf86bd564bf",
      "lastModifiedByType": "Application"
    },
    "type": "microsoft.managednetworkfabric/networkdevices",
    "version": ""
  },
  {
    "administrativeState": "Enabled",
    "configurationState": "Succeeded",
    "hostName": "example-hostname",
    "id": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkDevices/Network-Device-Name",
    "location": "<Location>",
    "name": "Network-Device-Name",
    "networkDeviceRole": "ToR",
    "networkDeviceSku": "DefaultSku",
    "networkRackId": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkRacks/nffab2lab180723-comprack2",
    "provisioningState": "Succeeded",
    "resourceGroup": "NFResourceGroup",
    "serialNumber": "AXXXX;DCS-XXXXX-24;XX.XX;JXXXXXXX",
    "systemData": {
      "createdAt": "2023-XX-XXT18:30:05.4237868Z",
      "createdBy": "d1bd24c7-b27f-477e-86dd-939e107873d7",
      "createdByType": "Application",
      "lastModifiedAt": "2023-XX-XXT18:30:31.5047457Z",
      "lastModifiedBy": "97fdd529-68de-4ba5-aa3c-adf86bd564bf",
      "lastModifiedByType": "Application"
    },
    "type": "microsoft.managednetworkfabric/networkdevices",
    "version": ""
  },
  {
    "administrativeState": "Enabled",
    "configurationState": "Succeeded",
    "hostName": "example-hostname",
    "id": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkDevices/Network-Device-Name",
    "location": "<Location>",
    "name": "Network-Device-Name",
    "networkDeviceRole": "TS",
    "networkDeviceSku": "DefaultSku",
    "networkRackId": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkRacks/nffab2lab180723-comprack2",
    "provisioningState": "Succeeded",
    "resourceGroup": "NFResourceGroup",
    "serialNumber": "AXXXX;DCS-XXXXX-24;XX.XX;JXXXXXXX",
    "systemData": {
      "createdAt": "2023-XX-XXT18:30:05.4580643Z",
      "createdBy": "d1bd24c7-b27f-477e-86dd-939e107873d7",
      "createdByType": "Application",
      "lastModifiedAt": "2023-XX-XXT18:30:32.6766268Z",
      "lastModifiedBy": "97fdd529-68de-4ba5-aa3c-adf86bd564bf",
      "lastModifiedByType": "Application"
    },
    "type": "microsoft.managednetworkfabric/networkdevices",
    "version": ""
  },
  {
    "administrativeState": "Enabled",
    "configurationState": "Succeeded",
    "hostName": "example-hostname",
    "id": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkDevices/Network-Device-Name",
    "location": "<Location>",
    "name": "Network-Device-Name",
    "networkDeviceRole": "ToR",
    "networkDeviceSku": "DefaultSku",
    "networkRackId": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkRacks/nffab2lab180723-comprack2",
    "provisioningState": "Succeeded",
    "resourceGroup": "NFResourceGroup",
    "serialNumber": "AXXXX;DCS-XXXXX-24;XX.XX;JXXXXXXX",
    "systemData": {
      "createdAt": "2023-XX-XXT18:30:05.4906233Z",
      "createdBy": "d1bd24c7-b27f-477e-86dd-939e107873d7",
      "createdByType": "Application",
      "lastModifiedAt": "2023-XX-XXT18:30:30.4265486Z",
      "lastModifiedBy": "97fdd529-68de-4ba5-aa3c-adf86bd564bf",
      "lastModifiedByType": "Application"
    },
    "type": "microsoft.managednetworkfabric/networkdevices",
    "version": ""
  }
]

Run the following command to Get or Show details of a Network Fabric Device:

az networkfabric device show --resource-group "NFResourceGroup" --resource-name "Network-Device-Name"

Expected output:

{
  "administrativeState": "Enabled",
  "configurationState": "Succeeded",
  "hostName": "example-hostname",
  "id": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkDevices/Network-Device-Name",
  "location": "<Location>",
  "name": "Network-Device-Name",
  "networkDeviceRole": "ToR",
  "networkDeviceSku": "DefaultSku",
  "networkRackId": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkRacks/nffab2lab180723-comprack2",
  "provisioningState": "Succeeded",
  "resourceGroup": "NFResourceGroup",
  "serialNumber": "AXXXX;DCS-XXXXX-24;XX.XX;JXXXXXXX",
  "systemData": {
    "createdAt": "2023-XX-XXT18:30:05.4906233Z",
    "createdBy": "d1bd24c7-b27f-477e-86dd-939e107873d7",
    "createdByType": "Application",
    "lastModifiedAt": "2023-XX-XXT18:30:30.4265486Z",
    "lastModifiedBy": "97fdd529-68de-4ba5-aa3c-adf86bd564bf",
    "lastModifiedByType": "Application"
  },
  "type": "microsoft.managednetworkfabric/networkdevices",
  "version": ""
}

Provision a Network Fabric

After you update the device serial number, provision and show the fabric by running the following commands:

az networkfabric fabric provision --resource-group "NFResourceGroup"  --resource-name "NFName"
az networkfabric fabric show --resource-group "NFResourceGroup"  --resource-name "NFName"

Expected output:

{
  "configurationState": "Provisioned",
  "fabricASN": 65048,
  "fabricVersion": "1.0.0",
  "id": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/microsoft.managednetworkfabric/networkfabrics/NFName",
  "ipv4Prefix": "10.2.0.0/19",
  "ipv6Prefix": "fda0:d59c:df02::/59",
  "l2IsolationDomains": [],
  "l3IsolationDomains": [],
  "location": "<Location>",
  "managementNetworkConfiguration": {
    "infrastructureVpnConfiguration": {
      "administrativeState": "Enabled",
          "routeTargets": {
          "exportIpv4RouteTargets": [
            "65048:10039"
          ],
          "exportIpv6RouteTargets": [
            "65048:10039"
          ],
          "importIpv4RouteTargets": [
            "65048:10039"
          ],
          "importIpv6RouteTargets": [
            "65048:10039"
          ]
        }
      },
      "peeringOption": "OptionB"
    },
    "workloadVpnConfiguration": {
      "administrativeState": "Enabled",
      "optionBProperties": {
          "routeTargets": {
          "exportIpv4RouteTargets": [
            "65048:10050"
          ],
          "exportIpv6RouteTargets": [
            "65048:10050"
          ],
          "importIpv4RouteTargets": [
            "65048:10050"
          ],
          "importIpv6RouteTargets": [
            "65048:10050"
          ]
        }
      },
      "peeringOption": "OptionB"
    }
  },
  "name": "NFName",
  "networkFabricControllerId": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFCResourceGroup/providers/microsoft.managednetworkfabric/networkfabriccontrollers/NFCName",
  "networkFabricSku": "NFSKU",
  "provisioningState": "Succeeded",
  "rackCount": 4,
  "racks": [
    "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFCResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkRacks/NFName-aggrack",
    "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFCResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkRacks/NFName-comprack1",
    "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFCResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkRacks/NFName-comprack2",
    "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFCResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkRacks/NFName-comprack3",
    "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFCResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkRacks/NFName-comprack4"
  ],
  "resourceGroup": "NFResourceGroup",
  "serverCountPerRack": 8,
  "systemData": {
    "createdAt": "2023-XX-XXT18:29:58.3785568Z",
    "createdBy": "97fdd529-68de-4ba5-aa3c-adf86bd564bf",
    "createdByType": "Application",
    "lastModifiedAt": "2023-XX-XXT04:32:02.7129198Z",
    "lastModifiedBy": "d1bd24c7-b27f-477e-86dd-939e107873d7",
    "lastModifiedByType": "Application"
  },
  "terminalServerConfiguration": {
    "primaryIpv4Prefix": "20.0.1.0/30",
    "secondaryIpv4Prefix": "20.0.0.0/30",
    "serialNumber": "XXXXXXXXXXXXXX",
    "username": "XXXX"
  },
  "type": "microsoft.managednetworkfabric/networkfabrics"
}

Deprovision a Fabric

To deprovision a fabric, ensure that the fabric is in a provisioned operational state, stop the dhcp service on the terminal server, and then run this command:

az networkfabric fabric deprovision --resource-group "NFResourceGroup" --resource-name "NFName"

Expected output:

{
  "configurationState": "Deprovisioned",
  "fabricASN": 65048,
  "fabricVersion": "1.0.0",
  "id": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/microsoft.managednetworkfabric/networkfabrics/NFName",
  "ipv4Prefix": "10.2.0.0/19",
  "ipv6Prefix": "fda0:d59c:df02::/59",
  "l2IsolationDomains": [],
  "l3IsolationDomains": [],
  "location": "<Location>",
  "managementNetworkConfiguration": {
    "infrastructureVpnConfiguration": {
      "administrativeState": "Enabled",
      "optionBProperties": {
          "routeTargets": {
          "exportIpv4RouteTargets": [
            "65048:10039"
          ],
          "exportIpv6RouteTargets": [
            "65048:10039"
          ],
          "importIpv4RouteTargets": [
            "65048:10039"
          ],
          "importIpv6RouteTargets": [
            "65048:10039"
          ]
        }
      },
      "peeringOption": "OptionB"
    },
    "workloadVpnConfiguration": {
      "administrativeState": "Enabled",
      "optionBProperties": {
          "routeTargets": {
          "exportIpv4RouteTargets": [
            "65048:10050"
          ],
          "exportIpv6RouteTargets": [
            "65048:10050"
          ],
          "importIpv4RouteTargets": [
            "65048:10050"
          ],
          "importIpv6RouteTargets": [
            "65048:10050"
          ]
        }
      },
      "peeringOption": "OptionB"
    }
  },
  "name": "NFName",
  "networkFabricControllerId": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFCResourceGroup/providers/microsoft.managednetworkfabric/networkfabriccontrollers/NFCName",
  "networkFabricSku": "NFSKU",
  "provisioningState": "Succeeded",
  "rackCount": 4,
  "racks": [
    "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFCResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkRacks/NFName-aggrack",
    "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFCResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkRacks/NFName-comprack1",
    "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFCResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkRacks/NFName-comprack2",
    "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFCResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkRacks/NFName-comprack3",
    "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFCResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkRacks/NFName-comprack4"
  ],
  "resourceGroup": "NFResourceGroup",
  "serverCountPerRack": 8,
  "systemData": {
    "createdAt": "2023-XX-XXT18:29:58.3785568Z",
    "createdBy": "97fdd529-68de-4ba5-aa3c-adf86bd564bf",
    "createdByType": "Application",
    "lastModifiedAt": "2023-XX-XXT04:32:02.7129198Z",
    "lastModifiedBy": "d1bd24c7-b27f-477e-86dd-939e107873d7",
    "lastModifiedByType": "Application"
  },
  "terminalServerConfiguration": {
    "primaryIpv4Prefix": "20.0.1.0/30",
    "secondaryIpv4Prefix": "20.0.0.0/30",
    "serialNumber": "XXXXXXXXXXXXXX",
    "username": "XXXX"
  },
  "type": "microsoft.managednetworkfabric/networkfabrics"
}

Deleting Fabric

To delete a fabric, run the following command. Before you do, make sure that:

  • The fabric is in a deprovisioned operational state. If it's in a provisioned state, run the deprovision command.
  • No racks are associated with the fabric.
az networkfabric fabric delete --resource-group "NFResourceGroup" --resource-name "NFName"

Sample output:

{
  "configurationState": "Deleting",
  "fabricASN": 65048,
  "fabricVersion": "1.0.0",
  "id": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFResourceGroup/providers/microsoft.managednetworkfabric/networkfabrics/NFName",
  "ipv4Prefix": "10.2.0.0/19",
  "ipv6Prefix": "fda0:d59c:df02::/59",
  "l2IsolationDomains": [],
  "l3IsolationDomains": [],
  "location": "<Location>",
  "managementNetworkConfiguration": {
    "infrastructureVpnConfiguration": {
      "administrativeState": "Enabled",
      "optionBProperties": {
          "routeTargets": {
          "exportIpv4RouteTargets": [
            "65048:10039"
          ],
          "exportIpv6RouteTargets": [
            "65048:10039"
          ],
          "importIpv4RouteTargets": [
            "65048:10039"
          ],
          "importIpv6RouteTargets": [
            "65048:10039"
          ]
        }
      },
      "peeringOption": "OptionB"
    },
    "workloadVpnConfiguration": {
      "administrativeState": "Enabled",
      "optionBProperties": {
          "routeTargets": {
          "exportIpv4RouteTargets": [
            "65048:10050"
          ],
          "exportIpv6RouteTargets": [
            "65048:10050"
          ],
          "importIpv4RouteTargets": [
            "65048:10050"
          ],
          "importIpv6RouteTargets": [
            "65048:10050"
          ]
        }
      },
      "peeringOption": "OptionB"
    }
  },
  "name": "NFName",
  "networkFabricControllerId": "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFCResourceGroup/providers/microsoft.managednetworkfabric/networkfabriccontrollers/NFCName",
  "networkFabricSku": "NFSKU",
  "provisioningState": "Deleting",
  "rackCount": 4,
  "racks": [
    "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFCResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkRacks/NFName-aggrack",
    "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFCResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkRacks/NFName-comprack1",
    "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFCResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkRacks/NFName-comprack2",
    "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFCResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkRacks/NFName-comprack3",
    "/subscriptions/xxxxxx-xxxxxx-xxxx-xxxx-xxxxxx/resourceGroups/NFCResourceGroup/providers/Microsoft.ManagedNetworkFabric/networkRacks/NFName-comprack4"
  ],
  "resourceGroup": "NFResourceGroup",
  "serverCountPerRack": 7,
  "systemData": {
    "createdAt": "2023-XX-XXT18:29:58.3785568Z",
    "createdBy": "97fdd529-68de-4ba5-aa3c-adf86bd564bf",
    "createdByType": "Application",
    "lastModifiedAt": "2023-XX-XXT04:32:02.7129198Z",
    "lastModifiedBy": "d1bd24c7-b27f-477e-86dd-939e107873d7",
    "lastModifiedByType": "Application"
  },
  "terminalServerConfiguration": {
    "primaryIpv4Prefix": "20.0.1.0/30",
    "secondaryIpv4Prefix": "20.0.0.0/30",
    "serialNumber": "XXXXXXXXXXXXXX",
    "username": "XXXX"
  },
  "type": "microsoft.managednetworkfabric/networkfabrics"
}

After successfully deleting the Network Fabric, when you run a show of the same fabric, you won't find any resources available.

az networkfabric fabric show --resource-group "NFResourceGroup" --resource-name "NFName"

Expected output:

(ResourceNotFound) The Resource 'Microsoft.ManagedNetworkFabric/NetworkFabrics/NFName' under resource group 'NFResourceGroup' was not found. For more details please go to https://aka.ms/ARMResourceNotFoundFix
Code: ResourceNotFound

Next steps

After you successfully created a Network Fabric, the next step is to create a cluster.