diff --git a/kyaml/fn/framework/framework_test.go b/kyaml/fn/framework/framework_test.go index 6a98965e2d0..d893a35948c 100644 --- a/kyaml/fn/framework/framework_test.go +++ b/kyaml/fn/framework/framework_test.go @@ -139,6 +139,10 @@ results: path: /path/to/deployment.yaml - message: some error severity: error` + outputOtherWrap := strings.NewReplacer( + "kind: ResourceList", "kind: SomethingElse", + "apiVersion: config.kubernetes.io/v1alpha1", "apiVersion: fakeVersion", + ).Replace(outputResourceList) testCases := []struct { desc string @@ -178,6 +182,21 @@ results: input: singleDeployment, want: outputResourceList, }, + { + desc: "no wrap has precedence", + noWrap: true, + wrapKind: kio.ResourceListKind, + wrapAPIVersion: kio.ResourceListAPIVersion, + input: singleDeployment, + want: singleDeployment, + }, + { + desc: "honor specified wrapping kind", + wrapKind: "SomethingElse", + wrapAPIVersion: "fakeVersion", + input: resourceListDeployment, + want: outputOtherWrap, + }, } for _, tc := range testCases { diff --git a/kyaml/kio/byteio_reader.go b/kyaml/kio/byteio_reader.go index 9036b1739cf..0cdf7aef464 100644 --- a/kyaml/kio/byteio_reader.go +++ b/kyaml/kio/byteio_reader.go @@ -67,12 +67,12 @@ func (rw *ByteReadWriter) Read() ([]*yaml.RNode, error) { WrapBareSeqNode: rw.WrapBareSeqNode, } val, err := b.Read() + rw.Results = b.Results + if rw.FunctionConfig == nil { rw.FunctionConfig = b.FunctionConfig } - rw.Results = b.Results - - if !rw.NoWrap { + if !rw.NoWrap && rw.WrappingKind == "" { rw.WrappingAPIVersion = b.WrappingAPIVersion rw.WrappingKind = b.WrappingKind } @@ -80,15 +80,18 @@ func (rw *ByteReadWriter) Read() ([]*yaml.RNode, error) { } func (rw *ByteReadWriter) Write(nodes []*yaml.RNode) error { - return ByteWriter{ + w := ByteWriter{ Writer: rw.Writer, KeepReaderAnnotations: rw.KeepReaderAnnotations, Style: rw.Style, FunctionConfig: rw.FunctionConfig, Results: rw.Results, - WrappingAPIVersion: rw.WrappingAPIVersion, - WrappingKind: rw.WrappingKind, - }.Write(nodes) + } + if !rw.NoWrap { + w.WrappingAPIVersion = rw.WrappingAPIVersion + w.WrappingKind = rw.WrappingKind + } + return w.Write(nodes) } // ParseAll reads all of the inputs into resources