diff --git a/pkg/printers/internalversion/BUILD b/pkg/printers/internalversion/BUILD index 6d5281bd171..fa0ad5d66b0 100644 --- a/pkg/printers/internalversion/BUILD +++ b/pkg/printers/internalversion/BUILD @@ -55,7 +55,6 @@ go_library( "printers.go", ], deps = [ - "//cmd/kubeadm/app/apis/kubeadm:go_default_library", "//federation/apis/federation:go_default_library", "//federation/apis/federation/v1beta1:go_default_library", "//federation/client/clientset_generated/federation_clientset:go_default_library", diff --git a/pkg/printers/internalversion/printers.go b/pkg/printers/internalversion/printers.go index b0386581388..bdd17c3c804 100644 --- a/pkg/printers/internalversion/printers.go +++ b/pkg/printers/internalversion/printers.go @@ -41,7 +41,6 @@ import ( "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" "k8s.io/kubernetes/federation/apis/federation" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/events" @@ -60,7 +59,20 @@ import ( "k8s.io/kubernetes/pkg/util/node" ) -const loadBalancerWidth = 16 +const ( + loadBalancerWidth = 16 + + // LabelNodeRoleMaster specifies that a node is a master + // It's copied over to here until it's merged in core: https://github.com/kubernetes/kubernetes/pull/39112 + LabelNodeRoleMaster = "node-role.kubernetes.io/master" + + // NodeLabelRole specifies the role of a node + NodeLabelRole = "kubernetes.io/role" + + // NodeLabelKubeadmAlphaRole is a label that kubeadm applies to a Node as a hint that it has a particular purpose. + // Use of NodeLabelRole is preferred. + NodeLabelKubeadmAlphaRole = "kubeadm.alpha.kubernetes.io/role" +) // AddHandlers adds print handlers for default Kubernetes types dealing with internal versions. // TODO: handle errors from Handler @@ -1193,14 +1205,19 @@ func getNodeExternalIP(node *api.Node) string { // findNodeRole returns the role of a given node, or "" if none found. // The role is determined by looking in order for: +// * a node-role.kubernetes.io/master label // * a kubernetes.io/role label // * a kubeadm.alpha.kubernetes.io/role label -// If no role is found, ("", nil) is returned func findNodeRole(node *api.Node) string { - if role := node.Labels[kubeadm.NodeLabelKubeadmAlphaRole]; role != "" { - return role + if _, ok := node.Labels[LabelNodeRoleMaster]; ok { + return "Master" + } + if role := node.Labels[NodeLabelRole]; role != "" { + return strings.Title(role) + } + if role := node.Labels[NodeLabelKubeadmAlphaRole]; role != "" { + return strings.Title(role) } - // No role found return "" } diff --git a/pkg/printers/internalversion/printers_test.go b/pkg/printers/internalversion/printers_test.go index 701e9678f2a..b3909b0a2ed 100644 --- a/pkg/printers/internalversion/printers_test.go +++ b/pkg/printers/internalversion/printers_test.go @@ -825,6 +825,24 @@ func TestPrintNodeStatus(t *testing.T) { }, status: "Unknown,SchedulingDisabled", }, + { + node: api.Node{ + ObjectMeta: metav1.ObjectMeta{ + Name: "foo10", + Labels: map[string]string{"node-role.kubernetes.io/master": "", "kubernetes.io/role": "node", "kubeadm.alpha.kubernetes.io/role": "node"}, + }, + }, + status: "Unknown,Master", + }, + { + node: api.Node{ + ObjectMeta: metav1.ObjectMeta{ + Name: "foo11", + Labels: map[string]string{"kubernetes.io/role": "node", "kubeadm.alpha.kubernetes.io/role": "node"}, + }, + }, + status: "Unknown,Node", + }, { node: api.Node{ ObjectMeta: metav1.ObjectMeta{ @@ -833,7 +851,7 @@ func TestPrintNodeStatus(t *testing.T) { }, Status: api.NodeStatus{Conditions: []api.NodeCondition{{Type: api.NodeReady, Status: api.ConditionTrue}}}, }, - status: "Ready,node", + status: "Ready,Node", }, }