Variables


公式ドキュメントショートカット->Variables
関数、パイプライン、および制御構造を確認しました.プログラミング言語の基本的な考え方の一つである変数を見てみましょう.変数はテンプレートではあまり使用されません.しかし、変数を使用してコードを簡略化し、withrangeをよりよく利用する方法を見てみましょう.
前の例では、次のコードの実行に失敗しました.
  {{- with .Values.favorite }}
  drink: {{ .drink | default "tea" | quote }}
  food: {{ .food | upper | quote }}
  release: {{ .Release.Name }}
  {{- end }}
Release.Name  with  ブロックの限られた範囲内ではありません(スキャン).スキャン問題の解決策の1つは、現在のスキャンを考慮せずにアクセス可能な変数を割り当てることです.
Helmテンプレートでは、変数は他のオブジェクトを参照するために命名されます.  $nameとして作成され、特定の演算子(:=)を使用して割り当てられます.変数を使用して上記の例を書き換え、Release.Nameにアクセスします.
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  {{- $relname := .Release.Name -}}
  {{- with .Values.favorite }}
  drink: {{ .drink | default "tea" | quote }}
  food: {{ .food | upper | quote }}
  release: {{ $relname }}
  {{- end }}
with  ブロックに入る前に、$relname := .Release.Nameが割り当てられていることに注意してください.with  ブロック内では現在$relname 変数はバージョン名を示します.
上記の例を実行して、次の内容を作成します.
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: viable-badger-configmap
data:
  myvalue: "Hello World"
  drink: "coffee"
  food: "PIZZA"
  release: viable-badger
特にそれらの変数.  range  リングでとても役に立ちます.変数は、リストなどのオブジェクトからインデックスと値をインポートするために使用されます.
toppings: |-
    {{- range $index, $topping := .Values.pizzaToppings }}
      {{ $index }}: {{ $topping }}
    {{- end }}
rangeを参照してください.まず、変数、割当て演算子、およびリストの順序でリストされます.次に、整数インデックス(0から)は$indexに割り当てられ、値は$toppingである.実行してみよう
toppings: |-
      0: mushrooms
      1: cheese
      2: peppers
      3: onions
データ構造に鍵と値(value)が同時にある場合は、rangeを使用して両方の値を同時に取得できます.例:  .Values.favoriteの値を繰り返すことができます.
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  {{- range $key, $val := .Values.favorite }}
  {{ $key }}: {{ $val | quote }}
  {{- end }}
最初の繰り返しで  $key  drinkになります.  $val  coffeeになります.そして次の反復では$key  food街  $val  pizza実行すると、次のように作成されます.
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: eager-rabbit-configmap
data:
  myvalue: "Hello World"
  drink: "coffee"
  food: "pizza"
変数は通常、グローバル値ではありません.宣言されたブロックに限定されます.以前に割り当てられた$relnameはテンプレートの最上位レベルで割り当てられているため、テンプレート全体が利用可能になります.しかし、最後の例では、  $key  わあ.  $val  {{ range... }}{{ end }}  ブロックに限定されます.
ただし、グローバル変数は常に存在します.  $  - この変数は常にルートコンテキストを指します.グラフがrange内でループするときのバージョン名を知りたい場合は、これを使用します.
これは例です.
{{- range .Values.tlsSecrets }}
apiVersion: v1
kind: Secret
metadata:
  name: {{ .name }}
  labels:
    # Many helm templates would use `.` below, but that will not work,
    # however `$` will work here
    app.kubernetes.io/name: {{ template "fullname" $ }}
    # I cannot reference .Chart.Name, but I can do $.Chart.Name
    helm.sh/chart: "{{ $.Chart.Name }}-{{ $.Chart.Version }}"
    app.kubernetes.io/instance: "{{ $.Release.Name }}"
    # Value from appVersion in Chart.yaml
    app.kubernetes.io/version: "{{ $.Chart.AppVersion }}"
    app.kubernetes.io/managed-by: "{{ $.Release.Service }}"
type: kubernetes.io/tls
data:
  tls.crt: {{ .certificate }}
  tls.key: {{ .key }}
---
{{- end }}
これまで、1つのファイルに宣言されたテンプレートしか見られませんでした.しかし、Helmテンプレート言語の強力な特性の一つは、複数のテンプレートを宣言し、同時に使用できることです.次の章を見てみましょう.