From 05b8b6bc988bc87bdfed02865a824046c5391689 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20Luk=C5=A1a?= Date: Thu, 17 Apr 2025 08:37:26 +0200 Subject: [PATCH] Allow using a different value for the app.kubernetes.io/managed-by label MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Marko Lukša --- pkg/action/validate.go | 9 ++++++--- pkg/action/validate_test.go | 4 ++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/pkg/action/validate.go b/pkg/action/validate.go index 4bc70e90c..2cc65fdce 100644 --- a/pkg/action/validate.go +++ b/pkg/action/validate.go @@ -32,11 +32,14 @@ var accessor = meta.NewAccessor() const ( appManagedByLabel = "app.kubernetes.io/managed-by" - appManagedByHelm = "Helm" helmReleaseNameAnnotation = "meta.helm.sh/release-name" helmReleaseNamespaceAnnotation = "meta.helm.sh/release-namespace" ) +// AppManagedByLabel is the value Helm should use in the app.kubernetes.io/managed-by label to +// identify resources it manages. Defaults to "Helm", but can be overridden via this variable. +var AppManagedByValue = "Helm" + // requireAdoption returns the subset of resources that already exist in the cluster. func requireAdoption(resources kube.ResourceList) (kube.ResourceList, error) { var requireUpdate kube.ResourceList @@ -102,7 +105,7 @@ func checkOwnership(obj runtime.Object, releaseName, releaseNamespace string) er } var errs []error - if err := requireValue(lbls, appManagedByLabel, appManagedByHelm); err != nil { + if err := requireValue(lbls, appManagedByLabel, AppManagedByValue); err != nil { errs = append(errs, fmt.Errorf("label validation error: %s", err)) } if err := requireValue(annos, helmReleaseNameAnnotation, releaseName); err != nil { @@ -150,7 +153,7 @@ func setMetadataVisitor(releaseName, releaseNamespace string, force bool) resour } if err := mergeLabels(info.Object, map[string]string{ - appManagedByLabel: appManagedByHelm, + appManagedByLabel: AppManagedByValue, }); err != nil { return fmt.Errorf( "%s labels could not be updated: %s", diff --git a/pkg/action/validate_test.go b/pkg/action/validate_test.go index 3efecd6ff..1c62d3a78 100644 --- a/pkg/action/validate_test.go +++ b/pkg/action/validate_test.go @@ -139,7 +139,7 @@ func TestExistingResourceConflict(t *testing.T) { releaseName = "rel-name" releaseNamespace = "rel-namespace" labels = map[string]string{ - appManagedByLabel: appManagedByHelm, + appManagedByLabel: AppManagedByValue, } annotations = map[string]string{ helmReleaseNameAnnotation: releaseName, @@ -172,7 +172,7 @@ func TestCheckOwnership(t *testing.T) { // Set managed by label and verify annotation error message _ = accessor.SetLabels(deployFoo.Object, map[string]string{ - appManagedByLabel: appManagedByHelm, + appManagedByLabel: AppManagedByValue, }) err = checkOwnership(deployFoo.Object, "rel-a", "ns-a") assert.EqualError(t, err, `invalid ownership metadata; annotation validation error: missing key "meta.helm.sh/release-name": must be set to "rel-a"; annotation validation error: missing key "meta.helm.sh/release-namespace": must be set to "ns-a"`)