首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >kubernetes configmap打印\n而不是换行符

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

Stack Overflow用户
提问于 2018-07-12 01:47:06
回答 5查看 15K关注 0票数 16

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

代码语言:javascript
运行
复制
- 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时,它显示:

代码语言:javascript
运行
复制
some = foo\n foo = some\n

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

奇怪的是,如果我在文本中的某处加上‘’单引号,它会按原样打印文本,但带有单引号,如下所示:

代码语言:javascript
运行
复制
data: |
 some = foo
 foo = some
' '

打印的是完全一样的。

我试着研究,但我什么也找不到,我已经被困在这个问题上一段时间了。

EN

回答 5

Stack Overflow用户

发布于 2018-07-12 13:00:47

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

在您的示例中,从data块创建时就会发生这种情况。

最近的kubernetes/kubernetes issue 63503参考了所有印刷的问题。

一个comment mentions

我使用Tab键在configMap中添加了一行新行。在切换到空格而不是Tab后,我可以像预期的那样看到configmap ...

年8月:issue 36222现在包括:

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

如果您从如下所示的文件创建了configmap:

kubectl create configmap myconfigmap --从文件mydata.txt

获取数据:

kubectl get cm myconfigmap -o json | jq‘.data.“mydata.txt”“-r

另外:

如果cm的格式变得奇怪,让它恢复正常的简单方法是:

kubectl get cm configmap_name -o yaml > cm.yaml

现在复制cm.yaml文件的内容并将其传递到yamllint.com。Yamllint.com是一款功能强大的工具,可以检查yaml文件的损坏情况。

这将为您提供预期的configmap和正确的格式。

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

kubectl apply -f cm_ready.yaml

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

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

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

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

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

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

票数 7
EN

Stack Overflow用户

发布于 2021-02-15 16:32:05

使用Kubernetes 1.20.2时,该问题已通过以下方式修复:

手动删除尾随空格使用:sed -i -E 's/[[:space:]]+$//g' file.txt

  • replacing制表符使用空格使用sed -i 's/\t/ /g' file.txt (警告:手动管理文件末尾的空格行数
票数 3
EN

Stack Overflow用户

发布于 2019-05-19 23:46:52

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

如果你是通过编程来实现这一点的,那么使用单行字符串比使用多行字符串要好得多。例如,在go中使用"" + "\n"而不是反引号。

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

代码语言:javascript
运行
复制
data: |
 some = foo
 foo = some
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51291521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档