【问题标题】:kubernetes configmap prints \n instead of a newlinekubernetes configmap 打印 \n 而不是换行符
【发布时间】:2018-12-19 20:26:05
【问题描述】:

我正在尝试将 configmap 部署到集群上

- name: Make/Update all configmaps on the cluster
 kubernetes:
 api_endpoint: blah
 url_username: blah
 url_password: blah
 inline_data:
 apiVersion: v1
 kind: ConfigMap
 metadata: 
 name: blah
namespace: blah
 data: my-data.txt: "{{ data }}"
 state: present
data: |
 some = foo
 foo = some
(using spinnaker to attach it to pods)

当我进入 pod 并打开 my-data.txt 时,它会显示:

some = foo\n foo = some\n

我希望它看起来完全像文本并打印换行符而不是 \n

如果我在文本中的某处放置 ' ' 单引号,它会按原样打印文本,但使用单引号:

data: |
 some = foo
 foo = some
' '

打印完全一样。

我试图研究,但我找不到任何东西,我已经坚持了一段时间。

【问题讨论】:

  • 请修正提供的 sn-p 中行的缩进

标签: kubernetes ansible yaml devops


【解决方案1】:

从文件创建 configMap 时,这似乎类似于 kubernetes/kubernetes issue 36222

在您的情况下,从 data 块创建时会发生这种情况。

最近的kubernetes/kubernetes issue 63503 引用了所有印刷的问题。

comment mentions:

我在 configMap 中添加了一个新行,使用 Tab 进行标识。更改为 Spaces 而不是 Tab 后,我能够按预期看到 configmap...

8 月 202 日:issue 36222 现在包括:

如果您只想要创建--from-file 时读取的原始输出,您可以使用jq 获取原始字符串(没有转义的换行符等)

如果您从这样的文件创建了配置映射:

kubectl create configmap myconfigmap --from-file mydata.txt

获取数据:

kubectl get cm myconfigmap -o json | jq '.data."mydata.txt""' -r

还有:

如果 cm 的格式变得奇怪,一个简单的 hack 可以让它恢复正常:

kubectl get cm configmap_name -o yaml > cm.yaml

现在复制cm.yaml 文件的内容并将其粘贴到yamllint.com 上。 Yamllint.com 是检查 yaml 文件 linting 的强大工具。
这将为您提供正确格式的配置映射。

将输出粘贴到另一个 yaml 文件中(例如 - cm_ready.yaml)

 kubectl apply -f cm_ready.yaml

2020 年 11 月更新,same issue 包括:

我能够通过以下方式解决此问题:

  • 不要使用制表符,转换为空格

  • 要删除换行符之前的空格,请使用:

      sed -i -E 's/[[:space:]]+$//g' File.ext
    

似乎也只会将 CRLF 转换为 LF。

【讨论】:

    【解决方案2】:

    使用 Kubernetes 1.20.2,该问题已通过以下方式解决:

    • 删除尾随空格使用: sed -i -E 's/[[:space:]]+$//g' file.txt
    • 使用sed -i 's/\t/ /g' file.txt 将制表符替换为空格(警告:手动管理空格数!)
    • 删除文件末尾的空行

    【讨论】:

    • 我只需要删除尾随空格,尽管我已经在使用空格。最后的空行对我的情况无关紧要
    【解决方案3】:

    Github issue 中所述,您需要删除每行末尾的所有空格,并确保您也没有任何特殊字符。

    如果您以编程方式执行此操作,则使用单行字符串而不是多行字符串会更好。例如在 go 中使用 "" + "\n" 而不是反引号。

    正确的结果应该使用管道|

    data: |
     some = foo
     foo = some
    

    【讨论】:

      【解决方案4】:

      删除data: 部分末尾的空白行为我解决了这个问题(我使用的是 yaml)

      【讨论】:

        【解决方案5】:

        就我而言,删除这两个字符解决了这个问题:??

        其他(如ℹ️✓⚠️✘)没有造成问题。

        【讨论】:

          猜你喜欢
          • 2010-11-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-20
          • 1970-01-01
          相关资源
          最近更新 更多