kubernetes configmap打印\ n而不是换行符

has*_*mim 7 yaml ansible kubernetes devops

我正在尝试将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)
Run Code Online (Sandbox Code Playgroud)

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

some = foo\n foo = some\n
Run Code Online (Sandbox Code Playgroud)

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

奇怪的是,如果我在文本中的某处加上单引号,它将按原样打印文本,但单引号如下:

data: |
 some = foo
 foo = some
' '
Run Code Online (Sandbox Code Playgroud)

打印完全一样。

我曾尝试进行研究,但找不到任何东西,现在已经坚持了一段时间。

fja*_*mes 14

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

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

  • 尽管我已经在使用空格,但删除尾随的空格就是我所需要的。最后的空行对我的情况并不重要 (3认同)
  • 如果您使用的是 VSCode,只需打开命令托盘(在 Mac 中使用 Cmd+Shift+P),然后运行“格式化文档”命令。它将清除 YAML 文件中的所有空格等,然后您将不再看到字符转义。 (2认同)

Von*_*onC 5

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

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

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

一条评论提到

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

202 年 8 月:问题 36222现在包括:

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

如果您从这样的文件创建了一个 configmap:

kubectl create configmap myconfigmap --from-file mydata.txt
Run Code Online (Sandbox Code Playgroud)

获取数据:

kubectl get cm myconfigmap -o json | jq '.data."mydata.txt""' -r
Run Code Online (Sandbox Code Playgroud)

还:

如果 cm 的格式变得奇怪,一个简单的黑客让它恢复正常是:

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
Run Code Online (Sandbox Code Playgroud)

2020 年 11 月更新,同样的问题包括:

我能够通过以下方式修复此行为:

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