From e1d108a7f073746117a9be0d5df98de000037b52 Mon Sep 17 00:00:00 2001 From: Jian Qiu Date: Tue, 31 Mar 2026 17:27:47 +0800 Subject: [PATCH] fix: add customer usable filters that filter noaddr networks (#24585) Co-authored-by: Qiu Jian --- pkg/compute/models/networks.go | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/pkg/compute/models/networks.go b/pkg/compute/models/networks.go index e5c5ea284c..111e9415f5 100644 --- a/pkg/compute/models/networks.go +++ b/pkg/compute/models/networks.go @@ -4097,3 +4097,33 @@ func (net SNetwork) HasIPv4Addr() bool { func (net SNetwork) HasIPv6Addr() bool { return len(net.GuestIp6Start) > 0 && len(net.GuestIp6End) > 0 } + +func (manager *SNetworkManager) CustomizeFilterList(ctx context.Context, q *sqlchemy.SQuery, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (*db.CustomizeListFilters, error) { + filters := db.NewCustomizeListFilters() + + if query.Contains("usable") { + isUsable := jsonutils.QueryBoolean(query, "usable", false) + addrCountFilter := func(obj jsonutils.JSONObject) (bool, error) { + portsStats := struct { + PortsUsed int + Ports6Used int + Ports int + Ports6 int + }{} + err := obj.Unmarshal(&portsStats) + if err != nil { + return false, err + } + if portsStats.PortsUsed < portsStats.Ports || portsStats.Ports6Used < portsStats.Ports6 { + return true, nil + } + return false, nil + } + + if isUsable { + filters.Append(addrCountFilter) + } + } + + return filters, nil +}