我正在尝试将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
' '
打印的是完全一样的。
我试着研究,但我什么也找不到,我已经被困在这个问题上一段时间了。
发布于 2018-07-12 13:00:47
这似乎类似于从文件创建configMap时的kubernetes/kubernetes issue 36222。
在您的示例中,从data
块创建时就会发生这种情况。
最近的kubernetes/kubernetes issue 63503参考了所有印刷的问题。
我使用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。
发布于 2021-02-15 16:32:05
使用Kubernetes 1.20.2时,该问题已通过以下方式修复:
手动删除尾随空格使用:sed -i -E 's/[[:space:]]+$//g' file.txt
sed -i 's/\t/ /g' file.txt
(警告:手动管理文件末尾的空格行数发布于 2019-05-19 23:46:52
正如Github issue中所述,您需要删除每行末尾的所有空格,并确保没有任何特殊字符。
如果你是通过编程来实现这一点的,那么使用单行字符串比使用多行字符串要好得多。例如,在go中使用"" + "\n"
而不是反引号。
正确的结果应该使用管道|
data: |
some = foo
foo = some
https://stackoverflow.com/questions/51291521
复制相似问题