テンプレート関数一覧
Helmには、テンプレートで利用できる多くのテンプレート関数が含まれています。それらは以下のように分類されています。
- 暗号化とセキュリティ
- 日付
- 辞書
- エンコーディング
- ファイルパス
- Kubernetesとチャート
- 論理とフロー制御
- リスト
- 数学
- 浮動小数点数の数学
- ネットワーク
- リフレクション
- 正規表現
- セマンティックバージョン
- 文字列
- 型変換
- URL
- UUID
論理とフロー制御関数
Helmには、and、coalesce、default、empty、eq、fail、ge、gt、le、lt、ne、not、or、requiredなど、多数の論理と制御フロー関数が含まれています。
and
2つ以上の引数の論理積を返します(最初の空の引数、または最後の引数)。
and .Arg1 .Arg2
or
2つ以上の引数の論理和を返します(最初の空でない引数、または最後の引数)。
or .Arg1 .Arg2
not
引数の論理否定を返します。
not .Arg
eq
引数の論理的等価性を返します(例:Arg1 == Arg2)。
eq .Arg1 .Arg2
ne
引数の論理的不等式を返します(例:Arg1 != Arg2)。
ne .Arg1 .Arg2
lt
最初の引数が2番目の引数より小さい場合、ブール値trueを返します。それ以外の場合はfalseを返します(例:Arg1 < Arg2)。
lt .Arg1 .Arg2
le
最初の引数が2番目の引数以下である場合、ブール値trueを返します。それ以外の場合はfalseを返します(例:Arg1 <= Arg2)。
le .Arg1 .Arg2
gt
最初の引数が2番目の引数より大きい場合、ブール値trueを返します。それ以外の場合はfalseを返します(例:Arg1 > Arg2)。
gt .Arg1 .Arg2
ge
最初の引数が2番目の引数以上である場合、ブール値trueを返します。それ以外の場合はfalseを返します(例:Arg1 >= Arg2)。
ge .Arg1 .Arg2
default
単純なデフォルト値を設定するには、default
を使用します。
default "foo" .Bar
上記では、.Bar
が空でない値に評価される場合、それが使用されます。しかし、空の場合は、代わりにfoo
が返されます。
"空"の定義は型によって異なります。
- 数値:0
- 文字列:""
- リスト:
[]
- 辞書:
{}
- ブール値:
false
- そして常に
nil
(別名null)
構造体の場合、「空」の定義はないため、構造体はデフォルト値を返すことはありません。
required
設定する必要がある値をrequired
で指定します。
required "A valid foo is required!" .Bar
.Bar
が空であるか、定義されていない場合(これがどのように評価されるかについては、defaultを参照)、テンプレートはレンダリングされず、代わりにエラーメッセージが返されます。
empty
empty
関数は、指定された値が空とみなされる場合にtrue
を返し、それ以外の場合はfalse
を返します。空の値はdefault
セクションにリストされています。
empty .Foo
Goテンプレートの条件式では、空かどうかが自動的に計算されます。そのため、if not empty .Foo
はめったに使用しません。代わりに、if .Foo
を使用してください。
fail
指定されたテキストを含む空のstring
とerror
を無条件に返します。これは、他の条件式でテンプレートのレンダリングを失敗させる必要があると判断された場合に役立ちます。
fail "Please accept the end user license agreement"
coalesce
coalesce
関数は値のリストを受け取り、最初の空でない値を返します。
coalesce 0 1 2
上記は1
を返します。
この関数は、複数の変数または値をスキャンする場合に役立ちます。
coalesce .name .parent.name "Matt"
上記は、まず.name
が空かどうかを確認します。空でない場合、その値を返します。空の場合、coalesce
は.parent.name
の空かどうかを評価します。最後に、.name
と.parent.name
の両方が空の場合、Matt
を返します。
ternary
ternary
関数は2つの値とテスト値を受け取ります。テスト値がtrueの場合、最初の値が返されます。テスト値が空の場合、2番目の値が返されます。これは、Cやその他のプログラミング言語の三項演算子に似ています。
trueテスト値
ternary "foo" "bar" true
or
true | ternary "foo" "bar"
上記は"foo"
を返します。
falseテスト値
ternary "foo" "bar" false
or
false | ternary "foo" "bar"
上記は"bar"
を返します。
文字列関数
Helmには、abbrev、abbrevboth、camelcase、cat、contains、hasPrefix、hasSuffix、indent、initials、kebabcase、lower、nindent、nospace、plural、print、printf、println、quote、randAlpha、randAlphaNum、randAscii、randNumeric、repeat、replace、shuffle、snakecase、squote、substr、swapcase、title、trim、trimAll、trimPrefix、trimSuffix、trunc、untitle、upper、wrap、wrapWithなどの文字列関数が含まれています。
その部分の組み合わせから文字列を返します。
print "Matt has " .Dogs " dogs"
文字列ではない型は、可能な限り文字列に変換されます。
隣り合う2つの引数が文字列でない場合、それらの間にスペースが追加されます。
println
printと同じように動作しますが、最後に改行を追加します。
printf
フォーマット文字列と、それに順番に渡す引数に基づいて文字列を返します。
printf "%s has %d dogs." .Name .NumberDogs
使用するプレースホルダーは、渡される引数の型によって異なります。これには以下が含まれます。
汎用
%v
デフォルト形式の値- 辞書を出力する場合、プラスフラグ(%+v)はフィールド名を追加します。
%%
リテラルパーセント記号。値を消費しません。
ブール値
%t
trueまたはfalseという単語
整数
%b
2進数%c
対応するUnicodeコードポイントで表される文字%d
10進数%o
8進数%O
0oプレフィックス付きの8進数%q
安全にエスケープされた単一引用符付き文字リテラル%x
16進数(小文字のa〜fを使用)%X
16進数(大文字のA〜Fを使用)%U
Unicode形式:U+1234;"U+%04X"と同じ
浮動小数点数と複素数の構成要素
%b
指数が2のべき乗である、小数点以下の科学表記ではない形式、例:-123456p-78%e
科学表記法、例:-1.234456e+78%E
科学表記法、例:-1.234456E+78%f
小数点だが指数なし、例:123.456%F
%fの同義語%g
指数が大きい場合は%e、それ以外の場合は%f。%G
指数が大きい場合は%E、それ以外の場合は%F%x
16進数表記(2のべき乗の指数付き)、例:-0x1.23abcp+20%X
大文字の16進数表記、例:-0X1.23ABCP+20
文字列とバイトのスライス(これらの動詞では同等に扱われます)
%s
文字列またはスライスの解釈されていないバイト%q
安全にエスケープされた二重引用符付き文字列%x
16進数(小文字)、バイトあたり2文字%X
16進数(大文字)、バイトあたり2文字
スライス
%p
16進表記の0番目の要素のアドレス(先頭に0x付き)
trim
trim
関数は、文字列の両側から空白を削除します。
trim " hello "
上記はhello
を生成します。
trimAll
文字列の先頭と末尾から指定された文字を削除します。
trimAll "$" "$5.00"
上記は5.00
(文字列として)を返します。
trimPrefix
文字列からプレフィックスだけを切り取ります。
trimPrefix "-" "-hello"
上記はhello
を返します。
trimSuffix
文字列からサフィックスだけを切り取ります。
trimSuffix "-" "hello-"
上記はhello
を返します。
lower
文字列全体を小文字に変換します。
lower "HELLO"
上記はhello
を返します。
upper
文字列全体を大文字に変換します。
upper "hello"
上記はHELLO
を返します。
title
タイトルケースに変換します。
title "hello world"
上記はHello World
を返します。
untitle
タイトルケースを削除します。untitle "Hello World"
はhello world
を生成します。
repeat
文字列を複数回繰り返します。
repeat 3 "hello"
上記はhellohellohello
を返します。
substr
文字列から部分文字列を取得します。3つのパラメータを取ります。
- 開始位置 (整数)
- 終了位置 (整数)
- 文字列 (文字列)
substr 0 5 "hello world"
上記はhello
を返します。
nospace
文字列からすべての空白を削除します。
nospace "hello w o r l d"
上記はhelloworld
を返します。
trunc
文字列を切り詰めます。
trunc 5 "hello world"
上記はhello
を生成します。
trunc -5 "hello world"
上記はworld
を生成します。
abbrev
省略記号 (...
) を付けて文字列を切り詰めます。
パラメータ
- 最大長
- 文字列
abbrev 5 "hello world"
上記はhe...
を返します(省略記号の幅も最大長にカウントされます)。
abbrevboth
両側から省略します。
abbrevboth 5 10 "1234 5678 9123"
上記は...5678...
を生成します。
以下のものを取ります。
- 左側のオフセット
- 最大長
- 文字列
先頭文字
複数の単語が与えられた場合、各単語の最初の文字を取り、それらを結合します。
initials "First Try"
上記はFT
を返します。
randAlphaNum、randAlpha、randNumeric、randAscii
これらの4つの関数は、暗号的に安全な(crypto/rand
を使用)ランダムな文字列を生成しますが、基底文字セットが異なります。
randAlphaNum
は0-9a-zA-Z
を使用します。randAlpha
はa-zA-Z
を使用します。randNumeric
は0-9
を使用します。randAscii
はすべての印刷可能なASCII文字を使用します。
それぞれ、文字列の長さを示す整数パラメータを1つ取ります。
randNumeric 3
上記は、3桁のランダムな文字列を生成します。
wrap
指定された列数でテキストを折り返します。
wrap 80 $someText
上記は、$someText
内の文字列を80カラムで折り返します。
wrapWith
wrapWith
はwrap
と同様に機能しますが、折り返しに使用する文字列を指定できます(wrap
は\n
を使用)。
wrapWith 5 "\t" "Hello World"
上記はHello World
を生成します(空白はASCIIタブ文字です)。
contains
ある文字列が別の文字列に含まれているかどうかをテストします。
contains "cat" "catch"
上記は、catch
にcat
が含まれているためtrue
を返します。
hasPrefixとhasSuffix
hasPrefix
関数とhasSuffix
関数は、文字列が指定された接頭辞または接尾辞を持っているかどうかをテストします。
hasPrefix "cat" "catch"
上記は、catch
に接頭辞cat
があるためtrue
を返します。
quoteとsquote
これらの関数は、文字列を二重引用符 (quote
) または単一引用符 (squote
) で囲みます。
cat
cat
関数は、複数の文字列をスペースで区切って1つに連結します。
cat "hello" "beautiful" "world"
上記はhello beautiful world
を生成します。
indent
indent
関数は、指定されたインデント幅で与えられた文字列の各行をインデントします。これは、複数行の文字列を整列する際に役立ちます。
indent 4 $lots_of_text
上記は、テキストの各行を4つのスペース文字でインデントします。
nindent
nindent
関数は、indent
関数と同じですが、文字列の先頭に改行を追加します。
nindent 4 $lots_of_text
上記は、テキストの各行を4つのスペース文字でインデントし、先頭に改行を追加します。
replace
単純な文字列置換を実行します。
3つの引数を取ります。
- 置換する文字列
- 置換後の文字列
- 元の文字列
"I Am Henry VIII" | replace " " "-"
上記はI-Am-Henry-VIII
を生成します。
plural
文字列を複数形にします。
len $fish | plural "one anchovy" "many anchovies"
上記では、文字列の長さが1の場合、最初の引数(one anchovy
)が出力されます。それ以外の場合は、2番目の引数(many anchovies
)が出力されます。
引数は以下の通りです。
- 単数形文字列
- 複数形文字列
- 長さ(整数)
注:Helmは現在、より複雑な複数形規則を持つ言語をサポートしていません。また、英語では0を複数形として扱うため、0も複数形として扱われます(zero anchovies
)。
snakecase
camelCaseからsnake_caseに変換します。
snakecase "FirstName"
上記はfirst_name
を生成します。
camelcase
snake_caseからCamelCaseに変換します。
camelcase "http_server"
上記はHttpServer
を生成します。
kebabcase
camelCaseからkebab-caseに変換します。
kebabcase "FirstName"
上記はfirst-name
を生成します。
swapcase
単語ベースのアルゴリズムを使用して文字列の大文字と小文字を入れ替えます。
変換アルゴリズム
- 大文字は小文字に変換されます。
- タイトルケースの文字は小文字に変換されます。
- 空白の後または先頭にある小文字はタイトルケースに変換されます。
- その他の小文字は大文字に変換されます。
- 空白はunicode.IsSpace(char)で定義されます。
swapcase "This Is A.Test"
上記はtHIS iS a.tEST
を生成します。
shuffle
文字列をシャッフルします。
shuffle "hello"
上記はhello
の文字をランダム化し、おそらくoelhl
を生成します。
型変換関数
Helmは次の型変換関数を提供します。
atoi
:文字列を整数に変換します。float64
:float64
に変換します。int
:システムの幅でint
に変換します。int64
:int64
に変換します。toDecimal
:Unixの8進数をint64
に変換します。toString
:文字列に変換します。toStrings
:リスト、スライス、または配列を文字列のリストに変換します。toJson
(mustToJson
):リスト、スライス、配列、辞書、またはオブジェクトをJSONに変換します。toPrettyJson
(mustToPrettyJson
):リスト、スライス、配列、辞書、またはオブジェクトをインデントされたJSONに変換します。toRawJson
(mustToRawJson
):リスト、スライス、配列、辞書、またはオブジェクトをHTML文字がエスケープされていないJSONに変換します。fromYaml
:YAML文字列をオブジェクトに変換します。fromJson
:JSON文字列をオブジェクトに変換します。fromJsonArray
:JSON配列をリストに変換します。toYaml
:リスト、スライス、配列、辞書、またはオブジェクトをインデントされたyamlに変換します。任意のソースからyamlのチャンクをコピーするために使用できます。この関数はGoLang yaml.Marshal関数と同等です。詳細はここを参照してください。https://pkg.go.dev/gopkg.in/yaml.v2#MarshaltoToml
:リスト、スライス、配列、辞書、またはオブジェクトをtomlに変換します。任意のソースからtomlのチャンクをコピーするために使用できます。fromYamlArray
:YAML配列をリストに変換します。
atoi
のみ、入力が特定の型である必要があります。それ以外は、任意の型から目的の型への変換を試みます。例えば、int64
は浮動小数点数を整数に変換できますし、文字列を整数に変換することもできます。
toStrings
リストのようなコレクションが与えられた場合、文字列のスライスを生成します。
list 1 2 3 | toStrings
上記は、1
を"1"
に、2
を"2"
に、といった具合に変換し、リストとして返します。
toDecimal
Unixの8進数のパーミッションが与えられた場合、10進数を生成します。
"0777" | toDecimal
上記は0777
を511
に変換し、int64として値を返します。
toJson、mustToJson
toJson
関数は、アイテムをJSON文字列にエンコードします。アイテムをJSONに変換できない場合、関数は空の文字列を返します。mustToJson
は、アイテムをJSONにエンコードできない場合、エラーをテンプレートエンジンに返します。
toJson .Item
上記は、.Item
のJSON文字列表現を返します。
toPrettyJson、mustToPrettyJson
toPrettyJson
関数は、アイテムを整形された(インデントされた)JSON文字列にエンコードします。
toPrettyJson .Item
上記は、.Item
のインデントされたJSON文字列表現を返します。
toRawJson、mustToRawJson
toRawJson
関数は、アイテムをHTML文字がエスケープされていないJSON文字列にエンコードします。
toRawJson .Item
上記は、.Item
のエスケープされていないJSON文字列表現を返します。
fromYaml
fromYaml
関数はYAML文字列を受け取り、テンプレートで使用できるオブジェクトを返します。
ファイル位置: yamls/person.yaml
name: Bob
age: 25
hobbies:
- hiking
- fishing
- cooking
{{- $person := .Files.Get "yamls/person.yaml" | fromYaml }}
greeting: |
Hi, my name is {{ $person.name }} and I am {{ $person.age }} years old.
My hobbies are {{ range $person.hobbies }}{{ . }} {{ end }}.
fromJson
fromJson
関数はJSON文字列を受け取り、テンプレートで使用できるオブジェクトを返します。
ファイル位置: jsons/person.json
{
"name": "Bob",
"age": 25,
"hobbies": [
"hiking",
"fishing",
"cooking"
]
}
{{- $person := .Files.Get "jsons/person.json" | fromJson }}
greeting: |
Hi, my name is {{ $person.name }} and I am {{ $person.age }} years old.
My hobbies are {{ range $person.hobbies }}{{ . }} {{ end }}.
fromJsonArray
fromJsonArray
関数はJSON配列を受け取り、テンプレートで使用できるリストを返します。
ファイル位置: jsons/people.json
[
{ "name": "Bob","age": 25 },
{ "name": "Ram","age": 16 }
]
{{- $people := .Files.Get "jsons/people.json" | fromJsonArray }}
{{- range $person := $people }}
greeting: |
Hi, my name is {{ $person.name }} and I am {{ $person.age }} years old.
{{ end }}
fromYamlArray
fromYamlArray
関数はYAML配列を受け取り、テンプレートで使用できるリストを返します。
ファイル位置: yamls/people.yml
- name: Bob
age: 25
- name: Ram
age: 16
{{- $people := .Files.Get "yamls/people.yml" | fromYamlArray }}
{{- range $person := $people }}
greeting: |
Hi, my name is {{ $person.name }} and I am {{ $person.age }} years old.
{{ end }}
正規表現
Helmは次の正規表現関数を含みます。regexFind (mustRegexFind)、regexFindAll (mustRegexFindAll)、regexMatch (mustRegexMatch)、regexReplaceAll (mustRegexReplaceAll)、regexReplaceAllLiteral (mustRegexReplaceAllLiteral)、regexSplit (mustRegexSplit)。
regexMatch、mustRegexMatch
入力文字列に正規表現の一致が含まれている場合、trueを返します。
regexMatch "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$" "test@acme.com"
上記はtrue
を生成します。
問題が発生した場合、regexMatch
はパニックを起こし、mustRegexMatch
は問題が発生した場合、テンプレートエンジンにエラーを返します。
regexFindAll、mustRegexFindAll
入力文字列内の正規表現のすべての一致のスライスを返します。最後のパラメータnは返す部分文字列の数を決定し、-1はすべての一致を返すことを意味します。
regexFindAll "[2,4,6,8]" "123456789" -1
上記は[2 4 6 8]
を生成します。
問題が発生した場合、regexFindAll
はパニックを起こし、mustRegexFindAll
は問題が発生した場合、テンプレートエンジンにエラーを返します。
regexFind、mustRegexFind
入力文字列内の正規表現の最初の一致(一番左)を返します。
regexFind "[a-zA-Z][1-9]" "abcd1234"
上記はd1
を生成します。
問題が発生した場合、regexFind
はパニックを起こし、mustRegexFind
は問題が発生した場合、テンプレートエンジンにエラーを返します。
regexReplaceAll、mustRegexReplaceAll
Regexpの一致を置換文字列replacementで置換し、入力文字列のコピーを返します。文字列置換内では、$記号はExpandと同様に解釈されるため、例えば$1は最初の下位一致のテキストを表します。
regexReplaceAll "a(x*)b" "-ab-axxb-" "${1}W"
上記は-W-xxW-
を生成します。
問題が発生した場合、regexReplaceAll
はパニックを起こし、mustRegexReplaceAll
は問題が発生した場合、テンプレートエンジンにエラーを返します。
regexReplaceAllLiteral、mustRegexReplaceAllLiteral
Regexpの一致を置換文字列replacementで置換し、入力文字列のコピーを返します。置換文字列はExpandを使用せずに直接置換されます。
regexReplaceAllLiteral "a(x*)b" "-ab-axxb-" "${1}"
上記は-${1}-${1}-
を生成します。
問題が発生した場合、regexReplaceAllLiteral
はパニックを起こし、mustRegexReplaceAllLiteral
は問題が発生した場合、テンプレートエンジンにエラーを返します。
regexSplit、mustRegexSplit
入力文字列を式で区切られた部分文字列に分割し、それらの式の一致の間の部分文字列のスライスを返します。最後のパラメータn
は返す部分文字列の数を決定し、-1
はすべての一致を返すことを意味します。
regexSplit "z+" "pizza" -1
上記は[pi a]
を生成します。
問題が発生した場合、regexSplit
はパニックを起こし、mustRegexSplit
は問題が発生した場合、テンプレートエンジンにエラーを返します。
暗号化とセキュリティ関数
Helmはいくつかの高度な暗号化関数を提供します。これらにはadler32sum、buildCustomCert、decryptAES、derivePassword、encryptAES、genCA、genPrivateKey、genSelfSignedCert、genSignedCert、htpasswd、sha1sum、およびsha256sumが含まれます。
sha1sum
sha1sum
関数は文字列を受け取り、そのSHA1ダイジェストを計算します。
sha1sum "Hello world!"
sha256sum
sha256sum
関数は文字列を受け取り、そのSHA256ダイジェストを計算します。
sha256sum "Hello world!"
上記は、印刷しても安全な「ASCIIアーマード」形式でSHA 256サムを計算します。
adler32sum
adler32sum
関数は文字列を受け取り、そのAdler-32チェックサムを計算します。
adler32sum "Hello world!"
htpasswd
htpasswd
関数はusername
とpassword
を受け取り、パスワードのbcrypt
ハッシュを生成します。結果は、Apache HTTP Serverの基本認証に使用できます。
htpasswd "myUser" "myPassword"
パスワードをテンプレートに直接保存することは、安全ではありません。
derivePassword
derivePassword
関数は、共有された「マスターパスワード」の制約に基づいて、特定のパスワードを導出するために使用できます。このアルゴリズムは明確に規定されています。
derivePassword 1 "long" "password" "user" "example.com"
パーツをテンプレートに直接保存することは、安全ではありません。
genPrivateKey
genPrivateKey
関数は、PEMブロックにエンコードされた新しい秘密鍵を生成します。
最初の引数には以下のいずれかの値を取ります。
ecdsa
: 楕円曲線DSAキー(P256)を生成します。dsa
: DSAキー(L2048N256)を生成します。rsa
: RSA 4096キーを生成します。
buildCustomCert
buildCustomCert
関数は、証明書をカスタマイズできます。
以下の文字列パラメータを取ります。
- base64エンコードされたPEM形式の証明書
- base64エンコードされたPEM形式の秘密鍵
以下の属性を持つ証明書オブジェクトを返します。
Cert
: PEMエンコードされた証明書Key
: PEMエンコードされた秘密鍵
例
$ca := buildCustomCert "base64-encoded-ca-crt" "base64-encoded-ca-key"
返されたオブジェクトは、このCAを使用して証明書に署名するために、genSignedCert
関数に渡すことができます。
genCA
genCA
関数は、新しい自己署名付きx509認証局を生成します。
以下のパラメータを取ります。
- サブジェクトの共通名(cn)
- 証明書の有効期限(日数)
以下の属性を持つオブジェクトを返します。
Cert
: PEMエンコードされた証明書Key
: PEMエンコードされた秘密鍵
例
$ca := genCA "foo-ca" 365
返されたオブジェクトは、このCAを使用して証明書に署名するために、genSignedCert
関数に渡すことができます。
genSelfSignedCert
genSelfSignedCert
関数は、新しい自己署名付きx509証明書を生成します。
以下のパラメータを取ります。
- サブジェクトの共通名(cn)
- IPのオプションリスト。nilでも可。
- 代替DNS名のオプションリスト。nilでも可。
- 証明書の有効期限(日数)
以下の属性を持つオブジェクトを返します。
Cert
: PEMエンコードされた証明書Key
: PEMエンコードされた秘密鍵
例
$cert := genSelfSignedCert "foo.com" (list "10.0.0.1" "10.0.0.2") (list "bar.com" "bat.com") 365
genSignedCert
genSignedCert
関数は、指定されたCAによって署名された新しいx509証明書を生成します。
以下のパラメータを取ります。
- サブジェクトの共通名(cn)
- IPのオプションリスト。nilでも可。
- 代替DNS名のオプションリスト。nilでも可。
- 証明書の有効期限(日数)
- CA (
genCA
を参照)
例
$ca := genCA "foo-ca" 365
$cert := genSignedCert "foo.com" (list "10.0.0.1" "10.0.0.2") (list "bar.com" "bat.com") 365 $ca
encryptAES
encryptAES
関数は、AES-256 CBCを使用してテキストを暗号化し、base64エンコードされた文字列を返します。
encryptAES "secretkey" "plaintext"
decryptAES
decryptAES
関数は、AES-256 CBCアルゴリズムでエンコードされたbase64文字列を受け取り、デコードされたテキストを返します。
"30tEfhuJSVRhpG97XCuWgz2okj7L8vQ1s6V9zVUPeDQ=" | decryptAES "secretkey"
日付関数
Helmには、テンプレートで使用できる次の日付関数が含まれています。 ago、date、dateInZone、dateModify (mustDateModify)、duration、durationRound、htmlDate、htmlDateInZone、now、toDate (mustToDate)、およびunixEpoch。
now
現在の日付/時刻。他の日付関数と組み合わせて使用します。
ago
ago
関数は、時間からの経過時間を秒単位で返します。
ago .CreatedAt
time.Duration
String() 形式で返します。
2h34m7s
date
date
関数は日付をフォーマットします。
日付をYYYY-MM-DD形式でフォーマットします。
now | date "2006-01-02"
Goでの日付フォーマットは少し異なります。
簡単に言うと、これを基準日として考えます。
Mon Jan 2 15:04:05 MST 2006
希望する形式で記述します。上記では、2006-01-02
は同じ日付ですが、希望する形式です。
dateInZone
date
と同じですが、タイムゾーン付きです。
dateInZone "2006-01-02" (now) "UTC"
duration
指定された秒数をtime.Duration
としてフォーマットします。
これは1m35sを返します。
duration 95
durationRound
指定された期間を最も重要な単位に丸めます。文字列とtime.Duration
は期間として解析され、time.Time
はそれからの期間として計算されます。
これは2hを返します。
durationRound "2h10m5s"
これは3moを返します。
durationRound "2400h10m5s"
unixEpoch
time.Time
のUNIXエポックからの秒数を返します。
now | unixEpoch
dateModify, mustDateModify
dateModify
は変更と日付を受け取り、タイムスタンプを返します。
現在時刻から1時間30分を引きます。
now | dateModify "-1.5h"
変更形式が間違っている場合、dateModify
は日付を変更せずに返します。mustDateModify
はそれ以外の場合、エラーを返します。
htmlDate
htmlDate
関数は、HTMLの日付ピッカー入力フィールドに挿入するための日付をフォーマットします。
now | htmlDate
htmlDateInZone
htmlDateと同じですが、タイムゾーン付きです。
htmlDateInZone (now) "UTC"
toDate, mustToDate
toDate
は文字列を日付に変換します。最初の引数は日付レイアウト、2番目の引数は日付文字列です。文字列を変換できない場合は、ゼロ値を返します。mustToDate
は、文字列を変換できない場合にエラーを返します。
これは、文字列の日付を別の形式に変換する場合(パイプを使用)に便利です。以下の例では、「2017-12-31」を「31/12/2017」に変換します。
toDate "2006-01-02" "2017-12-31" | date "02/01/2006"
辞書と辞書関数
Helmは、dict
(Pythonのように「辞書」の略)と呼ばれるキー/値ストレージタイプを提供します。dict
は順序付けられていないタイプです。
辞書のキーは**必ず文字列でなければなりません**。ただし、値は任意のタイプにすることができ、別のdict
またはlist
も可能です。
list
とは異なり、dict
は不変ではありません。set
関数とunset
関数は、辞書のコンテンツを変更します。
Helmは、dictの操作をサポートするために、次の関数を提供します。 deepCopy (mustDeepCopy)、dict、dig、get、hasKey、keys、merge (mustMerge)、mergeOverwrite (mustMergeOverwrite)、omit、pick、pluck、set、unset、およびvalues。
dict
辞書の作成は、dict
関数を呼び出して、ペアのリストを渡すことによって行われます。
以下は、3つの項目を持つ辞書を作成します。
$myDict := dict "name1" "value1" "name2" "value2" "name3" "value 3"
get
マップとキーを指定して、マップから値を取得します。
get $myDict "name1"
上記は"value1"
を返します。
キーが見つからない場合、この操作は単に""
を返します。エラーは発生しません。
set
set
を使用して、新しいキー/値のペアを辞書に追加します。
$_ := set $myDict "name4" "value4"
set
は辞書を返します(Goテンプレート関数の要件)。そのため、上記のように$_
割り当てを使用して値をトラップする必要がある場合があります。
unset
マップとキーを指定して、マップからキーを削除します。
$_ := unset $myDict "name4"
set
と同様に、これは辞書を返します。
キーが見つからない場合、この操作は単に返ります。エラーは発生しません。
hasKey
hasKey
関数は、指定されたdictに指定されたキーが含まれている場合、true
を返します。
hasKey $myDict "name1"
キーが見つからない場合、false
を返します。
pluck
pluck
関数は、1つのキーと複数のマップを指定し、すべてのマッチのリストを取得することを可能にします。
pluck "name1" $myDict $myOtherDict
上記は、見つかったすべての値を含むlist
([value1 otherValue1]
)を返します。
指定されたキーがマップに見つからない場合、そのマップにはリストに項目がありません(返されたリストの長さは、pluck
への呼び出しにおけるdictの数より少なくなります)。
キーが見つかったが値が空の場合、その値が挿入されます。
Helmテンプレートの一般的なイディオムは、pluck... | first
を使用して、辞書の集合から最初のマッチするキーを取得することです。
dig
dig
関数は、ネストされたdictのセットをトラバースし、値のリストからキーを選択します。キーが関連付けられたdictに見つからない場合、デフォルト値を返します。
dig "user" "role" "humanName" "guest" $dict
次のように構造化されたdictを指定した場合
{
user: {
role: {
humanName: "curator"
}
}
}
上記は"curator"
を返します。dictにuser
フィールドがまったくない場合、結果は"guest"
になります。
特にGoのテンプレートパッケージのand
がショートカットしないため、ガード句を避けたい場合に、Digは非常に便利です。たとえば、and a.maybeNil a.maybeNil.iNeedThis
は常にa.maybeNil.iNeedThis
を評価し、a
にmaybeNil
フィールドがない場合はパニックになります。
パイプラインをサポートするために、dig
はdict引数を最後に受け入れます。たとえば
merge a b c | dig "one" "two" "three" "<missing>"
merge, mustMerge
2つ以上の辞書を1つにマージし、宛先辞書に優先順位を与えます。
以下を指定した場合
dst:
default: default
overwrite: me
key: true
src:
overwrite: overwritten
key: false
結果は次のようになります。
newdict:
default: default
overwrite: me
key: true
$newdict := merge $dest $source1 $source2
これはディープマージ操作ですが、ディープコピー操作ではありません。マージされるネストされたオブジェクトは、両方のdictで同じインスタンスです。マージと同時にディープコピーが必要な場合は、deepCopy
関数とマージを一緒に使用します。例:
deepCopy $source | merge $dest
マージが失敗した場合、mustMerge
はエラーを返します。
mergeOverwrite, mustMergeOverwrite
2つ以上の辞書を1つにマージし、右から左への優先順位を与え、宛先辞書の値を効果的に上書きします。
以下を指定した場合
dst:
default: default
overwrite: me
key: true
src:
overwrite: overwritten
key: false
結果は次のようになります。
newdict:
default: default
overwrite: overwritten
key: false
$newdict := mergeOverwrite $dest $source1 $source2
これはディープマージ操作ですが、ディープコピー操作ではありません。マージされるネストされたオブジェクトは、両方のdictで同じインスタンスです。マージと同時にディープコピーが必要な場合は、deepCopy
関数とマージを一緒に使用します。例:
deepCopy $source | mergeOverwrite $dest
マージが失敗した場合、mustMergeOverwrite
はエラーを返します。
keys
keys
関数は、1つ以上のdict
タイプのすべてのキーのlist
を返します。辞書は順序付けられていないため、キーは予測可能な順序になりません。sortAlpha
でソートできます。
keys $myDict | sortAlpha
複数の辞書を指定した場合、キーは連結されます。一意でソートされたキーのリストを取得するには、uniq
関数とsortAlpha
を一緒に使用します。
keys $myDict $myOtherDict | uniq | sortAlpha
pick
pick
関数は、辞書から指定されたキーだけを選択して、新しいdict
を作成します。
$new := pick $myDict "name1" "name2"
上記は{name1: value1, name2: value2}
を返します。
omit
omit
関数はpick
に似ていますが、指定されたキーと一致しないすべてのキーを持つ新しいdict
を返します。
$new := omit $myDict "name1" "name3"
上記は{name2: value2}
を返します。
values
values
関数はkeys
に似ていますが、ソースdict
のすべての値を持つ新しいlist
を返します(1つの辞書のみがサポートされています)。
$vals := values $myDict
上記はlist["value1", "value2", "value 3"]
を返します。values
関数は結果の順序について保証しません。これが重要な場合は、sortAlpha
を使用してください。
deepCopy, mustDeepCopy
deepCopy
関数とmustDeepCopy
関数は値を受け取り、その値のディープコピーを作成します。これには、dictやその他の構造が含まれます。deepCopy
は問題が発生した場合にパニックを起こしますが、mustDeepCopy
はエラーが発生した場合にテンプレートシステムにエラーを返します。
dict "a" 1 "b" 2 | deepCopy
Dict内部に関するメモ
dict
はGoではmap[string]interface{}
として実装されています。Go開発者は、map[string]interface{}
値をコンテキストに渡して、テンプレートでdict
として利用できるようにすることができます。
エンコード関数
Helmには、次のエンコードおよびデコード関数が含まれています。
b64enc
/b64dec
: Base64によるエンコードまたはデコードb32enc
/b32dec
: Base32によるエンコードまたはデコード
リストとリスト関数
Helmは、任意の順序付きデータのリストを含むシンプルなlist
型を提供します。これは配列やスライスに似ていますが、リストは不変データ型として使用されるように設計されています。
整数のリストを作成する
$myList := list 1 2 3 4 5
上記は[1 2 3 4 5]
のリストを作成します。
Helmは、以下のリスト関数を提供します:append (mustAppend)、compact (mustCompact)、concat、first (mustFirst)、has (mustHas)、initial (mustInitial)、last (mustLast)、prepend (mustPrepend)、rest (mustRest)、reverse (mustReverse)、seq、index、slice (mustSlice)、uniq (mustUniq)、until、untilStep、およびwithout (mustWithout)。
first、mustFirst
リストの先頭の項目を取得するには、first
を使用します。
first $myList
は1
を返します。
first
は問題が発生した場合にパニックを起こしますが、mustFirst
は問題が発生した場合にテンプレートエンジンにエラーを返します。
rest、mustRest
リストの末尾(最初の項目を除くすべて)を取得するには、rest
を使用します。
rest $myList
は[2 3 4 5]
を返します。
rest
は問題が発生した場合にパニックを起こしますが、mustRest
は問題が発生した場合にテンプレートエンジンにエラーを返します。
last、mustLast
リストの最後の項目を取得するには、last
を使用します。
last $myList
は5
を返します。これは、リストを反転してからfirst
を呼び出すこととほぼ同等です。
initial、mustInitial
これはlast
を補完し、最後の要素を除くすべての要素を返します。initial $myList
は[1 2 3 4]
を返します。
initial
は問題が発生した場合にパニックを起こしますが、mustInitial
は問題が発生した場合にテンプレートエンジンにエラーを返します。
append、mustAppend
既存のリストに新しい項目を追加して、新しいリストを作成します。例えば、$new := append $myList 6
$new = append $myList 6
上記は$new
を[1 2 3 4 5 6]
に設定します。$myList
は変更されません。
append
は問題が発生した場合にパニックを起こしますが、mustAppend
は問題が発生した場合にテンプレートエンジンにエラーを返します。
prepend、mustPrepend
リストの先頭に要素を追加して、新しいリストを作成します。例えば、$new := prepend $myList 0
prepend $myList 0
上記は[0 1 2 3 4 5]
を生成します。$myList
は変更されません。
prepend
は問題が発生した場合にパニックを起こしますが、mustPrepend
は問題が発生した場合にテンプレートエンジンにエラーを返します。
concat
任意の数のリストを1つに連結します。例えば、$newList := concat $myList [6 7 8]
concat $myList ( list 6 7 ) ( list 8 )
上記は[1 2 3 4 5 6 7 8]
を生成します。$myList
は変更されません。
reverse、mustReverse
与えられたリストの要素を反転した新しいリストを生成します。例えば、$reversedList := reverse $myList
reverse $myList
上記は[5 4 3 2 1]
のリストを生成します。
reverse
は問題が発生した場合にパニックを起こしますが、mustReverse
は問題が発生した場合にテンプレートエンジンにエラーを返します。
uniq、mustUniq
重複をすべて削除したリストを生成します。例えば、$uniqList := uniq [1 2 2 1]
list 1 1 1 2 | uniq
上記は[1 2]
を生成します。
uniq
は問題が発生した場合にパニックを起こしますが、mustUniq
は問題が発生した場合にテンプレートエンジンにエラーを返します。
without、mustWithout
without
関数は、リストから項目をフィルタリングします。例えば、$filteredList := without $myList 3
without $myList 3
上記は[1 2 4 5]
を生成します。
without
は複数のフィルタを取ることができます。例えば、$filteredList := without $myList 3 1
without $myList 1 3 5
これは[2 4]
を生成します。
without
は問題が発生した場合にパニックを起こしますが、mustWithout
は問題が発生した場合にテンプレートエンジンにエラーを返します。
has、mustHas
リストに特定の要素があるかどうかをテストします。例えば、has "1" $myList
has 4 $myList
上記はtrue
を返し、has "hello" $myList
はfalseを返します。
has
は問題が発生した場合にパニックを起こしますが、mustHas
は問題が発生した場合にテンプレートエンジンにエラーを返します。
compact、mustCompact
リストを受け取り、空の値のエントリを削除します。例えば、$compactList := compact ["a" "" "b"]
$list := list 1 "a" "foo" ""
$copy := compact $list
compact
は、空(つまり"")の項目を削除した新しいリストを返します。
compact
は問題が発生した場合にパニックを起こし、mustCompact
は問題が発生した場合にテンプレートエンジンにエラーを返します。
index
リストのn番目の要素を取得するには、index list [n]
を使用します。多次元リストにインデックスを付けるには、index list [n] [m] ...
を使用します。
index $myList 0
は1
を返します。これはmyList[0]
と同じです。index $myList 0 1
はmyList[0][1]
と同じです。
slice、mustSlice
リストの部分要素を取得するには、slice list [n] [m]
を使用します。これはlist[n:m]
と同等です。
slice $myList
は[1 2 3 4 5]
を返します。これはmyList[:]
と同じです。slice $myList 3
は[4 5]
を返します。これはmyList[3:]
と同じです。slice $myList 1 3
は[2 3]
を返します。これはmyList[1:3]
と同じです。slice $myList 0 3
は[1 2 3]
を返します。これはmyList[:3]
と同じです。
slice
は問題が発生した場合にパニックを起こしますが、mustSlice
は問題が発生した場合にテンプレートエンジンにエラーを返します。
until
until
関数は、整数の範囲を作成します。例えば、until 5
until 5
上記は[0, 1, 2, 3, 4]
のリストを生成します。
これはrange $i, $e := until 5
でループする場合に便利です。
untilStep
until
と同様に、untilStep
はカウントする整数のリストを生成します。しかし、開始、停止、ステップを定義できます。例えば、untilStep 3 2 6
untilStep 3 6 2
上記は、3から始まり、6以上になるまで2を加算することで[3 5]
を生成します。これはPythonのrange
関数に似ています。
seq
bashのseq
コマンドのように機能します。
- 1つのパラメータ(end):1から
end
までのすべてのカウントする整数を生成します(end
を含む)。 - 2つのパラメータ(start、end):
start
からend
までのすべてのカウントする整数を生成します(start
とend
を含む)。1ずつ増分または減分します。 - 3つのパラメータ(start、step、end):
start
からend
までのすべてのカウントする整数を生成します(start
とend
を含む)。step
ずつ増分または減分します。
seq 5 => 1 2 3 4 5
seq -3 => 1 0 -1 -2 -3
seq 0 2 => 0 1 2
seq 2 -2 => 2 1 0 -1 -2
seq 0 2 10 => 0 2 4 6 8 10
seq 0 -2 -5 => 0 -2 -4
数学関数
特に指定がない限り、すべての数学関数はint64
値で動作します。
以下の数学関数が利用可能です:add、add1、ceil、div、floor、len、max、min、mod、mul、round、およびsub。
add
add
で数値を合計します。2つ以上の入力を受け付けます。
add 1 2 3
add1
1ずつ増分するには、add1
を使用します。
sub
減算するには、sub
を使用します。
div
div
で整数除算を実行します。
mod
mod
で剰余を求めます。
mul
mul
で乗算します。2つ以上の入力を受け付けます。
mul 1 2 3
max
一連の整数の中で最大の値を返します。例えば、max 1 2 3
これは3
を返します。
max 1 2 3
min
一連の整数の中で最小の値を返します。例えば、min 1 2 3
min 1 2 3
は1
を返します。
len
引数の長さを整数として返します。
len .Arg
浮動小数点数の数学関数
すべての数学関数はfloat64
値で動作します。
addf
addf
で数値を合計します。例えば、addf 2.5 3
これは5.5
を返します。
addf 1.5 2 2
add1f
1ずつ増分するには、add1f
を使用します。
subf
減算するには、subf
を使用します。例えば、subf 7.5 2 3
これは7.5 - 2 - 3
と同等であり、2.5
を返します。
subf 7.5 2 3
divf
divf
で整数除算を実行します。例えば、divf 10 2 4
これは10 / 2 / 4
と同等であり、1.25
を返します。
divf 10 2 4
mulf
mulf
で乗算します。例えば、mulf 2 3
これは6
を返します。
mulf 1.5 2 2
maxf
一連の浮動小数点数のうち最大の値を返します。
これは3
を返します。
maxf 1 2.5 3
minf
一連の浮動小数点数のうち最小の値を返します。例えば、minf 1.5 2.5 3.5
これは1.5
を返します。
minf 1.5 2 3
floor
入力値以下の最大の浮動小数点数値を返します。
floor 123.9999
は123.0
を返します。
ceil
入力値以上の最小の浮動小数点数値を返します。
ceil 123.001
は124.0
を返します。
round
小数点以下の桁数を指定した桁数に丸めた浮動小数点数値を返します。
round 123.555555 3
は123.556
を返します。
ネットワーク関数
Helmには、getHostByName
という単一のネットワーク関数があります。
getHostByName
はドメイン名を受け取り、IPアドレスを返します。
getHostByName "www.google.com"
は、www.google.com
に対応するIPアドレスを返します。
ファイルパス関数
Helmのテンプレート関数はファイルシステムへのアクセス権限を与えませんが、ファイルパスの規則に従う文字列を操作するための関数を提供します。これらには、base、clean、dir、ext、およびisAbsが含まれます。
base
パスの最後の要素を返します。例えば、base "foo/bar/baz"
base "foo/bar/baz"
上記は"baz"を出力します。
dir
ディレクトリを返し、パスの最後の部分を削除します。そのため、dir "foo/bar/baz"
はfoo/bar
を返します。
clean
パスをクリーンアップします。例えば、clean "foo/../bar/baz"
clean "foo/bar/../baz"
上記は..
を解決し、foo/baz
を返します。
ext
ファイルの拡張子を返します。例えば、ext "foo.bar"
ext "foo.bar"
上記は.bar
を返します。
isAbs
ファイルパスが絶対パスかどうかを確認するには、isAbs
を使用します。
リフレクション関数
Helmは基本的なリフレクションツールを提供します。これにより、高度なテンプレート開発者は、特定の値の基になるGoの型情報を理解することができます。HelmはGoで記述されており、厳密に型付けされています。型システムはテンプレート内で適用されます。
Goには、string
、slice
、int64
、bool
など、いくつかのプリミティブな種類があります。
Goには、開発者が独自の型を作成できるオープンな型システムがあります。
Helmは、種類関数と型関数を介して、それぞれ一連の関数を提供します。deepEqual関数も、2つの値を比較するために提供されています。
種類関数
2つの種類関数があります。kindOf
はオブジェクトの種類を返します。例えば、kindOf "foo"
kindOf "hello"
上記はstring
を返します。単純なテスト(if
ブロックなど)では、kindIs
関数を使用して、値が特定の種類であることを確認できます。例えば、kindIs "string" "foo"
kindIs "int" 123
上記はtrue
を返します。
型関数
型は少し扱いが難しいので、3つの異なる関数があります。
typeOf
は値の基になる型を返します:typeOf $foo
typeIs
はkindIs
に似ていますが、型に対して使用します:typeIs "*io.Buffer" $myVal
typeIsLike
はtypeIs
と同様に機能しますが、ポインタの参照外しも行います。
注記: これらのいずれも、与えられたインターフェースを実装しているかどうかをテストすることはできません。なぜなら、そうするにはインターフェースを事前にコンパイルする必要があるためです。
deepEqual
deepEqual
は、2つの値が"深く等しい"場合にtrueを返します。
(組み込みのeq
と比較して)プリミティブでない型にも対応しています。
deepEqual (list 1 2 3) (list 1 2 3)
上記はtrue
を返します。
セマンティックバージョン関数
いくつかのバージョンスキームは、簡単に解析して比較できます。HelmはSemVer 2バージョンを扱うための関数を提供します。これにはsemverとsemverCompareが含まれます。以下では、比較に範囲を使用する方法についても詳しく説明します。
semver
semver
関数は、文字列をセマンティックバージョンに解析します。
$version := semver "1.2.3-alpha.1+123"
パーサーが失敗した場合、テンプレートの実行はエラーで停止します。
この時点で、$version
は、以下のプロパティを持つVersion
オブジェクトへのポインタです。
$version.Major
: メジャー番号 (上記の1
)$version.Minor
: マイナー番号 (上記の2
)$version.Patch
: パッチ番号 (上記の3
)$version.Prerelease
: プリリリース (上記のalpha.1
)$version.Metadata
: ビルドメタデータ (上記の123
)$version.Original
: 元のバージョン(文字列)
さらに、Compare
関数を使用してVersion
を別のversion
と比較できます。
semver "1.4.3" | (semver "1.2.3").Compare
上記は-1
を返します。
戻り値は次のとおりです。
-1
: 指定されたsemverが、Compare
メソッドが呼び出されたsemverより大きい場合1
:Compare
関数が呼び出されたバージョンの方が大きい場合。0
: 両方が同じバージョンである場合
(SemVerでは、バージョン比較操作中にMetadata
フィールドは比較されません。)
semverCompare
より堅牢な比較関数がsemverCompare
として提供されています。このバージョンは、バージョンの範囲をサポートしています。
semverCompare "1.2.3" "1.2.3"
は完全一致をチェックします。semverCompare "~1.2.0" "1.2.3"
は、メジャーバージョンとマイナーバージョンが一致し、2番目のバージョンのパッチ番号が最初の引数以上であることをチェックします。
SemVer関数は、Sprigの作成者によるMasterminds semverライブラリを使用しています。
基本的な比較
比較には2つの要素があります。まず、比較文字列は、スペースまたはカンマで区切られたAND比較のリストです。これらは次に||(OR)比較で区切られます。たとえば、">= 1.2 < 3.0.0 || >= 4.2.3"
は、1.2以上で3.0.0未満、または4.2.3以上の比較を探しています。
基本的な比較は以下のとおりです。
=
: 等しい(演算子なしと同じ)!=
: 等しくない>
: より大きい<
: より小さい>=
: 以上<=
: 以下
プリリリースバージョンを扱う
プリリリースとは、ご存知ない方のために説明すると、安定版または一般公開版の前にリリースされるソフトウェアリリースに使用されます。プリリリースの例としては、開発版、アルファ版、ベータ版、リリース候補版などがあります。プリリリースは、1.2.3-beta.1
などのバージョンである可能性があり、安定版リリースは1.2.3
になります。優先順位では、プリリリースは関連するリリースよりも前に来ます。この例では1.2.3-beta.1 < 1.2.3
です。
セマンティックバージョンの仕様によると、プリリリースはリリース版とAPI互換性がない可能性があります。つまり、
プリリリースバージョンは、バージョンが不安定であり、関連する通常のバージョンによって示される意図された互換性要件を満たさない可能性があることを示しています。
プリリリースコンパレーターのない制約を使用したSemVer比較は、プリリリースバージョンをスキップします。たとえば、>=1.2.3
は、リリースのリストを見るときにプリリリースをスキップしますが、>=1.2.3-0
はプリリリースを評価して見つけます。
例の比較でプリリリースバージョンとして0
を使用する理由は、プリリリースは仕様に従ってASCII英数字とハイフン(.
セパレーターを含む)のみを含めることができるためです。ソートは、仕様に従ってASCIIソート順で行われます。ASCIIソート順で最も低い文字は0
です(ASCIIテーブルを参照)。
ASCIIソート順序を理解することが重要です。なぜなら、A-Zはa-zの前にくるからです。つまり、>=1.2.3-BETA
は1.2.3-alpha
を返します。大文字と小文字の区別に関する期待とは異なります。これは、仕様で指定されているASCIIソート順によるものです。
ハイフン範囲の比較
範囲を処理する方法は複数あり、最初の方法はハイフン範囲です。これらは次のようになります。
1.2 - 1.4.5
は>= 1.2 <= 1.4.5
と同等です。2.3.4 - 4.5
は>= 2.3.4 <= 4.5
と同等です。
比較におけるワイルドカード
x
、X
、*
文字はワイルドカード文字として使用できます。これはすべての比較演算子に適用されます。=
演算子で使用すると、パッチレベルの比較に戻ります(下記のチルダを参照)。たとえば、
1.2.x
は>= 1.2.0, < 1.3.0
と同等です。>= 1.2.x
は>= 1.2.0
と同等です。<= 2.x
は< 3
と同等です。*
は>= 0.0.0
と同等です。
チルダ範囲の比較(パッチ)
チルダ(~
)比較演算子は、マイナーバージョンが指定されている場合のパッチレベル範囲、マイナー番号がない場合のメジャーレベルの変更に使用されます。たとえば、
~1.2.3
は>= 1.2.3, < 1.3.0
と同等です。~1
は>= 1, < 2
と同等です。~2.3
は>= 2.3, < 2.4
と同等です。~1.2.x
は>= 1.2.0, < 1.3.0
と同等です。~1.x
は>= 1, < 2
と同等です。
キャレット範囲の比較(メジャー)
キャレット(^
)比較演算子は、安定版(1.0.0)リリースが行われた後のメジャーレベルの変更に使用されます。1.0.0リリースの前に、マイナーバージョンはAPI安定性レベルとして機能します。これは、メジャー変更がAPI破壊的であるため、APIバージョンの比較に役立ちます。たとえば、
^1.2.3
は>= 1.2.3, < 2.0.0
と同等です。^1.2.x
は>= 1.2.0, < 2.0.0
と同等です。^2.3
は>= 2.3, < 3
と同等です。^2.x
は>= 2.0.0, < 3
と同等です。^0.2.3
は>=0.2.3 <0.3.0
と同等です。^0.2
は>=0.2.0 <0.3.0
と同等です。^0.0.3
は>=0.0.3 <0.0.4
と同等です。^0.0
は>=0.0.0 <0.1.0
と同等です。^0
は>=0.0.0 <1.0.0
と同等です。
URL関数
HelmにはurlParse、urlJoin、urlquery関数が含まれており、URLの部分を操作できます。
urlParse
URLの文字列を解析し、URLの部分を含む辞書を生成します。
urlParse "http://admin:secret@server.com:8080/api?list=false#anchor"
上記は、URLオブジェクトを含む辞書を返します。
scheme: 'http'
host: 'server.com:8080'
path: '/api'
query: 'list=false'
opaque: nil
fragment: 'anchor'
userinfo: 'admin:secret'
これは、Go標準ライブラリのURLパッケージを使用して実装されています。詳細については、https://go.dokyumento.jp/pkg/net/url/#URLを参照してください。
urlJoin
マップ(urlParse
によって生成された)を結合してURL文字列を生成します。
urlJoin (dict "fragment" "fragment" "host" "host:80" "path" "/path" "query" "query" "scheme" "http")
上記は次の文字列を返します。
http://host:80/path?query#fragment
urlquery
引数として渡された値のエスケープされたバージョンを返し、URLのクエリ部分に埋め込むのに適したものにします。
$var := urlquery "string for query"
UUID関数
HelmはUUID v4(普遍的に一意のID)を生成できます。
uuidv4
上記は、v4(ランダムに生成された)タイプの新しいUUIDを返します。
Kubernetesとチャート関数
Helmには、.Capabilities.APIVersions.Has、ファイル、lookupなど、Kubernetesを操作するための関数が含まれています。
lookup
lookup
は、実行中のクラスタでリソースを検索するために使用されます。helm template
コマンドで使用する場合、常に空の応答を返します。
lookup関数のドキュメントで詳細を確認できます。
.Capabilities.APIVersions.Has
クラスタでAPIバージョンまたはリソースが使用可能かどうかを返します。
.Capabilities.APIVersions.Has "apps/v1"
.Capabilities.APIVersions.Has "apps/v1/Deployment"
組み込みオブジェクトのドキュメントで詳細情報を確認できます。
ファイル関数
チャート内の特別なファイル以外のファイルにアクセスするための関数がいくつかあります。たとえば、アプリケーション構成ファイルにアクセスする場合などです。これらについてはテンプレート内のファイルへのアクセスで説明されています。
これらの関数の多くのドキュメントはSprigから取得されています。Sprigは、Goアプリケーションで使用できるテンプレート関数ライブラリです。