From 7c01f84a5c4b4f6f54b5d3debf83fcdbaa40fd66 Mon Sep 17 00:00:00 2001 From: Steven Kang Date: Fri, 28 Mar 2025 10:52:59 +1300 Subject: [PATCH] fix: improve the node view for detecting roles - develop (#354) --- .../cluster/HomeView/NodesDatatable/utils.ts | 27 +++++++------------ 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/app/react/kubernetes/cluster/HomeView/NodesDatatable/utils.ts b/app/react/kubernetes/cluster/HomeView/NodesDatatable/utils.ts index a5d4b0b4d..05bac7ce0 100644 --- a/app/react/kubernetes/cluster/HomeView/NodesDatatable/utils.ts +++ b/app/react/kubernetes/cluster/HomeView/NodesDatatable/utils.ts @@ -6,36 +6,29 @@ export function getInternalNodeIpAddress(node?: Node) { )?.address; } -// most kube clusters set control-plane label, older clusters set master, microk8s doesn't have either but instead sets microk8s-controlplane const controlPlaneLabels = [ 'node-role.kubernetes.io/control-plane', 'node-role.kubernetes.io/master', - 'node.kubernetes.io/microk8s-controlplane', + 'node.kubernetes.io/microk8s-controlplane' ]; -const roleLabels = ['kubernetes.io/role']; +const roleLabels = [ + 'kubernetes.io/role', + 'node.kubernetes.io/role' +]; -/** - * Returns the role of the node based on the labels. - * @param node The node to get the role of. - * It uses similar logic to https://github.com/kubernetes/kubectl/blob/04bb64c802171066ed0d886c437590c0b7ff1ed3/pkg/describe/describe.go#L5523C1-L5541C2 , - * but only returns 'Control plane' or 'Worker'. It also has an additional check for microk8s. - */ export function getRole(node: Node): 'Control plane' | 'Worker' { const hasControlPlaneLabel = controlPlaneLabels.some( - (label) => - // the label can be set to an empty string, so we need to check for undefined - // e.g. node-role.kubernetes.io/control-plane: "" - node.metadata?.labels?.[label] !== undefined + (label) => node.metadata?.labels?.[label] !== undefined ); + const hasControlPlaneLabelValue = roleLabels.some( (label) => node.metadata?.labels?.[label] === 'control-plane' || node.metadata?.labels?.[label] === 'master' ); - if (hasControlPlaneLabel || hasControlPlaneLabelValue) { - return 'Control plane'; - } - return 'Worker'; + return hasControlPlaneLabel || hasControlPlaneLabelValue + ? 'Control plane' + : 'Worker'; }