From dec5791ccfe693ee97319736915fa46ebd3a54d2 Mon Sep 17 00:00:00 2001 From: Ciprian Hacman Date: Wed, 19 Jul 2023 06:31:56 +0300 Subject: [PATCH] azure: Populate node labels from tags --- pkg/nodeidentity/azure/identify.go | 44 ++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/pkg/nodeidentity/azure/identify.go b/pkg/nodeidentity/azure/identify.go index 01ec54279d0f7..ec773b539131c 100644 --- a/pkg/nodeidentity/azure/identify.go +++ b/pkg/nodeidentity/azure/identify.go @@ -26,7 +26,10 @@ import ( corev1 "k8s.io/api/core/v1" expirationcache "k8s.io/client-go/tools/cache" "k8s.io/klog/v2" + "k8s.io/kops/pkg/apis/kops" "k8s.io/kops/pkg/nodeidentity" + "k8s.io/kops/pkg/nodelabels" + "k8s.io/kops/upup/pkg/fi/cloudup/azure" ) const ( @@ -100,24 +103,41 @@ func (i *nodeIdentifier) IdentifyNode(ctx context.Context, node *corev1.Node) (* } labels := map[string]string{} - // TODO(kenji): Populate labels + for k, v := range vmss.Tags { + if k == azure.TagClusterName && v != nil { + labels[kops.LabelClusterName] = *v + } + if k == InstanceGroupNameTag && v != nil { + labels[kops.NodeLabelInstanceGroup] = *v + } + if strings.HasPrefix(k, azure.TagNameRolePrefix) { + role := kops.InstanceGroupRole(strings.TrimPrefix(k, azure.TagNameRolePrefix)) + switch role { + case kops.InstanceGroupRoleControlPlane: + labels[nodelabels.RoleLabelControlPlane20] = "" + case "master": + labels[nodelabels.RoleLabelControlPlane20] = "" + case kops.InstanceGroupRoleNode: + labels[nodelabels.RoleLabelNode16] = "" + default: + klog.Warningf("Unknown or unsupported node role tag %q for VMSS %q", k, vmssName) + } + } + if strings.HasPrefix(k, ClusterNodeTemplateLabel) && v != nil { + l := strings.SplitN(*v, "=", 2) + if len(l) <= 1 { + klog.Warningf("Malformed cloud label tag %q=%q for VMSS %q", k, *v, vmssName) + } else { + labels[l[0]] = l[1] + } + } + } info := &nodeidentity.Info{ InstanceID: vmssName, Labels: labels, } - for k, v := range vmss.Tags { - if !strings.HasPrefix(k, ClusterNodeTemplateLabel) { - continue - } - l := strings.SplitN(*v, "=", 2) - if len(l) <= 1 { - return nil, fmt.Errorf("malformed tag value %s", *v) - } - labels[l[0]] = l[1] - } - // If caching is enabled add the nodeidentity.Info to cache. if i.cacheEnabled { err = i.cache.Add(info)