首页 > 解决方案 > YAML 中的块标量样式折叠多行在 k8s 中通过 kubectl 不起作用

问题描述

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,即在一行中,但这不会发生。难道我做错了什么?

标签: kubernetesyamlkubectlmultiline

解决方案


这实际上是设计使然,并且由于 json 中有额外的空格:

如果您在折叠样式的非第一行的开头插入额外的空格,它们将被保留,并带有一个额外的换行符。(流样式不会发生这种情况。)YAML 1.2.2 规范的第 6.5 节

此外,折叠不适用于包含前导空白的文本行周围的换行符。请注意,这样一个缩进更多的行可能只包含这样的前导空格。

这将按我的预期工作:

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


推荐阅读