Helmのテンプレートで文字列分割の関数を使っていますか?
HelmはKubernetes用のパッケージ管理ソフトウェアです。HelmはChartと呼ばれる設計図をもとに、Kubernetesのマニフェストを作成し、パッケージをインストールします。ChartはGoのテンプレートを利用していて、Sprigの関数を利用することができます。本記事ではHelmテンプレートでのSprig関数のうち、文字列分割操作の使用例を紹介します。
分割以外の文字列操作については、別の記事で紹介をしています。
TL;DR
- Sprigの文字列分割操作関数ドキュメント
helm install --dry-run --debug <chart>
コマンドを使うことで、Kubernetesにインストールしないで関数の結果を知ることができます。
目次
検証環境
実行例のhelmバージョンは、以下の通りです。
$ 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のリソースをインストールしないで、実行結果の確認を行うことができます。
$ 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関数のうち、文字列分割操作の使用例を紹介しました。公開されているチャートでも、リリース名やラベル名を変換するのにjoin
やsplit
が使われていたりします。文字列分割操作の関数を上手につかってリリース名やラベル名を見やすくし、わかりやすいDevOpsを目指していきましょう。

投稿者プロフィール
最新の投稿
セキュリティ2021.07.14ゼロデイ攻撃とは
セキュリティ2021.07.14マルウェアとは
WAF2021.07.13クロスサイトスクリプティングとは?
AWS2021.01.21AWS Fault Injection Simulatorが発表されました!