diff --git a/Sources/ContainerK8s/K8sHelper.swift b/Sources/ContainerK8s/K8sHelper.swift index 2bc4c9d7..c999abfe 100644 --- a/Sources/ContainerK8s/K8sHelper.swift +++ b/Sources/ContainerK8s/K8sHelper.swift @@ -86,9 +86,13 @@ public struct K8sHelper { var controlPlanes: [ContainerSnapshot] = [] var workers: [ContainerSnapshot] = [] for snapshot in snapshots { - switch snapshot.configuration.labels[ResourceLabelKeys.role] { - case controlPlaneRoleName: controlPlanes.append(snapshot) - default: workers.append(snapshot) + let roles = snapshot.configuration.labels[ResourceLabelKeys.role, default: ""] + .split(separator: ",") + .map { $0.trimmingCharacters(in: .whitespacesAndNewlines) } + if roles.contains(controlPlaneRoleName) { + controlPlanes.append(snapshot) + } else { + workers.append(snapshot) } } diff --git a/Tests/K8sPluginTests/K8sListTests.swift b/Tests/K8sPluginTests/K8sListTests.swift index 3e2bbf5b..4400a986 100644 --- a/Tests/K8sPluginTests/K8sListTests.swift +++ b/Tests/K8sPluginTests/K8sListTests.swift @@ -153,6 +153,21 @@ struct BuildK8sRowsTests { #expect(rows[2].snapshot.id == "dev-worker-2") } + @Test func mixedControlPlaneRoleIsGroupedAsControlPlane() throws { + let cp = try makeSnapshot( + id: "k8s-dev", + role: "\(K8sHelper.controlPlaneRoleName),worker") + let worker = try makeWorker("k8s-dev-worker-1") + + let rows = K8sHelper.buildK8sRows(from: [worker, cp]) + + #expect(rows.count == 2) + #expect(rows[0].snapshot.id == "k8s-dev") + #expect(rows[0].clusterName == "k8s-dev") + #expect(rows[1].snapshot.id == "k8s-dev-worker-1") + #expect(rows[1].clusterName == "k8s-dev") + } + @Test func workersGroupedUnderCorrectControlPlane() throws { let cp1 = try makeControlPlane("alpha") let cp2 = try makeControlPlane("beta")