1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-07-24 07:49:41 +02:00

fix: improve the node view for detecting roles - develop (#354)

This commit is contained in:
Steven Kang 2025-03-28 10:52:59 +13:00 committed by GitHub
parent 81c5f4acc3
commit 7c01f84a5c

View file

@ -6,36 +6,29 @@ export function getInternalNodeIpAddress(node?: Node) {
)?.address; )?.address;
} }
// most kube clusters set control-plane label, older clusters set master, microk8s doesn't have either but instead sets microk8s-controlplane
const controlPlaneLabels = [ const controlPlaneLabels = [
'node-role.kubernetes.io/control-plane', 'node-role.kubernetes.io/control-plane',
'node-role.kubernetes.io/master', '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' { export function getRole(node: Node): 'Control plane' | 'Worker' {
const hasControlPlaneLabel = controlPlaneLabels.some( const hasControlPlaneLabel = controlPlaneLabels.some(
(label) => (label) => node.metadata?.labels?.[label] !== undefined
// 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
); );
const hasControlPlaneLabelValue = roleLabels.some( const hasControlPlaneLabelValue = roleLabels.some(
(label) => (label) =>
node.metadata?.labels?.[label] === 'control-plane' || node.metadata?.labels?.[label] === 'control-plane' ||
node.metadata?.labels?.[label] === 'master' node.metadata?.labels?.[label] === 'master'
); );
if (hasControlPlaneLabel || hasControlPlaneLabelValue) { return hasControlPlaneLabel || hasControlPlaneLabelValue
return 'Control plane'; ? 'Control plane'
} : 'Worker';
return 'Worker';
} }