diff --git a/kyaml/yaml/datamap.go b/kyaml/yaml/datamap.go index b3e7d5683..3181ff30f 100644 --- a/kyaml/yaml/datamap.go +++ b/kyaml/yaml/datamap.go @@ -52,11 +52,13 @@ func makeConfigMapValueRNode(s string) (field string, rN *RNode) { } func (rn *RNode) LoadMapIntoSecretData(m map[string]string) error { + mapNode, err := rn.Pipe(LookupCreate(MappingNode, DataField)) + if err != nil { + return err + } for _, k := range SortedMapKeys(m) { vrN := makeSecretValueRNode(m[k]) - if _, err := rn.Pipe( - LookupCreate(MappingNode, DataField), - SetField(k, vrN)); err != nil { + if _, err := mapNode.Pipe(SetField(k, vrN)); err != nil { return err } } diff --git a/kyaml/yaml/rnode.go b/kyaml/yaml/rnode.go index a8131705c..f0e001cfe 100644 --- a/kyaml/yaml/rnode.go +++ b/kyaml/yaml/rnode.go @@ -372,18 +372,7 @@ func (rn *RNode) GetAnnotations() (map[string]string, error) { // SetAnnotations tries to set the metadata annotations field. func (rn *RNode) SetAnnotations(m map[string]string) error { - meta, err := rn.Pipe(Lookup(MetadataField)) - if err != nil { - return err - } - if len(m) == 0 { - if meta == nil { - return nil - } - return meta.PipeE(Clear(AnnotationsField)) - } - return rn.SetMapField( - NewMapRNode(&m), MetadataField, AnnotationsField) + return rn.setMapInMetadata(m, AnnotationsField) } // GetLabels gets the metadata labels field. @@ -397,18 +386,32 @@ func (rn *RNode) GetLabels() (map[string]string, error) { // SetLabels sets the metadata labels field. func (rn *RNode) SetLabels(m map[string]string) error { + return rn.setMapInMetadata(m, LabelsField) +} + +// This established proper quoting on string values, and sorts by key. +func (rn *RNode) setMapInMetadata(m map[string]string, field string) error { meta, err := rn.Pipe(Lookup(MetadataField)) if err != nil { return err } - if len(m) == 0 { - if meta == nil { - return nil - } - return meta.PipeE(Clear(LabelsField)) + if err = meta.PipeE(Clear(field)); err != nil { + return err } - return rn.SetMapField( - NewMapRNode(&m), MetadataField, LabelsField) + if len(m) == 0 { + return nil + } + mapNode, err := meta.Pipe(LookupCreate(MappingNode, field)) + if err != nil { + return err + } + for _, k := range SortedMapKeys(m) { + if _, err := mapNode.Pipe( + SetField(k, NewStringRNode(m[k]))); err != nil { + return err + } + } + return nil } func (rn *RNode) SetMapField(value *RNode, path ...string) error {