使用Helm在ConfigMap中包含shell脚本以YAML错误结束

时间:2018-05-18 21:12:24

标签: kubernetes kubernetes-helm

我想将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行:没有   找到预期的关键

3 个答案:

答案 0 :(得分:4)

根据helm chart template guide

  

可以使用修改模板声明的大括号语法   告诉模板引擎选择空格的特殊字符。   {{ - (添加了破折号和空格)表示空格应该   被扼杀,而 - }}意味着右边的空白应该是   消耗。小心!换行符是空格!

因此,为了防止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 -}}