HelmはKubernetes用のパッケージ管理ソフトウェアです。HelmはChartと呼ばれる設計図もとに、Kubernetesのマニフェストを作成し、パッケージをインストールします。ChartはGoのテンプレートを利用していて、Sprigの関数を利用することができます。本記事ではHelmテンプレートでのSprig関数のうち、文字列操作の使用例を紹介します。
TL;DR
- Sprigの文字列操作関数ドキュメント
helm install --dry-run --debug <chart>
コマンドを使うことで、Kubernetesにインストールしないで関数の結果を知ることができます。
目次
- trim
- trimAll
- trimSuffix
- trimPrefix
- upper
- lower
- title
- untitle
- repeat
- substr
- nospace
- trunc
- abbrev
- abbrevboth
- initials
- randAlphaNum
- randAlpha
- randNumeric
- randAscii
- wrap
- wrapWith
- contains
- hasPrefix
- hasSuffix
- quote
- squote
- cat
- indent
- nindent
- replace
- plural
- snakecase
- camelcase
- kebabcase
- swapcase
- shuffle
- regexMatch
- regexFindAll
- regexFind
- regexReplaceAll
- regexReplaceAllLiteral
- regexSplit
検証環境
以下の実行例の動作環境です。
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 myvalue: Hello World! 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 Functions
trim
trim
は、文字列の左右の空白を取り除きます。
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: {{ trim .Values.myvalue }}</span> 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 <span style="color: #ffff00">data: myvalue1: Hello World! myvalue2: Hello World!</span> |
trimAll
trimAll
は、文字列の前または後ろから指定した文字を削除します。
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: {{ trimAll "He" .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml myvalue: Hello World! He 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! He myvalue2: llo World!</span> |
trimSuffix
trimSuffix
は文字列から指定したサフィックスを取り除きます。サフィックスとは、文字列の末尾に付けられた接尾辞のことです。
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: {{ trimSuffix "He" .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml myvalue: Hello World! He 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! He myvalue2: Hello World!</span> |
trimPrefix
trimPrefix
は文字列から指定したプレフィックスを取り除きます。プレフィックスとは、文字列の先頭に付けられた接頭辞のことです。
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: {{ trimPrefix "He" .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml myvalue: Hello World! He 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! He myvalue2: llo World! He</span> |
upper
upper
は文字列を大文字に変換します。
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: {{ upper .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml myvalue: Hello World! He 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! He myvalue2: HELLO WORLD! HE</span> |
lower
lower
は、文字列を小文字に変換します。
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: {{ lower .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml myvalue: Hello World! He 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! He myvalue2: hello world! he</span> |
title
title
は、単語の先頭を大文字に変換します。以下の実行例ではlower
で小文字に変換した文字列をパイプでtitle
に渡しています。
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: myvalue1: {{ lower .Values.myvalue }} myvalue2: {{ lower .Values.myvalue | title }}</span> EOF $ cat << EOF > sprig/values.yaml myvalue: Hello World! He 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! he myvalue2: Hello World! He </span> |
untitle
untitle
は、単語の先頭を小文字に変換します。
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: {{ untitle .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml myvalue: Hello World! He 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! He myvalue2: hello world! he</span> |
repeat
repeat
は、指定した回数分の文字列を繰り返します。
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: {{ repeat 3 .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml myvalue: Hello 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 myvalue2: HelloHelloHello</span> |
substr
substr
は、文字列の切り取りを行います。切り取りの開始と終了の位置を指定します。文字列の先頭は0
から始まります。
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: {{ substr 1 4 .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml myvalue: Hello World! He 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! He myvalue2: ell</span> |
nospace
nospace
は、文字列から空白を取り除きます。
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: {{ nospace .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml myvalue: " Hello World! He !" 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! He ! myvalue2: HelloWorld!He!</span> |
trunc
trunc
は指定した長さに文字列を切り詰めます。
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: {{ trunc 7 .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml myvalue: Hello World! He 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! He myvalue2: Hello W</span> |
abbrev
abbrev
は、指定した長さに文字を切り詰めます。切り詰めた文字列の最後の3文字は3点リーダ(...)で表示されます。3点リーダの3文字も切り詰める文字列長に含まれることに注意してください。
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: {{ abbrev 7 .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml myvalue: Hello World! He 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! He myvalue2: Hell...</span> |
abbrevboth
abbrevboth
は、指定した開始位置から指定した長さに文字を切り詰めます。切り詰めた文字列の先頭と末尾の3文字は3点リーダ(...)で表示されます。3点リーダの6文字(先頭3文字、末尾3文字)も切り詰める文字列長に含まれることに注意してください。パラメータとして切り取りの開始位置と切り取る長さの指定が必要です。文字列の開始位置の先頭は、0
から始まります。
切り取りの開始位置、切り取りの長さ、文字列の長さによって、先頭の3点リーダが表示されない場合もあります。詳しくはソースを参照してください。
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: {{ abbrevboth 5 10 .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml myvalue: Hello World! He 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! He myvalue2: ... Wor...</span> |
initials
initials
は、単語の先頭文字だけをつなぎ合わせます。
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: {{ initials .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml myvalue: Hello World! He 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! He myvalue2: HWH</span> |
randAlphaNum
randAlphaNum
は、ランダムなアルファベットと数字の組み合わせ[0-9a-zA-Z]
を生成します。パスワードなどでランダムな文字列が必要な場合などに利用できます。パラメータとして生成する文字列の長さを指定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$ cat << EOF > sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap <span style="color: #ffff00">data: myvalue1: {{ randAlphaNum 10 }}</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: iniU8NyicW</span> |
randAlpha
randAlpha
は、ランダムなアルファベットの組み合わせ[a-zA-Z]
を生成します。パスワードなどでランダムな文字列が必要な場合などに利用できます。パラメータとして生成する文字列の長さを指定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$ cat << EOF > sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap <span style="color: #ffff00">data: myvalue1: {{ randAlpha 10 }}</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: TvFoPpJDSU</span> |
randNumeric
randNumeric
は、ランダムな数字の組み合わせ[0-9]
を生成します。パスワードなどでランダムな文字列が必要な場合などに利用できます。パラメータとして生成する文字列の長さを指定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$ cat << EOF > sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap <span style="color: #ffff00">data: myvalue1: {{ randNumeric 10 }}</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: 7046061521</span> |
randAscii
ranAscii
は、ランダムな印刷可能なASCII文字の組み合わせを生成します。パスワードなどでランダムな文字列が必要な場合などに利用できます。パラメータとして生成する文字列の長さを指定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$ cat << EOF > sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap <span style="color: #ffff00">data: myvalue1: {{ randAscii 10 }}</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: iAWhI}{#_f</span> |
wrap
wrap
は、指定した長さで文字列の折り返しを行います。単語の途中での折り返しは行われません。
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: | {{ wrap 5 .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml myvalue: Hello World! He 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 ldddd! He myvalue2: | Hello Wor ldddd! He</span> |
warpWith
wrapWith
は折り返しを改行(\n
)ではなく、指定した文字列で行います。
wrap
は、改行(\n
)で折り返しを行います。
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 |
$ cat << EOF > sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap data: myvalue1: | {{ .Values.myvalue }} myvalue2: | {{ wrapWith 5 "@" .Values.myvalue }} EOF $ cat << EOF > sprig/values.yaml myvalue: Hello World! He 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! He myvalue2: | Hello@World@! He</span> |
contains
contains
は、文字列に指定の文字列が含まれているかを確認します。含まれている場合はtrue
、含まれていない場合はfalse
となります。
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: {{ contains "Hello" .Values.myvalue }} myvalue2: {{ contains "Hoge" .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml myvalue: Hello World! He 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: true myvalue2: false</span> |
hasPrefix
hasPrefix
は、指定した文字列がプレフィックスであるかを確認します。プレフィックスとは、文字列の先頭に付けられた接頭辞のことです。
プレフィックスが含まれている場合はtrue
、含まれていない場合はfalse
を返します。
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: {{ hasPrefix "He" .Values.myvalue }} myvalue2: {{ hasPrefix "Ho" .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml myvalue: Hello World! He 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: true myvalue2: false</span> |
hasSuffix
hasSuffix
は、指定した文字列がサフィックスであるかを確認します。サフィックスとは、文字列の末尾に付けられた接尾辞のことです。
サフィックスが含まれている場合はtrue
、含まれていない場合はfalse
を返します。
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: {{ hasSuffix "He" .Values.myvalue }} myvalue2: {{ hasSuffix "Ho" .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml myvalue: Hello World! He 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: true myvalue2: false</span> |
quote
quote
は、文字列をダブルクォーテーション("
)で囲みます。
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: {{ quote .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml myvalue: Hello World! He 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! He myvalue2: "Hello World! He"</span> |
squote
squote
は、文字列をシングルクォーテーション('
)で囲みます。
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: {{ squote .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml myvalue: Hello World! He 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! He myvalue2: 'Hello World! He'</span> |
cat
cat
は、複数の文字列を1つのスペースでつなぎます。
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: myvalue1: {{ cat .Values.myvalue1 .Values.myvalue2 }}</span> EOF $ cat << EOF > sprig/values.yaml myvalue1: Hello myvalue2: World 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</span> |
indent
indent
は、指定した長さで文字列をインデントします。
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: {{ indent 4 .Values.myvalue }}</span> 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 <span style="color: #ffff00">data: myvalue1: Hello World! myvalue2: Hello World!</span> |
nindent
nindent
は、指定した長さで文字列をインデントします。インデントの前に改行が行われます。
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: myvalue1: {{ .Values.myvalue }} myvalue2: {{ nindent 4 .Values.myvalue }}</span> 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 <span style="color: #ffff00">data: myvalue1: Hello World! myvalue2: Hello World!</span> |
replace
replace
は、指定した文字列で置き換えを行います。パラメータとして置換前と置換後の文字列を指定します。
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: {{ replace "He" "xx" .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml myvalue: Hello World! He 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! He myvalue2: xxllo World! xx</span> |
plural
plural
は、複数形の置き換えを行います。パラメータとして単体形および複数形の文字列を指定します。入力値が1
の場合は単体系、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: myvalue1: {{ len .Values.myvalue1 | plural "one" "many" }} myvalue2: {{ len .Values.myvalue2 | plural "one" "many" }}</span> EOF $ cat << EOF > sprig/values.yaml myvalue1: a myvalue2: ab 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: one myvalue2: many</span> |
snakecase
snakecase
は、文字列をキャメルケースをスネークケースに変換します。キャメルケースは単語の先頭を大文字で表記し、複数の単語をつなぎ合わせる方法です。スネークケースは単語の区切りとしてアンダースコア(_
)を利用します。
- キャメルケース:camelCase
- スネークケース:snake_case
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: {{ snakecase .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml myvalue: camelCase 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: camelCase myvalue2: camel_case</span> |
camelcase
camelcase
は、スネークケースをキャメルケースに変換します。キャメルケースは単語の先頭を大文字で表記し、複数の単語をつなぎ合わせる方法です。スネークケースは単語の区切りとしてアンダースコア(_
)を利用します。
- キャメルケース:camelCase
- スネークケース:snake_case
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: {{ camelcase .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml myvalue: snake_case 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: snake_case myvalue2: SnakeCase</span> |
kebabcase
kebabcase
は、キャメルケースをケバブケースに変更します。キャメルケースは単語の先頭を大文字で表記し、複数の単語をつなぎ合わせる方法です。ケバブケースは単語の区切りとしてハイフン(-
)を利用します。
- キャメルケース:camelCase
- ケバブケース:kebab-case
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: {{ kebabcase .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml myvalue: kebabCase 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: kebabCase myvalue2: kebab-case</span> |
swapcase
swapcase
は大文字を小文字に、小文字を大文字に変換します。
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: {{ swapcase .Values.myvalue }}</span> EOF $ cat << EOF > sprig/values.yaml myvalue: Hello worlD! aBcD A.A.b.b 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! aBcD A.A.b.b myvalue2: hELLO WORLd! AbCd a.a.B.B</span> |
shuffle
shuffle
は、文字列をランダムに並び替えます。
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: {{ shuffle .Values.myvalue }}</span> 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 <span style="color: #ffff00">data: myvalue1: Hello world! myvalue2: !rlwHlodloe</span> |
regexMatch
regexMatch
は、指定した正規表現に適合した場合にtrue
を返します。適合しなかった場合はfalse
を返します。
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: {{ regexMatch "^[A-Z]" .Values.myvalue }} myvalue3: {{ regexMatch "^[0-9]" .Values.myvalue }}</span> 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 <span style="color: #ffff00">data: myvalue1: Hello world! myvalue2: true myvalue3: false</span> |
regexFindAll
regexFindAll
は、文字列から正規表現に適合した部分を切り出して表示します。パラメータの最後に切り出す文字列の数を指定します。-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 25 |
$ cat << EOF > sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap <span style="color: #ffff00">data: myvalue1: {{ .Values.myvalue }} myvalue2: {{ regexFindAll "[A-Z][a-z]" .Values.myvalue 1 }} myvalue3: {{ regexFindAll "[A-Z][a-z]" .Values.myvalue -1 }}</span> 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 <span style="color: #ffff00">data: myvalue1: Hello World! myvalue2: [He] myvalue3: [He Wo]</span> |
regexFind
regexFind
は、文字列から正規表現に適合した最初の部分を切り出して表示します。
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: {{ regexFind "[a-z][a-z]" .Values.myvalue }}</span> 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 <span style="color: #ffff00">data: myvalue1: Hello World! myvalue2: el</span> |
regexReplaceAll
regexReplaceAll
は、文字列から正規表現に適合した部分を、指定した文字列ですべて置換します。キャプチャ()
および$
によるキャプチャの参照も利用できます。
$
で参照を行う場合、\$
とエスケープをしてください。
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: {{ regexReplaceAll "([A-Z][a-z])" .Values.myvalue "-\\$1-" }}</span> 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 <span style="color: #ffff00">data: myvalue1: Hello World! myvalue2: -He-llo -Wo-rld!</span> |
regexReplaceAllLiteral
regexReplaceAllLiteral
は、文字列から正規表現に適合した部分を、指定した文字列ですべて置換します。変数がリテラルとして扱われるため、変数の展開は行われません。
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: {{ regexReplaceAllLiteral "([A-Z][a-z])" .Values.myvalue "-\\$1-" }}</span> 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 <span style="color: #ffff00">data: myvalue1: Hello World! myvalue2: -$1-llo -$1-rld!</span> |
regexSplit
regexSplit
は、文字列を正規表現で適合した部分で分割して表示します。正規表現に適合した部分は削除されます。パラメータの最後に、分割して表示する数を指定します。-1
を指定することで、適合するすべての結果を返します。-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 25 |
$ cat << EOF > sprig/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mychart-configmap <span style="color: #ffff00">data: myvalue1: {{ .Values.myvalue }} myvalue2: {{ regexSplit "l+" .Values.myvalue 2 }} myvalue3: {{ regexSplit "l+" .Values.myvalue -1 }}</span> 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 <span style="color: #ffff00">data: myvalue1: Hello World! myvalue2: [He o World!] myvalue3: [He o Wor d!]</span> |
さいごに
本記事ではHelmテンプレートでのSprig関数のうち、文字列操作の使用例を紹介しました。Helmのテンプレートでは、indent
やquote
がよく使われます。また条件判断などでregexMatch
などの正規表現も便利に使えます。文字列操作関数を有効に使って、汎用性の高いHelmチャートを簡単に作っていきましょう。
投稿者プロフィール
最新の投稿
- AWS2021年12月2日AWS Graviton3 プロセッサを搭載した EC2 C7g インスタンスが発表されました。
- セキュリティ2021年7月14日ゼロデイ攻撃とは
- セキュリティ2021年7月14日マルウェアとは
- WAF2021年7月13日クロスサイトスクリプティングとは?