Helmのテンプレートで計算の関数を使っていますか?
HelmはKubernetes用のパッケージ管理ソフトウェアです。HelmはChartと呼ばれる設計図をもとに、Kubernetesのマニフェストを作成し、パッケージをインストールします。ChartはGoのテンプレートを利用していて、Sprigの関数を利用することができます。本記事ではHelmテンプレートでのSprig関数のうち、算術関数の使用例を紹介します。
TL;DR
- Sprigの算術関数ドキュメント
- 一部の関数を除き
int64型として計算されます。
- 切り捨て、切り上げ、四捨五入の桁数調整の関数は、
float型として扱われます。
helm install --dry-run --debug <chart>コマンドを使うことで、Kubernetesにインストールしないで関数の結果を知ることができます。
目次
検証環境
以下の実行例の動作環境です。
|
|
$ helm version --short Client: v2.13.1+g618447c Server: v2.13.1+g618447c |
事前準備
検証用のHelmチャートを作成します。
helm createコマンドでチャートのひな形を作成します。
rmコマンドで不要なファイルを削除します。
- 検証のYAMLファイルを作成します。今回はConfigMapを作成するYAMLを作成しています。
helm install --dry-run --debugコマンドで実行確認をします。--dry-run オプションを利用することで、Kuernetes上にConfigMapのリソースをインストールしないで、実行結果の確認を行うことができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
$ helm create sprig $ rm -rf sprig/templates/* $ rm -rf sprig/values.yaml $ cat << EOF > sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap data: myvalue: {{ .Values.myvalue }} EOF $ cat << EOF > sprig/values.yaml myvalue: Hello World! EOF $ helm install --dry-run --debug ./sprig ...省略... --- # Source: sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap data: myvalue: Hello World! |
Math Functions
sprigの算術関数は一部の関数を除き、int64型として計算されます。floatの値を入力してもint64に変換されるので注意してください。
add
addは、加算(足し算)を行います。2つ以上のパラメータを渡すことができます。以下の例ではパラメータを3つ渡して、3つの数値の合計を表示しています。入力値としてfloat型の値を渡していますが、int64型として計算されることに注意してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
$ cat << EOF > sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap <span style="color: #ffff00">data: myvalue: {{ printf "%s + %s + %s = %s" .Values.myvalue1 .Values.myvalue2 .Values.myvalue3 (add .Values.myvalue1 .Values.myvalue2 .Values.myvalue3) }} int64: {{ printf "%f + %f + %f= %d" .Values.myvalue1 .Values.myvalue2 .Values.myvalue3 (add .Values.myvalue1 .Values.myvalue2 .Values.myvalue3) }}</span> EOF $ cat << EOF > sprig/values.yaml <span style="color: #ffff00">myvalue1: 1.5 myvalue2: 2.6 myvalue3: 3.7</span> EOF $ helm install --dry-run --debug ./sprig ...省略... --- # Source: sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap <span style="color: #ffff00">data:</span> <span style="color: #ffff00"> myvalue: %!!(MISSING)s(float64=1.5) + %!!(MISSING)s(float64=2.6) + %!!(MISSING)s(float64=3.7) = %!!(MISSING)s(int64=6) int64: 1.500000 + 2.600000 + 3.700000= 6</span> |
add1
add1は、インクリメンタル+1を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
$ cat << EOF > sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap <span style="color: #ffff00">data:</span> <span style="color: #ffff00"> myvalue1: {{ .Values.myvalue }} myvalue2: {{ add1 .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml <span style="color: #ffff00">myvalue: 1</span> EOF $ helm install --dry-run --debug ./sprig ...省略... --- # Source: sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap <span style="color: #ffff00">data:</span> <span style="color: #ffff00"> myvalue1: 1 myvalue2: 2 </span> |
sub
subは、2つの数の減算(引き算)を行います。addとは異なりsubはパラメータを2つまでしか渡せないところに注意してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
$ cat << EOF > sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap <span style="color: #ffff00">data: int64: {{ printf "%f - %f= %d" .Values.myvalue1 .Values.myvalue2 (sub .Values.myvalue1 .Values.myvalue2) }} </span>EOF $ cat << EOF > sprig/values.yaml <span style="color: #ffff00">myvalue1: 3.3 myvalue2: 2.2</span> EOF $ helm install --dry-run --debug ./sprig ...省略... --- # Source: sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap <span style="color: #ffff00">data: int64: 3.300000 - 2.200000= 1 </span> |
div
divは、除算(割り算)を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
$ cat << EOF > sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap <span style="color: #ffff00">data: int64: {{ printf "%f / %f= %d" .Values.myvalue1 .Values.myvalue2 (div .Values.myvalue1 .Values.myvalue2) }} </span>EOF $ cat << EOF > sprig/values.yaml <span style="color: #ffff00">myvalue1: 6.3 myvalue2: 2.2</span> EOF $ helm install --dry-run --debug ./sprig ...省略... --- # Source: sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap <span style="color: #ffff00">data: int64: 6.300000 / 2.200000= 3 </span> |
mod
modは、剰余演算(除算の余り)を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
$ cat << EOF > sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap <span style="color: #ffff00">data: int64: {{ printf "%f / %f= %d ... %d" .Values.myvalue1 .Values.myvalue2 (div .Values.myvalue1 .Values.myvalue2) (mod .Values.myvalue1 .Values.myvalue2) }} </span>EOF $ cat << EOF > sprig/values.yaml <span style="color: #ffff00">myvalue1: 5.5 myvalue2: 2.2</span> EOF $ helm install --dry-run --debug ./sprig ...省略... --- # Source: sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap <span style="color: #ffff00">data: int64: 5.500000 / 2.200000= 2 ... 1 </span> |
mul
mulは、乗算(掛け算)を行います。2つ上のパラーメータを渡すことができます。以下の例では3つの数の乗算を行っています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
$ cat << EOF > sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap <span style="color: #ffff00">data: int64: {{ printf "%f * %f * %f = %d" .Values.myvalue1 .Values.myvalue2 .Values.myvalue3 (mul .Values.myvalue1 .Values.myvalue2 .Values.myvalue3) }} </span>EOF $ cat << EOF > sprig/values.yaml <span style="color: #ffff00">myvalue1: 2.2 myvalue2: 3.3 myvalue3: 4.4</span> EOF $ helm install --dry-run --debug ./sprig ...省略... --- # Source: sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap <span style="color: #ffff00">data: int64: 2.200000 * 3.300000 * 4.400000 = 24 </span> |
max
maxは、与えられた数値の中で最大のものを返します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
$ cat << EOF > sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap <span style="color: #ffff00">data: int64: {{ printf "%f, %f, %f: max %d" .Values.myvalue1 .Values.myvalue2 .Values.myvalue3 (max .Values.myvalue1 .Values.myvalue2 .Values.myvalue3) }} </span>EOF $ cat << EOF > sprig/values.yaml <span style="color: #ffff00">myvalue1: 2.2 myvalue2: 3.3 myvalue3: 4.4</span> EOF $ helm install --dry-run --debug ./sprig ...省略... --- # Source: sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap <span style="color: #ffff00">data: int64: 2.200000, 3.300000, 4.400000: max 4 </span> |
min
minは、与えられた数値の中で最小のものを返します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
$ cat << EOF > sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap <span style="color: #ffff00">data: int64: {{ printf "%f, %f, %f: min %d" .Values.myvalue1 .Values.myvalue2 .Values.myvalue3 (min .Values.myvalue1 .Values.myvalue2 .Values.myvalue3) }} </span>EOF $ cat << EOF > sprig/values.yaml <span style="color: #ffff00">myvalue1: 2.2 myvalue2: 3.3 myvalue3: 4.4</span> EOF $ helm install --dry-run --debug ./sprig ...省略... --- # Source: sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap <span style="color: #ffff00">data: int64: 2.200000, 3.300000, 4.400000: min 2 </span> |
floor
floorは入力されたfloat型の数値から、小数点以下を切り捨てます。floorの戻り値はfloat型になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
$ cat << EOF > sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap <span style="color: #ffff00">data: myvalue: {{ printf "%s -> floor: %s" .Values.myvalue1 (floor .Values.myvalue1) }} float: {{ printf "%f -> floor: %f" .Values.myvalue1 (floor .Values.myvalue1) }} </span>EOF $ cat << EOF > sprig/values.yaml <span style="color: #ffff00">myvalue1: 12.345</span> EOF $ helm install --dry-run --debug ./sprig ...省略... --- # Source: sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap <span style="color: #ffff00">data: myvalue: %!!(MISSING)s(float64=12.345) -> floor: %!!(MISSING)s(float64=12) float: 12.345000 -> floor: 12.000000 </span> |
ceil
ceilは、入力されたfloat型の数値から、小数点以下を切り上げます。ceilの戻り値はfloat型になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
$ cat << EOF > sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap <span style="color: #ffff00">data: float: {{ printf "%f -> floor: %f" .Values.myvalue1 (ceil .Values.myvalue1) }} </span>EOF $ cat << EOF > sprig/values.yaml <span style="color: #ffff00">myvalue1: 12.345</span> EOF $ helm install --dry-run --debug ./sprig ...省略... --- # Source: sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap <span style="color: #ffff00">data: float: 12.345000 -> floor: 13.000000 </span> |
round
roundは、指定した値で小数部の桁数を四捨五入します。roundの戻り値はfloat型になります。
roundには、四捨五入対象の数値と小数点以下の桁数のパラメータが必要です。以下の例では小数点以下2桁まで表示(3桁目で四捨五入)をする例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
$ cat << EOF > sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap <span style="color: #ffff00">data: float: {{ printf "%f -> floor: %f" .Values.myvalue1 (round .Values.myvalue1 2) }} float: {{ printf "%f -> floor: %f" .Values.myvalue2 (round .Values.myvalue2 2) }} </span>EOF $ cat << EOF > sprig/values.yaml <span style="color: #ffff00">myvalue1: 12.345 myvalue2: 54.321</span> EOF $ helm install --dry-run --debug ./sprig ...省略... --- # Source: sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap <span style="color: #ffff00">data: float: 12.345000 -> floor: 12.350000 float: 54.321000 -> floor: 54.320000 </span> |
おわりに
本記事ではHelmテンプレートでのSprig関数のうち、算術計算の使用例を紹介しました。切り捨てや切り上げなど桁数調整の関数を除き、計算や結果はint64型で行われることに注意してください。

スカイアーチ ファンタジー研究室