使用多行 shell 脚本作为 helm 值

San*_*kar 2 yaml kubernetes kubernetes-helm

我有一个带有以下 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
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将 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 }}
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

当我尝试 helm3 安装它时,出现错误:

 error converting YAML to JSON: yaml: line 30: could not find expected ':'
Run Code Online (Sandbox Code Playgroud)

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

PS:我知道我可以ConfigMap使用 shell 脚本作为数据创建一个并实现相同的功能,但我希望一切都可以通过 yaml 文件完成,因为由于某些不可避免的原因我无法创建配置映射。

hoq*_*que 5

您需要添加 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 }}
Run Code Online (Sandbox Code Playgroud)