Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Keep new line at end of file in yamlprocessor #4033

Merged
merged 9 commits into from Jan 10, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion go.mod
Expand Up @@ -20,7 +20,7 @@ require (
github.com/envoyproxy/protoc-gen-validate v0.6.6
github.com/fsouza/fake-gcs-server v1.21.0
github.com/go-sql-driver/mysql v1.6.0
github.com/goccy/go-yaml v1.9.3
github.com/goccy/go-yaml v1.9.8
github.com/golang-jwt/jwt v3.2.1+incompatible
github.com/golang/mock v1.5.0
github.com/golang/protobuf v1.5.2
Expand Down
3 changes: 3 additions & 0 deletions go.sum
Expand Up @@ -272,6 +272,8 @@ github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68=
github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
github.com/goccy/go-yaml v1.9.3 h1:9A7DkTBb7cZs5wqcqAhgR+2Ms8O7HTjT0SqOXO10HqM=
github.com/goccy/go-yaml v1.9.3/go.mod h1:U/jl18uSupI5rdI2jmuCswEA2htH9eXfferR3KfscvA=
github.com/goccy/go-yaml v1.9.8 h1:5gMyLUeU1/6zl+WFfR1hN7D2kf+1/eRGa7DFtToiBvQ=
github.com/goccy/go-yaml v1.9.8/go.mod h1:JubOolP3gh0HpiBc4BLRD4YmjEjHAmIIB2aaXKkTfoE=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE=
Expand Down Expand Up @@ -877,6 +879,7 @@ golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad h1:ntjMns5wyP/fN65tdBD4g8J5w8n015+iIIs9rtjXkY0=
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
Expand Down
2 changes: 1 addition & 1 deletion pkg/app/piped/eventwatcher/eventwatcher_test.go
Expand Up @@ -98,7 +98,7 @@ func TestModifyYAML(t *testing.T) {
path: "testdata/a.yaml",
field: "$.foo",
newValue: "2",
wantNewYml: []byte("foo: 2"),
wantNewYml: []byte("foo: 2\n"),
wantUpToDate: false,
wantErr: false,
},
Expand Down
8 changes: 4 additions & 4 deletions pkg/app/piped/executor/kubernetes/kubernetes_test.go
Expand Up @@ -601,7 +601,7 @@ metadata:
name: canary-by-config-change
data:
two: "2"
`,
`,
expected: `
apiVersion: apps/v1
kind: Deployment
Expand Down Expand Up @@ -645,7 +645,7 @@ metadata:
name: canary-by-config-change
data:
two: "2"
`,
`,
},
{
name: "multiple configs",
Expand Down Expand Up @@ -704,7 +704,7 @@ metadata:
type: my-type
data:
"one": "Mg=="
`,
`,
expected: `
apiVersion: apps/v1
kind: Deployment
Expand Down Expand Up @@ -762,7 +762,7 @@ metadata:
type: my-type
data:
"one": "Mg=="
`,
`,
},
}

Expand Down
Expand Up @@ -3,7 +3,7 @@ kind: ConfigMap
metadata:
name: envoy-config
data:
envoy-config: |-
envoy-config: |
admin:
address:
socket_address:
Expand Down Expand Up @@ -42,7 +42,7 @@ kind: ConfigMap
metadata:
name: envoy-config
data:
envoy-config: |-
envoy-config: |
admin:
address:
socket_address:
Expand Down
Expand Up @@ -3,7 +3,7 @@ kind: ConfigMap
metadata:
name: envoy-config
data:
envoy-config: |-
envoy-config: |
admin:
address:
socket_address:
Expand Down Expand Up @@ -151,7 +151,7 @@ kind: ConfigMap
metadata:
name: envoy-config
data:
envoy-config: |-
envoy-config: |
admin:
address:
socket_address:
Expand Down
12 changes: 6 additions & 6 deletions pkg/app/piped/platformprovider/kubernetes/deployment_test.go
Expand Up @@ -61,7 +61,7 @@ spec:
- server
ports:
- containerPort: 9085
`,
`,
expected: nil,
},
{
Expand Down Expand Up @@ -100,7 +100,7 @@ spec:
- name: config
configMap:
name: canary-by-config-change
`,
`,
expected: []string{
"canary-by-config-change",
},
Expand Down Expand Up @@ -164,7 +164,7 @@ spec:
- name: config2
configMap:
name: configmap-2
`,
`,
expected: []string{
"canary-by-config-change",
"configmap-1",
Expand Down Expand Up @@ -228,7 +228,7 @@ spec:
- server
ports:
- containerPort: 9085
`,
`,
expected: nil,
},
{
Expand Down Expand Up @@ -267,7 +267,7 @@ spec:
- name: config
secret:
secretName: canary-by-config-change
`,
`,
expected: []string{
"canary-by-config-change",
},
Expand Down Expand Up @@ -331,7 +331,7 @@ spec:
- name: config2
secret:
secretName: secret-2
`,
`,
expected: []string{
"canary-by-config-change",
"init-secret-1",
Expand Down
16 changes: 8 additions & 8 deletions pkg/app/piped/platformprovider/kubernetes/hasher_test.go
Expand Up @@ -42,7 +42,7 @@ apiVersion: v1
kind: ConfigMap
data: {}
binaryData: {}
`,
`,
expected: "42745tchd9",
},
{
Expand All @@ -53,7 +53,7 @@ kind: ConfigMap
data:
one: ""
binaryData: {}
`,
`,
expected: "9g67k2htb6",
},
{
Expand All @@ -66,7 +66,7 @@ data:
one: ""
three: "3"
binaryData: {}
`,
`,
expected: "f5h7t85m9b",
},
{
Expand All @@ -76,7 +76,7 @@ apiVersion: v1
kind: Secret
type: my-type
data: {}
`,
`,
expected: "t75bgf6ctb",
},
{
Expand All @@ -87,7 +87,7 @@ kind: Secret
type: my-type
data:
"one": ""
`,
`,
expected: "74bd68bm66",
},
{
Expand All @@ -100,7 +100,7 @@ data:
two: Mg==
one: ""
three: Mw==
`,
`,
expected: "dgcb6h9tmk",
},
{
Expand All @@ -119,7 +119,7 @@ type: my-type
data:
one: ""
three: Mw==
`,
`,
expected: "57hhd7795k",
},
{
Expand Down Expand Up @@ -151,7 +151,7 @@ spec:
- hello
ports:
- containerPort: 9085
`,
`,
expected: "db48kd6689",
},
}
Expand Down
9 changes: 6 additions & 3 deletions pkg/app/piped/platformprovider/kubernetes/manifest.go
Expand Up @@ -224,12 +224,15 @@ func ParseManifests(data string) ([]Manifest, error) {
manifests = make([]Manifest, 0, len(parts))
)

for _, part := range parts {
for i, part := range parts {
// Ignore all the cases where no content between separator.
part = strings.TrimSpace(part)
if len(part) == 0 {
if len(strings.TrimSpace(part)) == 0 {
continue
}
// Append new line which trim by document separator.
if i != len(parts)-1 {
part += "\n"
}
var obj unstructured.Unstructured
if err := yaml.Unmarshal([]byte(part), &obj); err != nil {
return nil, err
Expand Down
84 changes: 80 additions & 4 deletions pkg/app/piped/platformprovider/kubernetes/manifest_test.go
Expand Up @@ -81,28 +81,104 @@ metadata:
}),
},
},
{
name: "contains new line at the end of file",
manifests: `
apiVersion: v1
kind: Kind1
metadata:
name: config
extra: |
single-new-line
`,
want: []Manifest{
maker("config", "Kind1", map[string]interface{}{
"name": "config",
"extra": "single-new-line\n",
}),
},
},
{
name: "not contains new line at the end of file",
manifests: `
apiVersion: v1
kind: Kind1
metadata:
name: config
extra: |
no-new-line`,
want: []Manifest{
maker("config", "Kind1", map[string]interface{}{
"name": "config",
"extra": "no-new-line",
}),
},
},
{
name: "multiple manifests",
manifests: `
apiVersion: v1
kind: Kind1
metadata:
name: config1
extra: |-
no-new-line
---
apiVersion: v1
kind: Kind2
metadata:
name: config2
extra: |
single-new-line-1
---
apiVersion: v1
kind: Kind3
metadata:
name: config3
`,
extra: |
single-new-line-2


---
apiVersion: v1
kind: Kind4
metadata:
name: config4
extra: |+
multiple-new-line-1


---
apiVersion: v1
kind: Kind5
metadata:
name: config5
extra: |+
multiple-new-line-2


`,
want: []Manifest{
maker("config1", "Kind1", map[string]interface{}{"name": "config1"}),
maker("config2", "Kind2", map[string]interface{}{"name": "config2"}),
maker("config3", "Kind3", map[string]interface{}{"name": "config3"}),
maker("config1", "Kind1", map[string]interface{}{
"name": "config1",
"extra": "no-new-line",
}),
maker("config2", "Kind2", map[string]interface{}{
"name": "config2",
"extra": "single-new-line-1\n",
}),
maker("config3", "Kind3", map[string]interface{}{
"name": "config3",
"extra": "single-new-line-2\n",
}),
maker("config4", "Kind4", map[string]interface{}{
"name": "config4",
"extra": "multiple-new-line-1\n\n\n",
}),
maker("config5", "Kind5", map[string]interface{}{
"name": "config5",
"extra": "multiple-new-line-2\n\n\n",
}),
},
},
}
Expand Down