diff --git a/kyaml/comments/comments.go b/kyaml/comments/comments.go index d67517e99..0dfc4d8de 100644 --- a/kyaml/comments/comments.go +++ b/kyaml/comments/comments.go @@ -54,7 +54,7 @@ func (c *copier) VisitList(s walk.Sources, _ *openapi.ResourceSchema, _ walk.Lis origin := originItems[i] if dest.Value == origin.Value { - // We should do it recursively on each node in the list. + // We copy the comments recursively on each node in the list. if err := CopyComments(yaml.NewRNode(dest), yaml.NewRNode(origin)); err != nil { return nil, err } diff --git a/kyaml/kio/byteio_writer.go b/kyaml/kio/byteio_writer.go index a0ecdb381..00b241629 100644 --- a/kyaml/kio/byteio_writer.go +++ b/kyaml/kio/byteio_writer.go @@ -52,10 +52,7 @@ var _ Writer = ByteWriter{} func (w ByteWriter) Write(inputNodes []*yaml.RNode) error { // Copy the nodes to prevent writer from mutating the original nodes. - var nodes []*yaml.RNode - for i := range inputNodes { - nodes = append(nodes, inputNodes[i].Copy()) - } + nodes := copyRNodes(inputNodes) yaml.DoSerializationHacksOnNodes(nodes) if w.Sort { if err := kioutil.SortNodes(nodes); err != nil { @@ -135,8 +132,15 @@ func (w ByteWriter) Write(inputNodes []*yaml.RNode) error { for i := range nodes { items.Content = append(items.Content, nodes[i].YNode()) } - err := encoder.Encode(doc) - return err + return encoder.Encode(doc) +} + +func copyRNodes(in []*yaml.RNode) []*yaml.RNode { + out := make([]*yaml.RNode, len(in)) + for i := range in { + out[i] = in[i].Copy() + } + return out } // shouldJSONEncodeSingleBareNode determines if nodes contain a single node that should not be diff --git a/kyaml/kio/byteio_writer_test.go b/kyaml/kio/byteio_writer_test.go index c284d04a8..76d93d265 100644 --- a/kyaml/kio/byteio_writer_test.go +++ b/kyaml/kio/byteio_writer_test.go @@ -91,6 +91,127 @@ a: b #first `, }, + // + // Test Case + // + { + name: "handle_comments", + items: []string{ + `# comment 0 +apiVersion: apps/v1 +kind: Deployment +metadata: + name: my-nginx + namespace: my-space + labels: + env: dev + foo: bar +spec: + # comment 1 + replicas: 3 + selector: + # comment 2 + matchLabels: # comment 3 + # comment 4 + app: nginx # comment 5 + template: + metadata: + labels: + app: nginx + spec: + # comment 6 + containers: + # comment 7 + - name: nginx + image: nginx:1.14.2 # comment 8 + ports: + # comment 9 + - containerPort: 80 # comment 10 +`, + `apiVersion: v1 +kind: Service +metadata: + name: my-service +spec: + ports: + # comment 1 + - name: etcd-server-ssl + port: 2380 + # comment 2 + - name: etcd-client-ssl + port: 2379 +`, + `apiVersion: constraints.gatekeeper.sh/v1beta1 +kind: EnforceFoo +metadata: + name: enforce-foo +spec: + parameters: + naming_rules: + - kind: Folder + patterns: + # comment 1 + - ^(dev|prod|staging|qa|shared)$ +`, + }, + expectedOutput: `# comment 0 +apiVersion: apps/v1 +kind: Deployment +metadata: + name: my-nginx + namespace: my-space + labels: + env: dev + foo: bar +spec: + # comment 1 + replicas: 3 + selector: + # comment 2 + matchLabels: # comment 3 + # comment 4 + app: nginx # comment 5 + template: + metadata: + labels: + app: nginx + spec: + # comment 6 + containers: + # comment 7 + - name: nginx + image: nginx:1.14.2 # comment 8 + ports: + # comment 9 + - containerPort: 80 # comment 10 +--- +apiVersion: v1 +kind: Service +metadata: + name: my-service +spec: + ports: + # comment 1 + - name: etcd-server-ssl + port: 2380 + # comment 2 + - name: etcd-client-ssl + port: 2379 +--- +apiVersion: constraints.gatekeeper.sh/v1beta1 +kind: EnforceFoo +metadata: + name: enforce-foo +spec: + parameters: + naming_rules: + - kind: Folder + patterns: + # comment 1 + - ^(dev|prod|staging|qa|shared)$ +`, + }, + // // Test Case // diff --git a/kyaml/kio/filters/fmtr_test.go b/kyaml/kio/filters/fmtr_test.go index e988a3ff5..156bbcf64 100644 --- a/kyaml/kio/filters/fmtr_test.go +++ b/kyaml/kio/filters/fmtr_test.go @@ -420,8 +420,8 @@ spec: image: nginx:1.7.9 # this is a container ports: - - # this is a port - containerPort: 80 + # this is a port + - containerPort: 80 ` s, err := FormatInput(strings.NewReader(y)) assert.NoError(t, err) diff --git a/kyaml/yaml/serialization.go b/kyaml/yaml/serialization.go index ff47157df..9f2c6a3e4 100644 --- a/kyaml/yaml/serialization.go +++ b/kyaml/yaml/serialization.go @@ -40,6 +40,7 @@ func DoSerializationHacks(node *yaml.Node) { } node.Content[0].HeadComment = "" } + DoSerializationHacks(node) } } }