internal/manifests/manifestutils/labels.go (63 lines of code) (raw):

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 package manifestutils import ( "regexp" "strings" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/aws/amazon-cloudwatch-agent-operator/internal/naming" ) func isFilteredLabel(label string, filterLabels []string) bool { for _, pattern := range filterLabels { match, _ := regexp.MatchString(pattern, label) return match } return false } // Labels return the common labels to all objects that are part of a managed CR. func Labels(instance metav1.ObjectMeta, name string, image string, component string, filterLabels []string) map[string]string { var versionLabel string // new map every time, so that we don't touch the instance's label base := map[string]string{} if nil != instance.Labels { for k, v := range instance.Labels { if !isFilteredLabel(k, filterLabels) { base[k] = v } } } for k, v := range SelectorLabels(instance, component) { base[k] = v } if len(image) > 0 { version := strings.Split(image, ":") for _, v := range version { if strings.HasSuffix(v, "@sha256") { versionLabel = strings.TrimSuffix(v, "@sha256") } } switch lenVersion := len(version); lenVersion { case 3: base["app.kubernetes.io/version"] = versionLabel case 2: base["app.kubernetes.io/version"] = naming.Truncate("%s", 63, version[len(version)-1]) default: base["app.kubernetes.io/version"] = "latest" } } // Don't override the app name if it already exists if _, ok := base["app.kubernetes.io/name"]; !ok { base["app.kubernetes.io/name"] = name } return base } // SelectorLabels return the common labels to all objects that are part of a managed CR to use as selector. // Selector labels are immutable for Deployment, StatefulSet and DaemonSet, therefore, no labels in selector should be // expected to be modified for the lifetime of the object. func SelectorLabels(instance metav1.ObjectMeta, component string) map[string]string { return map[string]string{ "app.kubernetes.io/managed-by": "amazon-cloudwatch-agent-operator", "app.kubernetes.io/instance": naming.Truncate("%s.%s", 63, instance.Namespace, instance.Name), "app.kubernetes.io/part-of": "amazon-cloudwatch-agent", "app.kubernetes.io/component": component, } } func SelectorLabelsForAllOperatorManaged(instance metav1.ObjectMeta) map[string]string { return map[string]string{ "app.kubernetes.io/managed-by": "amazon-cloudwatch-agent-operator", "app.kubernetes.io/instance": naming.Truncate("%s.%s", 63, instance.Namespace, instance.Name), "app.kubernetes.io/part-of": "amazon-cloudwatch-agent", } }