From 0866e2a54bf4a39c97e0ed24dfb515da9a3bc6c1 Mon Sep 17 00:00:00 2001 From: Phillip Wittrock Date: Wed, 13 May 2020 16:52:44 -0700 Subject: [PATCH] Set common labels and annotations as strings --- api/filters/annotations/annotations.go | 2 +- api/filters/annotations/annotations_test.go | 27 ++++++++++++++++ api/filters/fsslice/fsslice.go | 11 +++++-- api/filters/labels/labels.go | 2 +- api/filters/labels/labels_test.go | 35 +++++++++++++++++++++ 5 files changed, 73 insertions(+), 4 deletions(-) diff --git a/api/filters/annotations/annotations.go b/api/filters/annotations/annotations.go index b868d3acf..8e8b42f1b 100644 --- a/api/filters/annotations/annotations.go +++ b/api/filters/annotations/annotations.go @@ -30,7 +30,7 @@ func (f Filter) Filter(nodes []*yaml.RNode) ([]*yaml.RNode, error) { for _, k := range keys { if err := node.PipeE(fsslice.Filter{ FsSlice: f.FsSlice, - SetValue: fsslice.SetEntry(k, f.Annotations[k]), + SetValue: fsslice.SetEntry(k, f.Annotations[k], yaml.StringTag), CreateKind: yaml.MappingNode, // Annotations are MappingNodes. }); err != nil { return nil, err diff --git a/api/filters/annotations/annotations_test.go b/api/filters/annotations/annotations_test.go index e1acb5f6e..ee895ef9c 100644 --- a/api/filters/annotations/annotations_test.go +++ b/api/filters/annotations/annotations_test.go @@ -123,6 +123,33 @@ a: }, }, }, + + "number": { + input: ` +apiVersion: example.com/v1 +kind: Foo +metadata: + name: instance + annotations: + hero: batman + fiend: riddler +`, + expectedOutput: ` +apiVersion: example.com/v1 +kind: Foo +metadata: + name: instance + annotations: + hero: batman + fiend: riddler + 2: ford + clown: "1" +`, + filter: Filter{Annotations: annoMap{ + "clown": "1", + "2": "ford", + }}, + }, } for tn, tc := range testCases { diff --git a/api/filters/fsslice/fsslice.go b/api/filters/fsslice/fsslice.go index 69e62c6fb..5c171a90b 100644 --- a/api/filters/fsslice/fsslice.go +++ b/api/filters/fsslice/fsslice.go @@ -19,11 +19,18 @@ func SetScalar(value string) SetFn { } // SetEntry returns a SetFn to set an entry in a map -func SetEntry(key, value string) SetFn { +func SetEntry(key, value, tag string) SetFn { return func(node *yaml.RNode) error { return node.PipeE(yaml.FieldSetter{ - Name: key, StringValue: value}) + Name: key, + Value: yaml.NewRNode(&yaml.Node{ + Kind: yaml.ScalarNode, + Value: value, + Tag: tag, + }), + }) } + } var _ yaml.Filter = Filter{} diff --git a/api/filters/labels/labels.go b/api/filters/labels/labels.go index d9b0ad992..3e3e148ac 100644 --- a/api/filters/labels/labels.go +++ b/api/filters/labels/labels.go @@ -31,7 +31,7 @@ func (f Filter) Filter(nodes []*yaml.RNode) ([]*yaml.RNode, error) { for _, k := range keys { if err := node.PipeE(fsslice.Filter{ FsSlice: f.FsSlice, - SetValue: fsslice.SetEntry(k, f.Labels[k]), + SetValue: fsslice.SetEntry(k, f.Labels[k], yaml.StringTag), CreateKind: yaml.MappingNode, // Labels are MappingNodes. }); err != nil { return nil, err diff --git a/api/filters/labels/labels_test.go b/api/filters/labels/labels_test.go index 3a51cc4fe..878655406 100644 --- a/api/filters/labels/labels_test.go +++ b/api/filters/labels/labels_test.go @@ -291,6 +291,41 @@ metadata: }, }, }, + + "number": { + input: ` +apiVersion: example.com/v1 +kind: Foo +metadata: + name: instance + labels: + hero: batman + fiend: riddler +`, + expectedOutput: ` +apiVersion: example.com/v1 +kind: Foo +metadata: + name: instance + labels: + hero: batman + fiend: riddler + 1: emmett kelley + auto: "2" +`, + filter: Filter{ + Labels: labelMap{ + "1": "emmett kelley", + "auto": "2", + }, + FsSlice: []types.FieldSpec{ + { + Path: "metadata/labels", + CreateIfNotPresent: true, + }, + }, + }, + }, } for tn, tc := range testCases {