From 7aa33ff471955b44cf68f2e6831d461c9b5fc6be Mon Sep 17 00:00:00 2001 From: koba1t Date: Thu, 24 Feb 2022 09:49:31 +0900 Subject: [PATCH] add edit add labels command add option for labels without selector --- kustomize/commands/edit/add/addmetadata.go | 16 +++++++++---- .../commands/edit/add/addmetadata_test.go | 24 +++++++++++++++++++ 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/kustomize/commands/edit/add/addmetadata.go b/kustomize/commands/edit/add/addmetadata.go index a7483b48d1..e6bfc31405 100644 --- a/kustomize/commands/edit/add/addmetadata.go +++ b/kustomize/commands/edit/add/addmetadata.go @@ -34,10 +34,11 @@ func (k kindOfAdd) String() string { } type addMetadataOptions struct { - force bool - metadata map[string]string - mapValidator func(map[string]string) error - kind kindOfAdd + force bool + metadata map[string]string + mapValidator func(map[string]string) error + kind kindOfAdd + labelsWithoutSelector bool } // newCmdAddAnnotation adds one or more commonAnnotations to the kustomization file. @@ -79,6 +80,9 @@ func newCmdAddLabel(fSys filesys.FileSystem, v func(map[string]string) error) *c cmd.Flags().BoolVarP(&o.force, "force", "f", false, "overwrite commonLabel if it already exists", ) + cmd.Flags().BoolVar(&o.labelsWithoutSelector, "without-selector", false, + "using add labels without selector option", + ) return cmd } @@ -127,6 +131,10 @@ func (o *addMetadataOptions) addAnnotations(m *types.Kustomization) error { } func (o *addMetadataOptions) addLabels(m *types.Kustomization) error { + if o.labelsWithoutSelector { + m.Labels = append(m.Labels, types.Label{Pairs: make(map[string]string), IncludeSelectors: false}) + return o.writeToMap(m.Labels[len(m.Labels)-1].Pairs, label) + } if m.CommonLabels == nil { m.CommonLabels = make(map[string]string) } diff --git a/kustomize/commands/edit/add/addmetadata_test.go b/kustomize/commands/edit/add/addmetadata_test.go index c3c5ca55cb..ffaf778bb7 100644 --- a/kustomize/commands/edit/add/addmetadata_test.go +++ b/kustomize/commands/edit/add/addmetadata_test.go @@ -273,3 +273,27 @@ func TestAddLabelForce(t *testing.T) { assert.NoError(t, cmd.RunE(cmd, args)) v.VerifyCall() } + +func TestAddLabelWithoutSelector(t *testing.T) { + var o addMetadataOptions + o.labelsWithoutSelector = true + m := makeKustomization(t) + o.metadata = map[string]string{"new": "label"} + assert.NoError(t, o.addLabels(m)) + assert.Equal(t, m.Labels[0], types.Label{Pairs: map[string]string{"new": "label"}}) +} + +func TestAddLabelWithoutSelectorAddLabel(t *testing.T) { + var o addMetadataOptions + o.metadata = map[string]string{"owls": "cute", "otters": "adorable"} + o.labelsWithoutSelector = true + + m := makeKustomization(t) + assert.NoError(t, o.addLabels(m)) + // adding new labels should work + o.metadata = map[string]string{"new": "label"} + assert.NoError(t, o.addLabels(m)) + + assert.Equal(t, m.Labels[0], types.Label{Pairs: map[string]string{"owls": "cute", "otters": "adorable"}}) + assert.Equal(t, m.Labels[1], types.Label{Pairs: map[string]string{"new": "label"}}) +}