Helmのテンプレートで計算の関数を使っていますか?
HelmはKubernetes用のパッケージ管理ソフトウェアです。HelmはChartと呼ばれる設計図をもとに、Kubernetesのマニフェストを作成し、パッケージをインストールします。ChartはGoのテンプレートを利用していて、Sprigの関数を利用することができます。本記事ではHelmテンプレートでのSprig関数のうち、算術関数の使用例を紹介します。
TL;DR
- Sprigの算術関数ドキュメント
- 一部の関数を除き
int64
型として計算されます。 - 切り捨て、切り上げ、四捨五入の桁数調整の関数は、
float
型として扱われます。 helm install --dry-run --debug <chart>
コマンドを使うことで、Kubernetesにインストールしないで関数の結果を知ることができます。
目次
検証環境
以下の実行例の動作環境です。
1 2 3 |
$ 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
型で行われることに注意してください。
投稿者プロフィール
最新の投稿
- AWS2021年12月2日AWS Graviton3 プロセッサを搭載した EC2 C7g インスタンスが発表されました。
- セキュリティ2021年7月14日ゼロデイ攻撃とは
- セキュリティ2021年7月14日マルウェアとは
- WAF2021年7月13日クロスサイトスクリプティングとは?