| Name | AzStackHci_Network_Test_Network_StorageVlanFor2NodeSwitchLess |
|---|---|
| Severity | Critical: This validator will block operations until remediated. |
| Applicable Scenarios | Deployment |
This validator checks that 2-node switchless deployments provide exactly one storage VLAN ID for each storage adapter. Switchless deployments require VLAN configuration to properly isolate storage traffic between the two nodes.
For 2-node switchless deployments:
- The deployment configuration must include a storageNetworks section with VLAN IDs
- The number of VLAN IDs provided must equal the number of storage adapters
For other deployment types (switched or non-2-node):
- This validation is skipped (not applicable)
Review the Environment Validator output JSON. Check the AdditionalData.Detail field for information about storage VLAN configuration.
{
"Name": "AzStackHci_Network_Test_Network_StorageVlanFor2NodeSwitchLess",
"DisplayName": "Test storage VLANID requirement for 2-node switchless deployment",
"Title": "Test storage VLANID requirement for 2-node switchless deployment",
"Status": 1,
"Severity": 2,
"Description": "Check user provides one storage VLANID for each storage adapter provided on 2-node switchless deployment",
"Remediation": "Please provide valid storageNetworks and storage VLANID information in your deployment configuration file: Make sure you provide one storage VLANID for each storage adapter provided on 2-node switchless deployment.",
"TargetResourceID": "StorageVlanIdFor2NodeSwitchLess",
"TargetResourceName": "StorageVlanIdFor2NodeSwitchLess",
"TargetResourceType": "StorageVlanIdFor2NodeSwitchLess",
"Timestamp": "<timestamp>",
"AdditionalData": {
"Source": "<ComputerName>",
"Resource": "StorageVlanIdFor2NodeSwitchLess",
"Detail": "No storageNetworks section or valid storage VLANID info provided in the configuration.",
"Status": "FAILURE",
"TimeStamp": "<timestamp>"
}
}Error Message:
No storageNetworks section or valid storage VLANID info provided in the configuration.
Root Cause: The deployment configuration is missing the storageNetworks section or does not contain valid storage VLAN ID information. For 2-node switchless deployments, VLAN IDs are required to properly tag and isolate storage traffic.
-
Identify how many storage adapters are in your storage intent:
- Check your deployment configuration for the storage intent definition
- Count the number of adapters defined for storage
-
Update your deployment configuration file to include storage VLAN IDs:
Example configuration (JSON format):
{ "storageNetworks": [ { "name": "Storage1", "networkAdapterName": "Ethernet 2", "vlanId": 711 }, { "name": "Storage2", "networkAdapterName": "Ethernet 3", "vlanId": 712 } ], "intents": [ { "name": "StorageIntent", "trafficType": ["Storage"], "adapter": ["Ethernet 2", "Ethernet 3"] } ] } -
Ensure the number of VLAN IDs matches the number of storage adapters:
- 2 storage adapters → 2 VLAN IDs required
- 4 storage adapters → 4 VLAN IDs required
-
Use unique VLAN IDs for each storage adapter:
- Do not reuse the same VLAN ID for multiple adapters
- Use VLANs that are configured on your network infrastructure (if applicable)
- Recommended range: 700-799 for storage traffic
-
Retry the deployment with the updated configuration.
Error Message:
Found [ 1 ] storage VLANID in the configuration: 711
(When there are 2 storage adapters but only 1 VLAN ID provided)
Root Cause: The number of storage VLAN IDs provided in the configuration does not match the number of storage adapters. Each storage adapter in a 2-node switchless deployment requires its own VLAN ID.
-
Check how many storage adapters are defined in your storage intent:
# Check your configuration file or deployment parameters # Count the storage adapters
-
Update the storageNetworks section to provide one VLAN ID per adapter:
Example: 2 adapters require 2 VLAN IDs
{ "storageNetworks": [ { "name": "Storage1", "networkAdapterName": "Ethernet 2", "vlanId": 711 }, { "name": "Storage2", "networkAdapterName": "Ethernet 3", "vlanId": 712 // Added second VLAN } ] } -
Ensure VLAN IDs are unique:
- Each adapter must have a different VLAN ID
- Do not use the same VLAN ID for multiple adapters in switchless deployments
-
Retry the deployment with the updated configuration.
In 2-node switchless deployments:
- Storage adapters connect directly between the two nodes (no switch)
- VLANs are used to create logical network separation
- Each adapter pair (node1-adapter1 ↔ node2-adapter1) uses a unique VLAN
- This prevents network loops and ensures proper traffic isolation
For a 2-node switchless cluster with 2 storage adapters:
| Node | Adapter | VLAN ID | Connects To |
|---|---|---|---|
| NODE1 | Ethernet 2 | 711 | NODE2 Ethernet 2 (VLAN 711) |
| NODE1 | Ethernet 3 | 712 | NODE2 Ethernet 3 (VLAN 712) |
| NODE2 | Ethernet 2 | 711 | NODE1 Ethernet 2 (VLAN 711) |
| NODE2 | Ethernet 3 | 712 | NODE1 Ethernet 3 (VLAN 712) |
| Purpose | Recommended Range | Example |
|---|---|---|
| Storage (switchless) | 700-799 | 711, 712, 713, 714 |
| Management | 1-99 | 1, 10, 50 |
| Compute/VM | 100-699 | 100, 200, 300 |
Complete example for 2-node switchless with 4 storage adapters:
{
"clusterPattern": "Standard",
"switchlessDeploy": true,
"storageNetworks": [
{
"name": "Storage1",
"networkAdapterName": "Ethernet 2",
"vlanId": 711
},
{
"name": "Storage2",
"networkAdapterName": "Ethernet 3",
"vlanId": 712
},
{
"name": "Storage3",
"networkAdapterName": "Ethernet 4",
"vlanId": 713
},
{
"name": "Storage4",
"networkAdapterName": "Ethernet 5",
"vlanId": 714
}
],
"intents": [
{
"name": "ManagementIntent",
"trafficType": ["Management"],
"adapter": ["Ethernet", "Ethernet 1"]
},
{
"name": "StorageIntent",
"trafficType": ["Storage"],
"adapter": ["Ethernet 2", "Ethernet 3", "Ethernet 4", "Ethernet 5"]
}
]
}This validator only runs when ALL of these conditions are met:
- Node count = 2 (exactly 2 nodes)
- Switchless = true (direct-connect storage)
- Scenario = Deployment
For other scenarios, this validation is skipped.
After deployment, verify VLANs are configured:
# Check VLAN IDs on storage adapters
Get-NetAdapter | Where-Object { $_.Status -eq "Up" } | ForEach-Object {
$vlan = Get-NetAdapterAdvancedProperty -Name $_.Name -RegistryKeyword "VlanID" -ErrorAction SilentlyContinue
[PSCustomObject]@{
Adapter = $_.Name
VLANID = if ($vlan) { $vlan.DisplayValue } else { "None" }
Status = $_.Status
}
} | Format-Table -AutoSize