Handle null values while formatting

This commit is contained in:
Phani Teja Marupaka
2021-06-27 16:55:16 -07:00
parent dac84d867e
commit 1aa7a1e709
2 changed files with 57 additions and 0 deletions

View File

@@ -1048,3 +1048,52 @@ metadata:
})
}
}
func TestFormatInput_NullCases(t *testing.T) {
y := `
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: null
spec:
selector:
app: nginx
ports:
- name: http
port: 80
targetPort: ~
nodePort: null
allocateLoadBalancerNodePorts: null
`
// keep the style on values that parse as non-string types
expected := `apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: null
spec:
selector:
app: nginx
ports:
- name: http
port: 80
targetPort: ~
nodePort: null
allocateLoadBalancerNodePorts: null
`
buff := &bytes.Buffer{}
err := kio.Pipeline{
Inputs: []kio.Reader{&kio.ByteReader{Reader: strings.NewReader(y)}},
Filters: []kio.Filter{FormatFilter{
UseSchema: true,
}},
Outputs: []kio.Writer{kio.ByteWriter{Writer: buff}},
}.Execute()
assert.NoError(t, err)
assert.Equal(t, expected, buff.String())
}

View File

@@ -45,6 +45,14 @@ func FormatNonStringStyle(node *Node, schema spec.Schema) {
default:
return
}
// if the node tag is null, make sure we don't add any non-null tags
// https://github.com/GoogleContainerTools/kpt/issues/2321
if node.Tag == NodeTagNull {
// must NOT quote null values
node.Style = 0
return
}
if tag, found := typeToTag[t]; found {
// make sure the right tag is set
node.Tag = tag