Helmのテンプレートで文字列分割の関数を使っていますか?
HelmはKubernetes用のパッケージ管理ソフトウェアです。HelmはChartと呼ばれる設計図をもとに、Kubernetesのマニフェストを作成し、パッケージをインストールします。ChartはGoのテンプレートを利用していて、Sprigの関数を利用することができます。本記事ではHelmテンプレートでのSprig関数のうち、文字列分割操作の使用例を紹介します。
分割以外の文字列操作については、別の記事で紹介をしています。
TL;DR
- Sprigの文字列分割操作関数ドキュメント
helm install --dry-run --debug <chart>
コマンドを使うことで、Kubernetesにインストールしないで関数の結果を知ることができます。
目次
検証環境
実行例のhelmバージョンは、以下の通りです。
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 <span style="color: #ffff00">data: myvalue: {{ .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml <span style="color: #ffff00">myvalue: Hello World!</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: Hello World!</span> |
String Slice Functions
join
join
は、文字列のリストを指定したセパレータで結合します。パラメータとして、セパレータを指定します。
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: myvalue1: {{ .Values.myvalue }} myvalue2: {{ join "-" .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml <span style="color: #ffff00">myvalue: - Hello - World!</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: myvalue1: [Hello World!] myvalue2: Hello-World!</span> |
splitList
splitList
は、文字列を指定したセパレータで分割したリストを返します。パラメータとして、セパレータを指定します。
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: myvalue1: {{ .Values.myvalue }} myvalue2: {{ splitList "-" .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml <span style="color: #ffff00">myvalue: Hello-Wor-ld!</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: myvalue1: Hello-Wor-ld! myvalue2: [Hello Wor ld!]</span> |
split
split
は、文字列を指定したセパレータで分割した文字列を辞書型で返します。パラメータとして、セパレータを指定します。
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: myvalue1: {{ .Values.myvalue }} myvalue2: {{ split "-" .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml <span style="color: #ffff00">myvalue: Hello-Wor-ld!</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: myvalue1: Hello-Wor-ld! myvalue2: map[_0:Hello _1:Wor _2:ld!]</span> |
splitn
splitn
は、文字列を指定したセパレータで分割した文字列を辞書型で返します。パラメータとして、セパレータと分割数を指定します。
split
は、すべてのセパレータで分割されますが、splitn
は、指定した数だけ分割されます。分割されなかった文字列は、最後のデータにまとめて表示されます。
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: myvalue1: {{ .Values.myvalue }} myvalue2: {{ splitn "-" 2 .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml <span style="color: #ffff00">myvalue: Hello-Wor-ld!</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: myvalue1: Hello-Wor-ld! myvalue2: map[_0:Hello _1:Wor-ld!]</span> |
sortAlpha
sortAlpha
は文字列のリストをアルファベットの昇順に並び替えます。
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 26 27 28 29 30 |
$ cat << EOF > sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap <span style="color: #ffff00">data: myvalue1: {{ .Values.myvalue }} myvalue2: {{ sortAlpha .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml <span style="color: #ffff00">myvalue: - Hello - Alphabet - 123 - alphabet - hello - おめでとう - あけまして</span> EOF $ helm install --dry-run --debug ./sprig ...省略... --- # Source: sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap data: <span style="color: #ffff00">myvalue1: [Hello Alphabet 123 alphabet hello おめでとう あけまして] myvalue2: [123 Alphabet Hello alphabet hello あけまして おめでとう]</span> |
おわりに
本記事ではHelmテンプレートでのSprig関数のうち、文字列分割操作の使用例を紹介しました。公開されているチャートでも、リリース名やラベル名を変換するのにjoin
やsplit
が使われていたりします。文字列分割操作の関数を上手につかってリリース名やラベル名を見やすくし、わかりやすいDevOpsを目指していきましょう。
投稿者プロフィール
最新の投稿
- AWS2021年12月2日AWS Graviton3 プロセッサを搭載した EC2 C7g インスタンスが発表されました。
- セキュリティ2021年7月14日ゼロデイ攻撃とは
- セキュリティ2021年7月14日マルウェアとは
- WAF2021年7月13日クロスサイトスクリプティングとは?