我正在尝试将一个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
' '
型
指纹完全一样
我试着研究,但我找不到任何东西,我已经坚持了一段时间了。
6条答案
按热度按时间dwbf0jvd1#
这看起来与从文件创建XNUMBERMap时的kubernetes/kubernetes issue 36222类似。
在您的示例中,当从
data
块创建时会发生这种情况。最近的kubernetes/kubernetes issue 63503引用了所有印刷品。
一条评论提到:
我在一个Map中添加了一个新的行,使用Tab进行标识。在更改为Spaces而不是Tab之后,我能够像预期的那样看到Map。
202年8月:问题36222现在包括:
如果你只是想要原始输出,因为它是在创建
--from-file
时读入的,你可以使用jq
来获取原始字符串(没有转义换行符等)如果你从一个像这样的文件中创建了一个Map:
字符串
获取数据:
型
还有:
如果cm的格式变得wierd一个简单的黑客让它恢复正常是:
kubectl get cm_map_name -o yaml > cm.yaml
现在复制
cm.yaml
文件的内容并将其传递到yamllint.com
上。Yamllint.com是检查yaml文件linting的强大工具。这将按预期为您提供具有正确格式的XMLMap。
将输出粘贴到另一个yaml文件中(例如- cm_ready.yaml)
型
更新2020年11月,相同的问题包括:
我可以通过以下方式修复此行为:
型
它似乎也将CRLF转换为LF。
更新十一月. 2023,chaoluo添加:
最后,我发现在
values.yaml
中没有定义值将导致\n
问题。型
application.data
未在yaml中定义o4tp2gmn2#
使用Kubernetes 1.20.2,通过以下方式修复了该问题:
sed -i -E 's/[[:space:]]+$//g' file.txt
sed -i 's/\t/ /g' file.txt
将制表符替换为空格(警告:手动管理空格数!)fhity93d3#
如Github issue中所述,您需要删除每行末尾的所有空格,并确保没有任何特殊字符。
如果你是以图解的方式做这件事,你会更好地处理单行字符串,而不是多行字符串。例如,在go中使用
"" + "\n"
而不是反引号。正确的结果应该使用管道
|
字符串
mu0hgdu04#
在
data:
部分的末尾删除一个空行,为我解决了这个问题(我使用的是yaml)um6iljoc5#
在我的例子中,删除这两个字符解决了这个问题:🐞💬
其他的(比如说不好的事情)并没有造成什么问题。️️
6qfn3psc6#
在我的例子中,问题是我使用了CRLF行结尾。切换到LF行结尾并使用kubectl重新创建了一个格式正确的Rummap资源