| Name | AzStackHci_Network_Test_StorageAdapterIpConfiguration |
|---|---|
| Severity | Critical: This validator will block operations until remediated. |
| Applicable Scenarios |
|
This environment validator checks before Update that the Storage Adapters are properly configured with valid IP after Azure Local Deployment. For this requirement, Storage Adapter refers to the network adapters for the Storage Network Intent.
This validator only applies to Azure Local update with a Storage Network Intent configured.
After the Storage Network Intent configured in the cluster, each Storage Adapter on every node in the cluster must:
- Have only 1 valid IPv4 address configured on the adapter, or
- If multiple IP addresses are configured on the adapter, they must be in the same subnet
Review the Environment Validator output JSON. It might be shown as a failure on the cloud health check result. Here is an example:
{
"Name": "AzStackHci_Network_Test_StorageAdapterIpConfiguration",
"DisplayName": "Test storage adapter IP configuration on node",
"Tags": {},
"Title": "Test storage adapter IP configuration on node",
"Status": "FAILURE",
"Severity": "CRITICAL",
"Description": "Test storage adapter IP configuration on node: should have only 1 IPv4 address configured or all IPs should be in the same subnet.",
"Remediation": "Storage intent adapter(s) should have only 1 IPv4 address configured on each or all IPs on the same adapter should be in the same subnet.
You have Storage intent adapter(s) in the system: [ storage1,storage2 ]:
Please run below PowerShell cmdlet to check the IP configuration on all the adapter(s):
Get-NetIPaddress -InterfaceAlias <INTERFACE_ALIAS> -AddressFamily IPv4 -PrefixOrigin Manual
If you find multiple IPs on the storage adapter(s), please remove the extra IPs that you do not need.
Remove-NetIPAddress -InterfaceAlias <INTERFACE_ALIAS> -IPAddress <IPADDRESS> -Confirm:False",
"TargetResourceID": "StorageAdapterIpConfiguration",
"TargetResourceName": "StorageAdapterIpConfiguration",
"TargetResourceType": "StorageAdapterIpConfiguration",
"Timestamp": "/Date(1747080202442)/",
"AdditionalData": {
"Detail": "Storage adapter IP configuration check on AZLOC-NODE1
Passed: Storage adapter [ storage1 ] have one and only one valid IPv4 defined on it.
!! Expect one valid IPv4 address configured on storage adapter [ storage2 ].
!! Please run below command to confirm:
!! Get-NetIPaddress -InterfaceAlias storage2 -AddressFamily IPv4 -PrefixOrigin Manual",
"Status": "FAILURE",
"TimeStamp": "05/12/2025 20:03:22",
"Resource": "storage1,storage2",
"Source": "*.*.*.*"
},
"HealthCheckSource": "PreUpdate\\Standard\\Medium\\Network\\7720abf7"
}Check the AdditionalData field for summary of which Storage Adapters are not configured properly. Then refer to the remediation steps below. You can identify the resource by checking the Detail field in AdditionalData section.
In this example, the node name is AZLOC-NODE1 and the problematic adapter name is storage2.
Adapter storage2 on node AZLOC-NODE1 has 1 issue: It does not have a valid IPv4 address defined on it.
The Storage Adapter does not have a valid IP address configured on it.
If the user chooses to use AutoIP for storage adapters, there is an issue in Windows that might cause the storage adapter ends up using an APIPA address (from 169.254.0.0/16 subnet). This APIPA address is not a valid configuration for the storage adapters.
If the user chooses to not use AutoIP for storage adapters (but using a customized IP provided during Azure Local deployment time), then it is possible that the IP configured on the adapter is not in Preferred state.
-
Check if the adapter contains valid IP on it:
Get-NetIPaddress -InterfaceAlias "storage2" -AddressFamily IPv4 -PrefixOrigin Manual -ErrorAction SilentlyContinue
You can also verify this by running
ipconfig /allto check the result. Like below:Ethernet adapter storage1: Connection-specific DNS Suffix . : Description . . . . . . . . . . . : Intel(R) Ethernet 25G 2P E810-XXV Adapter Physical Address. . . . . . . . . : 00-AB-01-CD-02-EE DHCP Enabled. . . . . . . . . . . : No Autoconfiguration Enabled . . . . : Yes Link-local IPv6 Address . . . . . : fe80::14f1:76bb:7de:a3%11(Preferred) Autoconfiguration IPv4 Address. . : 10.71.1.20(Preferred) Subnet Mask . . . . . . . . . . . : 255.255.0.0 Default Gateway . . . . . . . . . : NetBIOS over Tcpip. . . . . . . . : Enabled Ethernet adapter storage2: Connection-specific DNS Suffix . : Description . . . . . . . . . . . : Intel(R) Ethernet 25G 2P E810-XXV Adapter #2 Physical Address. . . . . . . . . : 00-AB-01-CD-02-EF DHCP Enabled. . . . . . . . . . . : No Autoconfiguration Enabled . . . . : Yes Link-local IPv6 Address . . . . . : fe80::c57d:73ab:7807:c842%5(Preferred) Autoconfiguration IPv4 Address. . : 169.254.247.194(Preferred) Subnet Mask . . . . . . . . . . . : 255.255.0.0 Default Gateway . . . . . . . . . : NetBIOS over Tcpip. . . . . . . . : Enabled -
Check Windows event log from provider
Microsoft-Windows-Networking-NetworkAtcto see if there is any event that contains message saying IP address ".255" is used, like "IPAddress 10.71.2.255 is assigned to network adapter storage2"Get-WinEvent -ProviderName "Microsoft-Windows-Networking-NetworkAtc" | Where-Object { $_.Message -like "*.255*"} | Format-List Id, Message
You might find event(s) like the one below in the output:
Id : 52 Message : Network ATC made the following configuration changes when provisioning intent (INTENTNAME) IPAddress 10.71.2.255 assigned to network adapter storage2This indicates that NetworkATC is trying to allocate IP
.255(which is not a valid IP in subnet10.71.2.0/24) to storage adapterstorage2. -
If you found the above event 52, you could run below to mitigate:
Remove-Netintent -Name <StorageIntentName> Add-NetIntent -Wait -Name <StorageIntentName> <Other parameters...>
NOTE: Please make sure you are using right parameters while trying to run
Add-NetIntent, like-StorageVlan,-AdapterName,-AdapterRssPropertyOverrides, etc. Check Add-NetIntent for detailed information on how to run this command. -
After
Add-NetIntentfinished, runipconfig /alland make sure that the storage adapter is getting valid IP address configured on it.If the storage adapter still has APIPA IP configured on it, you might want to try step 3 above again.
The Storage Adapter has multiple IP addresses configured on the adapter, but those IP addresses are not in the same subnet. This is not supported.
-
Please check what storage adapter the system is using:
Get-NetAdapter | ft InterfaceAlias, Status, LinkSpeed
- For separate storage configuration, it should be physical adapter(s);
- For converged storage configuration, it should be adapter(s) with name "vSMB(CONVERGED_INTENTNAME#pNICNAME)" (like "vSMB(mgmtcomputestorage#storage1)", "vSMB(mgmtcomputestorage#storage2)", etc.).
Will use
<STORAGE Adapter Name>in below to refer the storage adapters. -
You could check the current IP of the storage adapters using below cmdlet call on all nodes:
Get-NetIPAddress -InterfaceAlias "<STORAGE Adapter Name>" | ft InterfaceAlias, IPAddress, PrefixLength
-
Verify the storage adapter IP configuration on all nodes of the cluster:
- Please check the IP of the storage adapter and then remove only the IP that you do NOT need anymore.
Make sure to run this on all the nodes.
Remove-NetIPAddress -InterfaceAlias "<STORAGE Adapter Name>" -AddressFamily IPv4 -IPAddress "<IP TO REMOVE>" -Confirm:$false
Also, make sure you run this "Remove-NetIPAddress" cmdlet for all the storage adapters in the system.
- Please check the IP of the storage adapter and then remove only the IP that you do NOT need anymore.
Make sure to run this on all the nodes.
-
Run below script to make sure the storage intent is back to healthy state. This needs to be run only once on one node of the cluster:
[System.String] $currentCluster = (Get-Cluster).Name [System.String[]] $allNodes = (Get-ClusterNode).Name $storageIntent = Get-NetIntent | Where-Object {$_.IsStorageIntentSet -eq $true} foreach ($nodeToCheck in $allNodes) { Set-NetIntentRetryState -ClusterName $currentCluster -Name $storageIntent.IntentName -NodeName $nodeToCheck -Wait }
-
Now try to run "Get-NetIPAddress" again, if you find multiple IP for one storage adapter again, then most likely you are using AutoIP
- Verify the storage intent automatic IP generation setting on one node of the cluster:
$storageIntent = Get-NetIntent | Where-Object {$_.IsStorageIntentSet -eq $true} Write-Host "### AutoIP? [ $($storageIntent.IPOverride.EnableAutomaticIPGeneration) ] ###"
The output of above call should be "### AutoIP? [] ###" or "### AutoIP? [ true ] ###" You will need to remove a different IP that was used in above step 3: try to run step 3 and step 4 again with a different IP.
- Verify the storage intent automatic IP generation setting on one node of the cluster: