[Helm入門] Templateで使える関数の実行例 ~ 文字列分割編 ~

Helmのテンプレートで文字列分割の関数を使っていますか?

HelmはKubernetes用のパッケージ管理ソフトウェアです。HelmはChartと呼ばれる設計図をもとに、Kubernetesのマニフェストを作成し、パッケージをインストールします。ChartはGoのテンプレートを利用していて、Sprigの関数を利用することができます。本記事ではHelmテンプレートでのSprig関数のうち、文字列分割操作の使用例を紹介します。

分割以外の文字列操作については、別の記事で紹介をしています。

TL;DR

目次

検証環境

実行例のhelmバージョンは、以下の通りです。

$ helm version --short
Client: v2.13.1+g618447c
Server: v2.13.1+g618447c

事前準備

検証用のHelmチャートを作成します。

  1. helm createコマンドでチャートのひな形を作成します。
  2. rmコマンドで不要なファイルを削除します。
  3. 検証のYAMLファイルを作成します。今回はConfigMapを作成するYAMLを作成しています。
  4. helm install --dry-run --debugコマンドで実行確認をします。--dry-run オプションを利用することで、Kuernetes上にConfigMapのリソースをインストールしないで、実行結果の確認を行うことができます。
$ 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!

String Slice Functions

join

joinは、文字列のリストを指定したセパレータで結合します。パラメータとして、セパレータを指定します。

$ cat << EOF > sprig/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: mychart-configmap
data:
  myvalue1: {{ .Values.myvalue }}
  myvalue2: {{ join "-" .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:
  myvalue1: [Hello World!]
  myvalue2: Hello-World!

splitList

splitListは、文字列を指定したセパレータで分割したリストを返します。パラメータとして、セパレータを指定します。

$ cat << EOF > sprig/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: mychart-configmap
data:
  myvalue1: {{ .Values.myvalue }}
  myvalue2: {{ splitList "-" .Values.myvalue }}
EOF
$ cat << EOF > sprig/values.yaml
myvalue: Hello-Wor-ld!
EOF
$ helm install --dry-run --debug ./sprig
...省略...
---
# Source: sprig/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: mychart-configmap
data:
  myvalue1: Hello-Wor-ld!
  myvalue2: [Hello Wor ld!]

split

splitは、文字列を指定したセパレータで分割した文字列を辞書型で返します。パラメータとして、セパレータを指定します。

$ cat << EOF > sprig/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: mychart-configmap
data:
  myvalue1: {{ .Values.myvalue }}
  myvalue2: {{ split "-" .Values.myvalue }}
EOF
$ cat << EOF > sprig/values.yaml
myvalue: Hello-Wor-ld!
EOF
$ helm install --dry-run --debug ./sprig
...省略...
---
# Source: sprig/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: mychart-configmap
data:
  myvalue1: Hello-Wor-ld!
  myvalue2: map[_0:Hello _1:Wor _2:ld!]

splitn

splitnは、文字列を指定したセパレータで分割した文字列を辞書型で返します。パラメータとして、セパレータと分割数を指定します。

splitは、すべてのセパレータで分割されますが、splitnは、指定した数だけ分割されます。分割されなかった文字列は、最後のデータにまとめて表示されます。

$ cat << EOF > sprig/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: mychart-configmap
data:
  myvalue1: {{ .Values.myvalue }}
  myvalue2: {{ splitn "-" 2 .Values.myvalue }}
EOF
$ cat << EOF > sprig/values.yaml
myvalue: Hello-Wor-ld!
EOF
$ helm install --dry-run --debug ./sprig
...省略...
---
# Source: sprig/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: mychart-configmap
data:
  myvalue1: Hello-Wor-ld!
  myvalue2: map[_0:Hello _1:Wor-ld!]

sortAlpha

sortAlphaは文字列のリストをアルファベットの昇順に並び替えます。

$ cat << EOF > sprig/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: mychart-configmap
data:
  myvalue1: {{ .Values.myvalue }}
  myvalue2: {{ sortAlpha .Values.myvalue }}
EOF
$ cat << EOF > sprig/values.yaml
myvalue:
- Hello
- Alphabet
- 123
- alphabet
- hello
- おめでとう
- あけまして
EOF
$ helm install --dry-run --debug ./sprig
...省略...
---
# Source: sprig/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: mychart-configmap
data:
  myvalue1: [Hello Alphabet 123 alphabet hello おめでとう あけまして]
  myvalue2: [123 Alphabet Hello alphabet hello あけまして おめでとう]

おわりに

本記事ではHelmテンプレートでのSprig関数のうち、文字列分割操作の使用例を紹介しました。公開されているチャートでも、リリース名やラベル名を変換するのにjoinsplitが使われていたりします。文字列分割操作の関数を上手につかってリリース名やラベル名を見やすくし、わかりやすいDevOpsを目指していきましょう。

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

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

EasyDoggie

投稿者プロフィール

石川 淳
スカイアーチネットワークスで、新しいサービスの企画を行っています。
元SIer、元スマフォ向けゲームインフラの経験を生かして、新しいサービスをリリースしていきます。現在企画中のサービスはこちら。
https://github.com/easydoggie
コメントを頂けると嬉しいです。

ABOUTこの記事をかいた人

スカイアーチネットワークスで、新しいサービスの企画を行っています。 元SIer、元スマフォ向けゲームインフラの経験を生かして、新しいサービスをリリースしていきます。現在企画中のサービスはこちら。 https://github.com/easydoggie コメントを頂けると嬉しいです。