使用多行shell脚本作为头盔值。

问题描述 投票:0回答:1

我有一个舵手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。

kubernetes yaml kubernetes-helm
1个回答
3
投票

你需要添加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 }}
© www.soinside.com 2019 - 2024. All rights reserved.