diff --git a/kyaml/kio/byteio_reader_test.go b/kyaml/kio/byteio_reader_test.go index 396fa5880..f509f25cb 100644 --- a/kyaml/kio/byteio_reader_test.go +++ b/kyaml/kio/byteio_reader_test.go @@ -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) }) } } diff --git a/kyaml/kio/byteio_readwriter_test.go b/kyaml/kio/byteio_readwriter_test.go index 4488cce6e..e096f2707 100644 --- a/kyaml/kio/byteio_readwriter_test.go +++ b/kyaml/kio/byteio_readwriter_test.go @@ -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 diff --git a/kyaml/kio/byteio_writer.go b/kyaml/kio/byteio_writer.go index 628ce438a..33e5a8999 100644 --- a/kyaml/kio/byteio_writer.go +++ b/kyaml/kio/byteio_writer.go @@ -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() diff --git a/kyaml/yaml/alias.go b/kyaml/yaml/alias.go index b4a60ad11..5a3730118 100644 --- a/kyaml/yaml/alias.go +++ b/kyaml/yaml/alias.go @@ -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() diff --git a/kyaml/yaml/util.go b/kyaml/yaml/util.go index df6c79d33..bada8711c 100644 --- a/kyaml/yaml/util.go +++ b/kyaml/yaml/util.go @@ -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) } diff --git a/kyaml/yaml/util_test.go b/kyaml/yaml/util_test.go index a83725c28..ef0d1fb5d 100644 --- a/kyaml/yaml/util_test.go +++ b/kyaml/yaml/util_test.go @@ -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`, },