From 636cccdf24b343926774927aee64dc55def3b917 Mon Sep 17 00:00:00 2001 From: "Patrick W. Healy" Date: Wed, 16 Sep 2026 23:26:04 +0000 Subject: [PATCH] net-controller: preserve exact problem messages for summary publishers Use scalar route mismatch and unhealthy-link facts with controller-enriched provider identity. Assert the actual cluster problem pipeline matches full publications without scanning or retaining diagnostic arrays. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: d2243398-6c36-4c3d-969e-7ed7bfb5b459 --- .../cluster_status.go | 9 ++---- .../node_overview_test.go | 1 + .../overview_diagnostics_test.go | 29 +++++++++++++++++++ 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/cmd/unbounded-net-controller/cluster_status.go b/cmd/unbounded-net-controller/cluster_status.go index d33dcce34..f5b22b1d9 100644 --- a/cmd/unbounded-net-controller/cluster_status.go +++ b/cmd/unbounded-net-controller/cluster_status.go @@ -18,6 +18,7 @@ import ( "k8s.io/klog/v2" "github.com/Azure/unbounded/internal/net/controller" + statuspkg "github.com/Azure/unbounded/internal/net/status" statusv1alpha1 "github.com/Azure/unbounded/internal/net/status/v1alpha1" "github.com/Azure/unbounded/internal/version" ) @@ -821,12 +822,8 @@ func collectClusterProblems(status *ClusterStatusResponse) []StatusProblem { } if overview := status.NodeOverviews[node.NodeInfo.Name]; overview != nil { - if overview.RouteMismatch { - appendProblem("node", nodeName, "Route next-hop mismatches (expected vs present)") - } - - if unhealthy := overview.PeerCount - overview.HealthyPeers; unhealthy > 0 { - appendProblem("node", nodeName, fmt.Sprintf("%d peers are not healthy", unhealthy)) + for _, message := range statuspkg.OverviewDiagnosticMessages(*overview, node.NodeInfo.ProviderID) { + appendProblem("node", nodeName, message) } continue diff --git a/cmd/unbounded-net-controller/node_overview_test.go b/cmd/unbounded-net-controller/node_overview_test.go index 6c7176d91..b4edb51a0 100644 --- a/cmd/unbounded-net-controller/node_overview_test.go +++ b/cmd/unbounded-net-controller/node_overview_test.go @@ -110,6 +110,7 @@ func TestClusterOverviewPreservesCountsAndEnrichment(t *testing.T) { overview := statusv1alpha1.NodeStatusOverview{ NodeInfo: NodeInfo{Name: "node", SiteName: "site", WireGuard: &WireGuardStatusInfo{Interface: "wg0"}}, StatusSource: "ws", PeerCount: 20, HealthyPeers: 17, RouteCount: 30, RouteMismatch: true, + RouteMismatchCount: 2, UnhealthyPeerLinks: 3, } c.PatchOverview("node", overview) snapshot := c.Get() diff --git a/cmd/unbounded-net-controller/overview_diagnostics_test.go b/cmd/unbounded-net-controller/overview_diagnostics_test.go index 7cebaa0fe..fc055c31d 100644 --- a/cmd/unbounded-net-controller/overview_diagnostics_test.go +++ b/cmd/unbounded-net-controller/overview_diagnostics_test.go @@ -50,6 +50,35 @@ func TestOverviewDiagnosticMessagesMatchFullProblems(t *testing.T) { t.Fatalf("IPIP warning applied outside Azure: %v", otherCloud) } + metadata := statuspkg.OverviewMetadata(overview) + metadata.NodeInfo.ProviderID = node.NodeInfo.ProviderID + cluster := &ClusterStatusResponse{ + Nodes: []*NodeStatusResponse{&metadata}, + NodeOverviews: map[string]*statusv1alpha1.NodeStatusOverview{"node": &overview}, + } + + problems := collectClusterProblems(cluster) + if len(problems) != 1 || !slices.Equal(problems[0].Errors, fullProblems[0].Errors) { + t.Fatalf("overview problem pipeline=%+v, legacy=%+v", problems, fullProblems) + } + + metadata.NodeInfo.ProviderID = "other://vm" + + if problems = collectClusterProblems(cluster); len(problems) != 1 || len(problems[0].Errors) != 2 { + t.Fatalf("controller ignored enriched cloud identity: %+v", problems) + } + + overview.RouteMismatch = false + overview.RouteMismatchCount = 0 + overview.UnhealthyPeerLinks = 0 + + if problems = collectClusterProblems(cluster); len(problems) != 0 { + t.Fatalf("overview peer counts incorrectly replaced diagnostic link health: %+v", problems) + } + + overview.RouteMismatchCount = 3 + overview.UnhealthyPeerLinks = 2 + overview.UsesIPIP = false if noIPIP := statuspkg.OverviewDiagnosticMessages(overview, node.NodeInfo.ProviderID); len(noIPIP) != 2 { t.Fatalf("Azure warning applied without IPIP: %v", noIPIP)