kubernetes的Map打印\n而不是换行符

mbyulnm0  于 2023-11-17  发布在  Kubernetes
关注(0)|答案(6)|浏览(185)

我正在尝试将一个Map部署到群集上

- 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
' '


指纹完全一样
我试着研究,但我找不到任何东西,我已经坚持了一段时间了。

dwbf0jvd

dwbf0jvd1#

这看起来与从文件创建XNUMBERMap时的kubernetes/kubernetes issue 36222类似。
在您的示例中,当从data块创建时会发生这种情况。
最近的kubernetes/kubernetes issue 63503引用了所有印刷品。
一条评论提到:
我在一个Map中添加了一个新的行,使用Tab进行标识。在更改为Spaces而不是Tab之后,我能够像预期的那样看到Map。
202年8月:问题36222现在包括:
如果你只是想要原始输出,因为它是在创建--from-file时读入的,你可以使用jq来获取原始字符串(没有转义换行符等)
如果你从一个像这样的文件中创建了一个Map:

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

字符串
获取数据:

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


还有:
如果cm的格式变得wierd一个简单的黑客让它恢复正常是:
kubectl get cm_map_name -o yaml > cm.yaml
现在复制cm.yaml文件的内容并将其传递到yamllint.com上。Yamllint.com是检查yaml文件linting的强大工具。
这将按预期为您提供具有正确格式的XMLMap。
将输出粘贴到另一个yaml文件中(例如- cm_ready.yaml)

kubectl apply -f cm_ready.yaml


更新2020年11月,相同的问题包括:
我可以通过以下方式修复此行为:

  • 不要使用制表符,转换为空格
  • 要删除换行符前的空格,请使用以下命令:
sed -i -E 's/[[:space:]]+$//g' File.ext


它似乎也将CRLF转换为LF。
更新十一月. 2023,chaoluo添加:
最后,我发现在values.yaml中没有定义值将导致\n问题。

data: {{ .Values.application.data}}


application.data未在yaml中定义

o4tp2gmn

o4tp2gmn2#

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

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

fhity93d3#

Github issue中所述,您需要删除每行末尾的所有空格,并确保没有任何特殊字符。
如果你是以图解的方式做这件事,你会更好地处理单行字符串,而不是多行字符串。例如,在go中使用"" + "\n"而不是反引号。
正确的结果应该使用管道|

data: |
 some = foo
 foo = some

字符串

mu0hgdu0

mu0hgdu04#

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

um6iljoc

um6iljoc5#

在我的例子中,删除这两个字符解决了这个问题:🐞💬
其他的(比如说不好的事情)并没有造成什么问题。️️

6qfn3psc

6qfn3psc6#

在我的例子中,问题是我使用了CRLF行结尾。切换到LF行结尾并使用kubectl重新创建了一个格式正确的Rummap资源

相关问题