我有一个舵手3的模板,下面的yaml可以完美运行。它有一个多行的shell脚本,作为 initContainers
并按需要工作。
initContainers:
- name: check-crd
image: 'bitnami/kubectl:1.12'
env:
- name: CRDs
value: {{ .Values.CRDs.list }}
command:
- "/bin/bash"
- "-c"
- |
set -x
for i in $(echo $CRDs | tr ":" "\n")
do
kubectl get -o json $i
done
然而,当我试图将shell脚本移动到一个头盔值时,我得到一个错误。新的yaml和值。
initContainers:
- name: check-crd
image: 'bitnami/kubectl:1.12'
env:
- name: CRDs
value: {{ .Values.CRDs.list }}
command:
- "/bin/bash"
- "-c"
- {{ .Values.CRDs.script }}
The values.yaml
文件是。
CRDs:
list: 'mycrd1s.example.com:mycrd2s.example.com'
script: |
set -x
for i in $(echo $CRDs | tr ":" "\n")
do
kubectl get -o json $i
done
当我试图安装这个文件时,我得到了一个错误。
error converting YAML to JSON: yaml: line 30: could not find expected ':'
我知道这是某种YAML多行字符串的问题 但我不明白如何解决这个问题。我尝试过用各种组合 {{
, {{-
, toYaml
等,但无法解决这个问题。有什么办法可以利用多行shell脚本作为舵手值?
PS: 我知道我可以创建一个 ConfigMap
以shell脚本作为数据,并实现同样的功能,但我希望所有的事情都能通过yaml文件来完成,因为由于某些不可避免的原因,我不能创建一个configmap。
你需要添加nindent,像下面这样
initContainers:
- name: check-crd
image: 'bitnami/kubectl:1.12'
env:
- name: CRDs
value: {{ .Values.CRDs.list }}
command:
- "/bin/bash"
- "-c"
- {{- toYaml .Values.CRDs.script | nindent 12 }}