gpt4 book ai didi

kubernetes - 使用多行 shell 脚本作为 helm 值

转载 作者:行者123 更新时间:2023-12-02 11:55:31 24 4
gpt4 key购买 nike

我有一个带有以下 yaml 的 helm 3 模板,它工作得非常好。它有一个多行 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 脚本移动到 helm 值时,我得到了一个错误。新的 yaml 和值:

  initContainers:
- name: check-crd
image: 'bitnami/kubectl:1.12'
env:
- name: CRDs
value: {{ .Values.CRDs.list }}
command:
- "/bin/bash"
- "-c"
- {{ .Values.CRDs.script }}

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

当我尝试 helm3 安装这个时,我得到一个错误:

 error converting YAML to JSON: yaml: line 30: could not find expected ':'

我知道这是某种 YAML 多行字符串问题,但不知道如何解决。我尝试了 {{{{-toYaml 等的各种组合,但无法解决此问题。有什么方法可以将多行 shell 脚本用作 helm 值?

PS:我知道我可以使用 shell 脚本作为数据创建一个 ConfigMap 并实现相同的功能,但我希望一切都通过 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 }}

关于kubernetes - 使用多行 shell 脚本作为 helm 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61473732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com