diff --git a/kyaml/fn/framework/framework_test.go b/kyaml/fn/framework/framework_test.go index 82961ad19..ab50ad033 100644 --- a/kyaml/fn/framework/framework_test.go +++ b/kyaml/fn/framework/framework_test.go @@ -100,7 +100,7 @@ metadata: spec: replicas: 0` resourceListDeployment := `kind: ResourceList -apiVersion: config.kubernetes.io/v1alpha1 +apiVersion: config.kubernetes.io/v1 items: - kind: Deployment apiVersion: v1 @@ -109,7 +109,7 @@ items: namespace: default spec: replicas: 0` - outputResourceList := `apiVersion: config.kubernetes.io/v1alpha1 + outputResourceList := `apiVersion: config.kubernetes.io/v1 kind: ResourceList items: - kind: Deployment @@ -120,23 +120,25 @@ items: spec: replicas: 0 results: - name: Incompatible config - items: - - message: bad value for replicas - severity: error - resourceRef: - apiVersion: v1 - kind: Deployment - name: tester - namespace: default - field: - path: .spec.Replicas - currentValue: "0" - suggestedValue: "3" - file: - path: /path/to/deployment.yaml - - message: some error - severity: error` +- message: bad value for replicas + severity: error + resourceRef: + apiVersion: v1 + kind: Deployment + name: tester + namespace: default + field: + path: .spec.Replicas + currentValue: "0" + proposedValue: "3" + file: + path: /path/to/deployment.yaml +- message: some error + severity: error` + outputOtherWrap := strings.NewReplacer( + "kind: ResourceList", "kind: SomethingElse", + "apiVersion: config.kubernetes.io/v1", "apiVersion: fakeVersion", + ).Replace(outputResourceList) testCases := []struct { desc string @@ -176,35 +178,47 @@ 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 { t.Run(tc.desc, func(t *testing.T) { p := framework.ResourceListProcessorFunc(func(rl *framework.ResourceList) error { - rl.Result = &framework.Result{ - Name: "Incompatible config", - Items: []framework.ResultItem{ - { - Message: "bad value for replicas", - Severity: framework.Error, - ResourceRef: yaml.ResourceIdentifier{ - TypeMeta: yaml.TypeMeta{APIVersion: "v1", Kind: "Deployment"}, - NameMeta: yaml.NameMeta{Name: "tester", Namespace: "default"}, - }, - Field: framework.Field{ - Path: ".spec.Replicas", - CurrentValue: "0", - SuggestedValue: "3", - }, - File: framework.File{ - Path: "/path/to/deployment.yaml", - Index: 0, - }, + rl.Results = framework.Results{ + { + Message: "bad value for replicas", + Severity: framework.Error, + ResourceRef: yaml.ResourceIdentifier{ + TypeMeta: yaml.TypeMeta{APIVersion: "v1", Kind: "Deployment"}, + NameMeta: yaml.NameMeta{Name: "tester", Namespace: "default"}, }, - { - Message: "some error", - Severity: framework.Error, + Field: framework.Field{ + Path: ".spec.Replicas", + CurrentValue: "0", + ProposedValue: "3", }, + File: framework.File{ + Path: "/path/to/deployment.yaml", + Index: 0, + }, + }, + { + Message: "some error", + Severity: framework.Error, }, } return nil diff --git a/kyaml/kio/byteio_reader.go b/kyaml/kio/byteio_reader.go index 65a46d822..18281a536 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