diff --git a/pkg/commands/build/testdata/testcase-transformer-no-create-arrays/expected.yaml b/pkg/commands/build/testdata/testcase-transformer-no-create-arrays/expected.yaml new file mode 100644 index 000000000..9eafc8f9d --- /dev/null +++ b/pkg/commands/build/testdata/testcase-transformer-no-create-arrays/expected.yaml @@ -0,0 +1,57 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + labels: + notIn: arrays + name: persisted-test +spec: + replicas: 1 + selector: + matchLabels: + app: test + notIn: arrays + serviceName: test + template: + metadata: + labels: + app: test + notIn: arrays + spec: + containers: + - image: nginx + name: nginx + volumeClaimTemplates: + - metadata: + labels: + notIn: arrays + name: www + spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + storageClassName: my-storage-class +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + labels: + notIn: arrays + name: test +spec: + replicas: 1 + selector: + matchLabels: + app: test + notIn: arrays + serviceName: test + template: + metadata: + labels: + app: test + notIn: arrays + spec: + containers: + - image: nginx + name: nginx diff --git a/pkg/commands/build/testdata/testcase-transformer-no-create-arrays/in/kustomization.yaml b/pkg/commands/build/testdata/testcase-transformer-no-create-arrays/in/kustomization.yaml new file mode 100644 index 000000000..593d2618a --- /dev/null +++ b/pkg/commands/build/testdata/testcase-transformer-no-create-arrays/in/kustomization.yaml @@ -0,0 +1,6 @@ +commonLabels: + notIn: arrays + +resources: +- statefulset.yaml +- statefulset-with-template.yaml diff --git a/pkg/commands/build/testdata/testcase-transformer-no-create-arrays/in/statefulset-with-template.yaml b/pkg/commands/build/testdata/testcase-transformer-no-create-arrays/in/statefulset-with-template.yaml new file mode 100644 index 000000000..2e4eba617 --- /dev/null +++ b/pkg/commands/build/testdata/testcase-transformer-no-create-arrays/in/statefulset-with-template.yaml @@ -0,0 +1,29 @@ +kind: StatefulSet +apiVersion: apps/v1 +metadata: + name: persisted-test + labels: + notIn: arrays +spec: + serviceName: "test" + replicas: 1 + selector: + matchLabels: + app: test + template: + metadata: + labels: + app: test + spec: + containers: + - name: nginx + image: nginx + volumeClaimTemplates: + - metadata: + name: www + spec: + accessModes: [ "ReadWriteOnce" ] + storageClassName: my-storage-class + resources: + requests: + storage: 1Gi diff --git a/pkg/commands/build/testdata/testcase-transformer-no-create-arrays/in/statefulset.yaml b/pkg/commands/build/testdata/testcase-transformer-no-create-arrays/in/statefulset.yaml new file mode 100644 index 000000000..c81a03c26 --- /dev/null +++ b/pkg/commands/build/testdata/testcase-transformer-no-create-arrays/in/statefulset.yaml @@ -0,0 +1,20 @@ +kind: StatefulSet +apiVersion: apps/v1 +metadata: + name: test + labels: + notIn: arrays +spec: + serviceName: "test" + replicas: 1 + selector: + matchLabels: + app: test + template: + metadata: + labels: + app: test + spec: + containers: + - name: nginx + image: nginx diff --git a/pkg/commands/build/testdata/testcase-transformer-no-create-arrays/test.yaml b/pkg/commands/build/testdata/testcase-transformer-no-create-arrays/test.yaml new file mode 100644 index 000000000..6fa743457 --- /dev/null +++ b/pkg/commands/build/testdata/testcase-transformer-no-create-arrays/test.yaml @@ -0,0 +1,4 @@ +description: arrays are not autocreated by transformers +args: [] +filename: testdata/testcase-transformer-no-create-arrays/in +expectedStdout: testdata/testcase-transformer-no-create-arrays/expected.yaml diff --git a/pkg/transformers/config/defaultconfig/commonlabels.go b/pkg/transformers/config/defaultconfig/commonlabels.go index 7efd6a54d..875f602fa 100644 --- a/pkg/transformers/config/defaultconfig/commonlabels.go +++ b/pkg/transformers/config/defaultconfig/commonlabels.go @@ -110,7 +110,7 @@ commonLabels: group: apps kind: StatefulSet -- path: spec/volumeClaimTemplates/metadata/labels +- path: spec/volumeClaimTemplates[]/metadata/labels create: true group: apps kind: StatefulSet diff --git a/pkg/transformers/mutatefield.go b/pkg/transformers/mutatefield.go index eddfeee20..71d688e1e 100644 --- a/pkg/transformers/mutatefield.go +++ b/pkg/transformers/mutatefield.go @@ -33,18 +33,20 @@ func mutateField( return nil } - _, found := m[pathToField[0]] + firstPathSegment, isArray := getFirstPathSegment(pathToField) + + _, found := m[firstPathSegment] if !found { - if !createIfNotPresent { + if !createIfNotPresent || isArray { return nil } - m[pathToField[0]] = map[string]interface{}{} + m[firstPathSegment] = map[string]interface{}{} } if len(pathToField) == 1 { var err error for _, fn := range fns { - m[pathToField[0]], err = fn(m[pathToField[0]]) + m[firstPathSegment], err = fn(m[firstPathSegment]) if err != nil { return err } @@ -52,7 +54,7 @@ func mutateField( return nil } - v := m[pathToField[0]] + v := m[firstPathSegment] newPathToField := pathToField[1:] switch typedV := v.(type) { case nil: @@ -79,3 +81,10 @@ func mutateField( return fmt.Errorf("%#v is not expected to be a primitive type", typedV) } } + +func getFirstPathSegment(pathToField []string) (string, bool) { + if strings.HasSuffix(pathToField[0], "[]") { + return pathToField[0][:len(pathToField[0])-2], true + } + return pathToField[0], false +}