Suggested changes

This commit is contained in:
Phani Teja Marupaka
2021-07-12 23:27:09 -07:00
parent 74e867833a
commit 29be7fabe4
6 changed files with 54 additions and 116 deletions

View File

@@ -10,6 +10,7 @@ import (
"github.com/stretchr/testify/assert"
. "sigs.k8s.io/kustomize/kyaml/kio"
"sigs.k8s.io/kustomize/kyaml/kio/kioutil"
)
func TestByteReader(t *testing.T) {
@@ -807,15 +808,13 @@ items:
}
// TestByteReader_AddSeqIndentAnnotation tests if the internal.config.kubernetes.io/seqindent
// annotation is added to resources appropriately, the expectedOutput indentation may not
// match with the annotation as it is not using byteio_writer, this test will only verify
// byteio_reader behavior to add annotation
// annotation is added to resources appropriately
func TestByteReader_AddSeqIndentAnnotation(t *testing.T) {
type testCase struct {
name string
err string
input string
expectedOutput string
expectedAnnoValue string
OmitReaderAnnotations bool
}
@@ -829,17 +828,7 @@ spec:
- bar
- baz
`,
expectedOutput: `apiVersion: apps/v1
kind: Deployment
spec:
- foo
- bar
- baz
metadata:
annotations:
config.kubernetes.io/index: '0'
internal.config.kubernetes.io/seqindent: 'wide'
`,
expectedAnnoValue: "wide",
},
{
name: "read with compact indentation",
@@ -850,17 +839,7 @@ spec:
- bar
- baz
`,
expectedOutput: `apiVersion: apps/v1
kind: Deployment
spec:
- foo
- bar
- baz
metadata:
annotations:
config.kubernetes.io/index: '0'
internal.config.kubernetes.io/seqindent: 'compact'
`,
expectedAnnoValue: "compact",
},
{
name: "read with mixed indentation, wide wins",
@@ -874,20 +853,7 @@ env:
- foo
- bar
`,
expectedOutput: `apiVersion: apps/v1
kind: Deployment
spec:
- foo
- bar
- baz
env:
- foo
- bar
metadata:
annotations:
config.kubernetes.io/index: '0'
internal.config.kubernetes.io/seqindent: 'wide'
`,
expectedAnnoValue: "wide",
},
{
name: "read with mixed indentation, compact wins",
@@ -901,20 +867,7 @@ env:
- foo
- bar
`,
expectedOutput: `apiVersion: apps/v1
kind: Deployment
spec:
- foo
- bar
- baz
env:
- foo
- bar
metadata:
annotations:
config.kubernetes.io/index: '0'
internal.config.kubernetes.io/seqindent: 'compact'
`,
expectedAnnoValue: "compact",
},
{
name: "error if conflicting options",
@@ -924,16 +877,6 @@ spec:
- foo
- bar
- baz
env:
- foo
- bar
`,
expectedOutput: `apiVersion: apps/v1
kind: Deployment
spec:
- foo
- bar
- baz
env:
- foo
- bar
@@ -957,9 +900,8 @@ env:
return
}
assert.NoError(t, err)
actual, err := rNodes[0].String()
assert.NoError(t, err)
assert.Equal(t, tc.expectedOutput, actual)
actual := rNodes[0].GetAnnotations()[kioutil.SeqIndentAnnotation]
assert.Equal(t, tc.expectedAnnoValue, actual)
})
}
}

View File

@@ -425,14 +425,12 @@ spec:
`,
},
{
name: "round_trip with mixed indentations in same resource, wide wins",
name: "round_trip with mixed indentations in same resource, wide wins as it is first",
input: `
apiVersion: apps/v1
kind: Deployment
spec:
- foo
- bar
- baz
env:
- foo
- bar
@@ -442,22 +440,18 @@ apiVersion: apps/v1
kind: Deployment
spec:
- foo
- bar
- baz
env:
- foo
- bar
`,
},
{
name: "round_trip with mixed indentations in same resource, compact wins",
name: "round_trip with mixed indentations in same resource, compact wins as it is first",
input: `
apiVersion: apps/v1
kind: Deployment
spec:
- foo
- bar
- baz
env:
- foo
- bar
@@ -467,31 +461,6 @@ apiVersion: apps/v1
kind: Deployment
spec:
- foo
- bar
- baz
env:
- foo
- bar
`,
},
{
name: "round_trip with mixed indentations in same resource, compact in case of a tie",
input: `
apiVersion: apps/v1
kind: Deployment
spec:
- foo
- bar
env:
- foo
- bar
`,
expectedOutput: `
apiVersion: apps/v1
kind: Deployment
spec:
- foo
- bar
env:
- foo
- bar

View File

@@ -108,7 +108,7 @@ func (w ByteWriter) Write(inputNodes []*yaml.RNode) error {
// don't wrap the elements
if w.WrappingKind == "" {
for i := range nodes {
if seqIndentsForNodes[i] == string(yaml.WideSeqIndent) {
if seqIndentsForNodes[i] == string(yaml.WideSequenceStyle) {
encoder.DefaultSeqIndent()
} else {
encoder.CompactSeqIndent()

View File

@@ -11,19 +11,19 @@ import (
)
const (
WideSeqIndent SeqIndentType = "wide"
CompactSeqIndent SeqIndentType = "compact"
DefaultIndent = 2
WideSequenceStyle SequenceIndentStyle = "wide"
CompactSequenceStyle SequenceIndentStyle = "compact"
DefaultIndent = 2
)
// SeqIndentType holds the indentation style for sequence nodes
type SeqIndentType string
type SequenceIndentStyle string
// EncoderOptions are options that can be used to configure the encoder,
// do not expose new options without considerable justification
type EncoderOptions struct {
// SeqIndent is the indentation style for YAML Sequence nodes
SeqIndent SeqIndentType
SeqIndent SequenceIndentStyle
}
// Expose the yaml.v3 functions so this package can be used as a replacement
@@ -69,7 +69,7 @@ func MarshalWithOptions(in interface{}, opts *EncoderOptions) ([]byte, error) {
func NewEncoderWithOptions(w io.Writer, opts *EncoderOptions) *yaml.Encoder {
encoder := NewEncoder(w)
encoder.SetIndent(DefaultIndent)
if opts.SeqIndent == WideSeqIndent {
if opts.SeqIndent == WideSequenceStyle {
encoder.DefaultSeqIndent()
} else {
encoder.CompactSeqIndent()

View File

@@ -29,20 +29,21 @@ func DeriveSeqIndentStyle(originalYAML string) string {
numSpacesBeforeKeyElem := len(keyLine) - len(strings.TrimLeft(keyLine, " "))
trimmedKeyLine := strings.Trim(keyLine, " ")
if strings.HasSuffix(trimmedKeyLine, "|") || strings.HasSuffix(trimmedKeyLine, "|-") {
if strings.Count(trimmedKeyLine, ":") != 1 || !strings.HasSuffix(trimmedKeyLine, ":") {
// if the key line doesn't contain only one : that too at the end,
// this is not a sequence node, it is a wrapped sequence node string
// ignore it
continue
}
if numSpacesBeforeSeqElem == numSpacesBeforeKeyElem {
return string(CompactSeqIndent)
return string(CompactSequenceStyle)
}
if numSpacesBeforeSeqElem-numSpacesBeforeKeyElem == 2 {
return string(WideSeqIndent)
return string(WideSequenceStyle)
}
}
return string(CompactSeqIndent)
return string(CompactSequenceStyle)
}

View File

@@ -79,16 +79,42 @@ env:
expectedOutput: `compact`,
},
{
name: "skip wrapped sequence strings",
name: "skip wrapped sequence strings, pipe hyphen",
input: `apiVersion: apps/v1
kind: Deployment
spec: |-
- foo
- bar
env:
- foo
- bar
- baz
`,
expectedOutput: `compact`,
},
{
name: "skip wrapped sequence strings, pipe",
input: `apiVersion: apps/v1
kind: Deployment
spec: |
- foo
- bar
`,
expectedOutput: `compact`,
},
{
name: "skip wrapped sequence strings, right angle bracket",
input: `apiVersion: apps/v1
kind: Deployment
spec: >
- foo
- bar
`,
expectedOutput: `compact`,
},
{
name: "skip wrapped sequence strings, plus",
input: `apiVersion: apps/v1
kind: Deployment
spec: +
- foo
- bar
`,
expectedOutput: `compact`,
},