Блочный скалярный стиль, сложенный многострочно в YAML, не работает в k8s через kubectl

#kubernetes #yaml #kubectl #multiline

Вопрос:

Я бегу kubectl apply за этим файлом:

 apiVersion: v1
kind: ConfigMap
metadata:
  name: test
  namespace: test
data:
  folded: >-
    {
      "field1": 1,
      "test2": "test"
    }

  literal: |-
    {
      "field1": 1,
      "test2": "test"
    }
  
  single-quoted:
    '{
      "field1": 1,
      "test2": "test"
    }'
 

И я получаю этот результат после выполнения kubectl describe :

 Data
====
folded:
----
{
  "field1": 1,
  "test2": "test"
}
literal:
----
{
  "field1": 1,
  "test2": "test"
}
single-quoted:
----
{ "field1": 1, "test2": "test" }
 

Согласно документации , если я все сделал правильно, я ожидал folded , что все будет так же, как single-quoted , то есть в одной строке, но этого не происходит. Я делаю что-то не так?

Ответ №1:

На самом деле это сделано специально и из-за дополнительных пробелов в json:

Если вы вставите дополнительные пробелы в начале не первых строк в сложенном виде, они будут сохранены с дополнительной новой строкой. (Этого не происходит со стилями потока.) Раздел 6.5 спецификации YAML 1.2.2:

Кроме того, сгибание не применяется к разрывам строк, окружающим текстовые строки, содержащие начальные пробелы. Обратите внимание, что такая линия с большим отступом может состоять только из такого ведущего пробела.

Это будет работать так, как я и предполагал:

 apiVersion: v1
kind: ConfigMap
metadata:
  name: test
  namespace: test
data:
  folded: >-
    {
    "field1": 1,
    "test2": "test"
    }