Network Management
Structure missing on the navigation pane of the Manage Subnets & IP Addresses page in IPAM 2025.2
This article provides guidance to resolve the issue where the IPAM structure (supernets and subnets) is missing from the Manage Subnets & IP Addresses page after upgrading to IPAM 2025.2 or 2025.2.1.
First published date
Last published date
Overview
Following an upgrade to IPAM version 2025.2 or 2025.2.1, some users may notice that the IPAM structure no longer appears in the left-hand navigation pane on the Manage Subnets & IP Addresses page. This prevents users from viewing and managing their IP address hierarchy as expected.
Product section
Cause
The view definition for the Subnet Management page did not include user accounts from Windows/SAML groups, preventing these accounts from appearing in the tree listing.
Resolution
|
Note: A fix for this issue is included in SolarWinds Platform 2025.4. Consider upgrading your environment. If you can't upgrade, use the workaround below. |
To workaround the issue, update the database view IPAM_ManageSubnetsAndIpsView in the SolarWindsOrion database to include logic for Windows and SAML group accounts in the Subnet Management tree view by following these steps:
- Back up the database
- Open SQL Server Management Studio and connect to the SQL instance hosting the SolarWinds Platform database with admin credentials.
- Right-click the SolarWindsOrion database and select New Query.
- Paste the below and select Execute:
-- Scripts are not supported under any SolarWinds support program or service.
-- Scripts are provided AS IS without warranty of any kind. SolarWinds further
-- disclaims all warranties including, without limitation, any implied warranties
-- of merchantability or of fitness for a particular purpose. The risk arising
-- out of the use or performance of the scripts and documentation stays with you.
-- In no event shall SolarWinds or anyone else involved in the creation,
-- production, or delivery of the scripts be liable for any damages whatsoever
-- (including, without limitation, damages for loss of business profits, business
-- interruption, loss of business information, or other pecuniary loss) arising
-- out of the use of or inability to use the scripts or documentation.
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[IPAM_ManageSubnetsAndIpsView]') AND OBJECTPROPERTY(id, N'IsView') = 1)
BEGIN
DROP VIEW [dbo].[IPAM_ManageSubnetsAndIpsView]
END
GO
CREATE VIEW [dbo].[IPAM_ManageSubnetsAndIpsView]
AS
WITH RoleTable ([GroupId], [AccountID], [Role], [Distance])
AS (
SELECT
groupAncestors.[GroupId]
, groupRole.[AccountId]
, groupRole.[Role]
, groupAncestors.[Distance]
FROM
dbo.[IPAM_GroupAncestors] groupAncestors
INNER JOIN
dbo.[IPAM_GroupRole] groupRole
ON
groupRole.[GroupId] = groupAncestors.[AncestorGroupId]
WHERE
groupRole.[Role] IS NOT NULL
)
SELECT
ipamGroup.GroupId AS [GroupId]
, groupType.GroupTypeId AS [GroupType]
, ipamGroup.FriendlyName AS [FriendlyName]
, ipamGroup.Comments AS [Comments]
, ipamGroup.Address AS [Address]
, ipamGroup.AddressMask AS [AddressMask]
, ipamGroup.AddressN AS [AddressN]
, ipamGroup.CIDR AS [CIDR]
, LOWER(ISNULL( groupType.GroupIconPrefix, 'unknown' )) as [GroupIconPrefix]
, LOWER(si.IconPostfix) as [StatusIconPostfix]
, (CASE WHEN p.[Role] IS NOT NULL THEN p.[Role] ELSE
(
CASE WHEN webUserSettings.[SettingValue]
IN ('SiteAdmin', 'PowerUser', 'Operator', 'ReadOnly', 'NoAccess')
THEN webUserSettings.[SettingValue]
ELSE
(
CASE acc.[AllowAdmin]
WHEN 'Y' THEN 'SiteAdmin'
ELSE 'ReadOnly'
END
)
END
)
END) AS [Role]
, anc.Distance
, anc.AncestorGroupId AS [AncestorId]
, CASE WHEN webUserSettings.SettingValue = ''
THEN ( CASE WHEN customRolesHasChildrenInfo.GroupId IS NULL THEN 0 ELSE 1 END )
ELSE ( CASE WHEN hasChildrenInfo.GroupId IS NULL THEN 0 ELSE 1 END )
END AS [HasChildren]
, hasSubnetsInfo.HasSubnets AS [HasSubnets]
, acc.AccountID AS [AccountID]
, ipamGroup.ClusterId AS [ClusterId]
FROM
dbo.[IPAM_GroupAncestors] anc
LEFT JOIN
dbo.IPAM_Group ipamGroup ON ipamGroup.GroupId = anc.GroupId
LEFT JOIN
dbo.IPAM_GroupType groupType ON ipamGroup.GroupType = groupType.GroupTypeId
LEFT JOIN
dbo.StatusInfo si ON ipamGroup.Status = si.StatusId
INNER JOIN
dbo.[Accounts] acc ON acc.[AccountType] IN (1, 2, 4, 5)
LEFT JOIN (
SELECT
rt.[GroupId], rt.[AccountID], rt.[Role], rt.[Distance]
FROM
RoleTable rt WHERE rt.[Distance] =
(
SELECT
MIN(m.Distance)
FROM
RoleTable m
WHERE
rt.[GroupId] = m.[GroupId] AND rt.[AccountID] = m.[AccountID]
)
) p ON p.[GroupId] = anc.[GroupId]
AND
LOWER(p.[AccountID]) = (
CASE
WHEN acc.[AccountType] = 4 THEN LOWER(acc.[GroupInfo])
ELSE LOWER(acc.[AccountID])
END
)
LEFT JOIN
dbo.[WebUserSettings] webUserSettings
ON
webUserSettings.[SettingName] = 'IPAM.IPAMAccountRole' AND LOWER(webUserSettings.[AccountID]) = (
CASE
WHEN acc.[AccountType] = 4 THEN LOWER(acc.[GroupInfo])
ELSE LOWER(acc.[AccountID])
END
)
LEFT JOIN (
SELECT
ipamGroupHasSubnetInfo.ClusterId, COUNT(ipamGroupHasSubnetInfo.GroupId) as HasSubnets
FROM
dbo.IPAM_Group ipamGroupHasSubnetInfo
WHERE
ipamGroupHasSubnetInfo.GroupType <> 32
AND
ipamGroupHasSubnetInfo.GroupType <> 2
AND
ipamGroupHasSubnetInfo.ParentId IS NOT NULL
GROUP by ClusterId
) hasSubnetsInfo ON ipamGroup.GroupId = hasSubnetsInfo.ClusterId
LEFT JOIN (
SELECT
g.GroupId, rt.AccountID
FROM
IPAM_Group g
LEFT JOIN
IPAM_GroupAncestors ga ON g.GroupId = ga.AncestorGroupId AND ga.Distance = 1
LEFT JOIN
RoleTable rt ON ga.GroupId = rt.GroupId
LEFT JOIN
IPAM_Group gt ON rt.GroupId = gt.GroupId
WHERE
(rt.Role != 'NoAccess' AND gt.GroupType IN (1,4,8,16,128,256,512)) OR gt.GroupType = 2
GROUP BY
g.GroupId, rt.AccountID
) customRolesHasChildrenInfo ON ipamGroup.GroupId = customRolesHasChildrenInfo.GroupId AND
webUserSettings.AccountID = customRolesHasChildrenInfo.AccountID
LEFT JOIN (
SELECT
ipamGroupChildrenCount.ParentId AS GroupId
FROM
dbo.IPAM_Group ipamGroupChildrenCount
WHERE
ipamGroupChildrenCount.ParentId IS NOT NULL AND ipamGroupChildrenCount.GroupType IN (1,2,4,8,16,128,256,512)
GROUP by ParentId
) hasChildrenInfo ON ipamGroup.GroupId = hasChildrenInfo.GroupId
WHERE
groupType.GroupTypeId IN (1,2,4,8,16,128,256,512)
GO