From a083a529a89fa97ecaaf4ede7cc41c9295bee3f9 Mon Sep 17 00:00:00 2001 From: ialidzhikov Date: Mon, 13 Jul 2020 18:21:34 +0300 Subject: [PATCH] Add metav1.SetMetaDataLabel func Signed-off-by: ialidzhikov --- .../apimachinery/pkg/apis/meta/v1/helpers.go | 14 ++++++++ .../pkg/apis/meta/v1/helpers_test.go | 35 +++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go index ad989ad75ca..3c5a1518c8e 100644 --- a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go +++ b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go @@ -201,6 +201,20 @@ func SetMetaDataAnnotation(obj *ObjectMeta, ann string, value string) { obj.Annotations[ann] = value } +// HasLabel returns a bool if passed in label exists +func HasLabel(obj ObjectMeta, label string) bool { + _, found := obj.Labels[label] + return found +} + +// SetMetaDataLabel sets the label and value +func SetMetaDataLabel(obj *ObjectMeta, label string, value string) { + if obj.Labels == nil { + obj.Labels = make(map[string]string) + } + obj.Labels[label] = value +} + // SingleObject returns a ListOptions for watching a single object. func SingleObject(meta ObjectMeta) ListOptions { return ListOptions{ diff --git a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/helpers_test.go b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/helpers_test.go index 62023c07967..85bb868a85b 100644 --- a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/helpers_test.go +++ b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/helpers_test.go @@ -195,3 +195,38 @@ func TestResetObjectMetaForStatus(t *testing.T) { t.Error(diff.ObjectDiff(meta, existingMeta)) } } + +func TestSetMetaDataLabel(t *testing.T) { + tests := []struct { + obj *ObjectMeta + label string + value string + want map[string]string + }{ + { + obj: &ObjectMeta{}, + label: "foo", + value: "bar", + want: map[string]string{"foo": "bar"}, + }, + { + obj: &ObjectMeta{Labels: map[string]string{"foo": "bar"}}, + label: "foo", + value: "baz", + want: map[string]string{"foo": "baz"}, + }, + { + obj: &ObjectMeta{Labels: map[string]string{"foo": "bar"}}, + label: "version", + value: "1.0.0", + want: map[string]string{"foo": "bar", "version": "1.0.0"}, + }, + } + + for _, tc := range tests { + SetMetaDataLabel(tc.obj, tc.label, tc.value) + if !reflect.DeepEqual(tc.obj.Labels, tc.want) { + t.Errorf("got %v, want %v", tc.obj.Labels, tc.want) + } + } +}