我想将shell脚本模板安装到容器中。
我有以下configmap.yaml
:
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ template "myservice-chart.fullname" . }}--scripts-configmap
labels:
app: {{ template "myservice-chart.name" . }}
chart: {{ template "myservice-chart.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
data:
setup: |
{{ include "setup" . | indent 4 }}
这是我的setup.tpl
:
{{- define "setup" }}
#!/bin/bash
echo "Hello world!"
{{- end }}
当我做Helm干跑时,Helm生成这个(有效)YAML:
...
apiVersion: v1
kind: ConfigMap
metadata:
name: listening-donkey-myservice-chart-quorum-scripts-configmap
labels:
app: myservice-chart
chart: myservice-chart-0.1.0
release: listening-donkey
heritage: Tiller
data:
setup: |
#!/bin/bash
echo "Hello world!"
...
当我在没有--dry-run
的情况下运行它时,会产生此错误:
configmap.yaml:将YAML转换为JSON时出错:yaml:第13行:没有 找到预期的关键
答案 0 :(得分:4)
可以使用修改模板声明的大括号语法 告诉模板引擎选择空格的特殊字符。 {{ - (添加了破折号和空格)表示空格应该 被扼杀,而 - }}意味着右边的空白应该是 消耗。小心!换行符是空格!
因此,为了防止setup: |
以下无用的空行,configmap.yaml
应该如下:
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ template "myservice-chart.fullname" . }}--scripts-configmap
labels:
app: {{ template "myservice-chart.name" . }}
chart: {{ template "myservice-chart.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
data:
setup: |
{{- include "setup" . | indent 4 }}
答案 1 :(得分:0)
看起来Helm在setup: |
下创建了一条无用的空行,因此缩进不正确。
这就是我修复它的方法:
...
data:
setup: |
# Useless line to prevent "did not find expected key"
{{ include "setup" . | indent 4 }}
答案 2 :(得分:0)
这样做应该就够了,在开头和结尾添加'-'符号
data:
setup: |
# Useless line to prevent "did not find expected key"
{{- include "setup" . | indent 4 -}}