0

Helm チャートで動的な数のボリュームと volumeMounts を持つ機能をセットアップしようとしています。私の deployment.yaml の外観は次のとおりです。

    volumeMounts:
    {{- if .Values.deployment.hostPath }} {{ $dict := split ":" .Values.deployment.hostPath }} {{ range $idx, $val := $dict }} {{ $mnt := split "," $val }}
    - mountPath: {{ $mnt._1 }}
      name: {{ $mnt._0 }}
    {{ end }}
    {{ end }}
  volumes:
  {{- if .Values.deployment.hostPath }} {{ $dict := split ":" .Values.deployment.hostPath }} {{ range $idx, $val := $dict }} {{ $mnt := split "," $val }}
  - name: {{ $mnt._0 }}
    hostPath:
      path: {{ $mnt._2 }}
      {{- if $mnt._3 }}
      type: {{ $mnt._3 }}
      {{ end }}
  {{ end }}
  {{ end }}

values.yaml には、次のようなものがあります。

Deployment:
  hostPath: test-host-path,/path/on/pod,/path/on/node,Directory

私がやっていることは、hostPath に定義されているものがあるかどうかを確認することです。ある場合は、「:」で項目を分割して辞書を作成します。この最初の例では、区切り文字 : がないため、値の文字列は 1 つしかありません。次に、ループする範囲を実行し (「:」で区切られた値のセットが複数ある場合)、値のセットをコンマで分割します。

したがって、この最初の例では、helm install を使用して問題なく動作します。

values.yaml -->   hostPath: test-host-path,/path/on/pod,/path/on/node,Directory
        volumeMounts:
        - mountPath: /path/on/pod
          name: test-host-path

      volumes:
      - name: test-host-path
        hostPath:
          path: /path/on/node
          type: Directory

type フィールドはオプションなので、定義されているかどうかを確認するブロックがあり、定義されていない場合は yaml でレンダリングされません。したがって、最後のコンマの後に値がない場合の次の例でも機能します。

values.yaml -->   hostPath: test-host-path,/path/on/pod,/path/on/node,
        volumeMounts:
        - mountPath: /path/on/pod
          name: test-host-path

      volumes:
      - name: test-host-path
        hostPath:
          path: /path/on/node

しかし、「:」で区切られた 2 番目のデータ セットを追加しようとすると、helm のインストールで失敗します。

Deployment:
  hostPath: test-host-path,/path/on/pod,/path/on/node,Directory:test-host-path-two,/path/on/pod/two,/path/on/node/two,Directory

Error: YAML parse error on chart/templates/deployment.yaml: error converting YAML to JSON: yaml: line 152: found a tab character that violates indentation
helm.go:94: [debug] error converting YAML to JSON: yaml: line 152: found a tab character that violates indentation

もちろん、タブについて言及していますが、問題が何であるかはよくわかりません。この同じコード (dict、range、split) を使用して configmap に複数のエントリを設定したので、うまくいくと思います。しかし、明らかにここで何かが欠けています。どんな助けでも大歓迎です。

4

1 に答える 1