【问题标题】:Using a multi-line shell script as a helm value使用多行 shell 脚本作为 helm 值
【发布时间】:2020-08-11 21:14:01
【问题描述】:

我有一个带有以下 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 .

【问题讨论】:

    标签: kubernetes yaml kubernetes-helm


    【解决方案1】:

    你需要添加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 }}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      • 1970-01-01
      • 2020-08-05
      • 2014-05-30
      • 2012-04-05
      • 2017-07-15
      • 2013-04-18
      相关资源
      最近更新 更多