テンプレート関数一覧

Helmには、テンプレートで利用できる多くのテンプレート関数が含まれています。それらは以下のように分類されています。

論理とフロー制御関数

Helmには、andcoalescedefaultemptyeqfailgegtleltnenotorrequiredなど、多数の論理と制御フロー関数が含まれています。

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

指定されたテキストを含む空のstringerrorを無条件に返します。これは、他の条件式でテンプレートのレンダリングを失敗させる必要があると判断された場合に役立ちます。

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には、abbrevabbrevbothcamelcasecatcontainshasPrefixhasSuffixindentinitialskebabcaselowernindentnospacepluralprintprintfprintlnquoterandAlpharandAlphaNumrandAsciirandNumericrepeatreplaceshufflesnakecasesquotesubstrswapcasetitletrimtrimAlltrimPrefixtrimSuffixtruncuntitleupperwrapwrapWithなどの文字列関数が含まれています。

print

その部分の組み合わせから文字列を返します。

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を使用)ランダムな文字列を生成しますが、基底文字セットが異なります。

  • randAlphaNum0-9a-zA-Zを使用します。
  • randAlphaa-zA-Zを使用します。
  • randNumeric0-9を使用します。
  • randAsciiはすべての印刷可能なASCII文字を使用します。

それぞれ、文字列の長さを示す整数パラメータを1つ取ります。

randNumeric 3

上記は、3桁のランダムな文字列を生成します。

wrap

指定された列数でテキストを折り返します。

wrap 80 $someText

上記は、$someText内の文字列を80カラムで折り返します。

wrapWith

wrapWithwrapと同様に機能しますが、折り返しに使用する文字列を指定できます(wrap\nを使用)。

wrapWith 5 "\t" "Hello World"

上記はHello Worldを生成します(空白はASCIIタブ文字です)。

contains

ある文字列が別の文字列に含まれているかどうかをテストします。

contains "cat" "catch"

上記は、catchcatが含まれているため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:文字列を整数に変換します。
  • float64float64に変換します。
  • int:システムの幅でintに変換します。
  • int64int64に変換します。
  • 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#Marshal
  • toToml:リスト、スライス、配列、辞書、またはオブジェクトをtomlに変換します。任意のソースからtomlのチャンクをコピーするために使用できます。
  • fromYamlArray:YAML配列をリストに変換します。

atoiのみ、入力が特定の型である必要があります。それ以外は、任意の型から目的の型への変換を試みます。例えば、int64は浮動小数点数を整数に変換できますし、文字列を整数に変換することもできます。

toStrings

リストのようなコレクションが与えられた場合、文字列のスライスを生成します。

list 1 2 3 | toStrings

上記は、1"1"に、2"2"に、といった具合に変換し、リストとして返します。

toDecimal

Unixの8進数のパーミッションが与えられた場合、10進数を生成します。

"0777" | toDecimal

上記は0777511に変換し、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はいくつかの高度な暗号化関数を提供します。これらにはadler32sumbuildCustomCertdecryptAESderivePasswordencryptAESgenCAgenPrivateKeygenSelfSignedCertgenSignedCerthtpasswdsha1sum、および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関数はusernamepasswordを受け取り、パスワードの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には、テンプレートで使用できる次の日付関数が含まれています。 agodatedateInZonedateModify (mustDateModify)durationdurationRoundhtmlDatehtmlDateInZonenowtoDate (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)dictdiggethasKeykeysmerge (mustMerge)mergeOverwrite (mustMergeOverwrite)omitpickplucksetunset、および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を評価し、amaybeNilフィールドがない場合はパニックになります。

パイプラインをサポートするために、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)concatfirst (mustFirst)has (mustHas)initial (mustInitial)last (mustLast)prepend (mustPrepend)rest (mustRest)reverse (mustReverse)seqindexslice (mustSlice)uniq (mustUniq)untiluntilStep、およびwithout (mustWithout)

first、mustFirst

リストの先頭の項目を取得するには、firstを使用します。

first $myList1を返します。

firstは問題が発生した場合にパニックを起こしますが、mustFirstは問題が発生した場合にテンプレートエンジンにエラーを返します。

rest、mustRest

リストの末尾(最初の項目を除くすべて)を取得するには、restを使用します。

rest $myList[2 3 4 5]を返します。

restは問題が発生した場合にパニックを起こしますが、mustRestは問題が発生した場合にテンプレートエンジンにエラーを返します。

last、mustLast

リストの最後の項目を取得するには、lastを使用します。

last $myList5を返します。これは、リストを反転してから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 01を返します。これはmyList[0]と同じです。
  • index $myList 0 1myList[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までのすべてのカウントする整数を生成します(startendを含む)。1ずつ増分または減分します。
  • 3つのパラメータ(start、step、end):startからendまでのすべてのカウントする整数を生成します(startendを含む)。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値で動作します。

以下の数学関数が利用可能です:addadd1ceildivfloorlenmaxminmodmulround、および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 31を返します。

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.9999123.0を返します。

ceil

入力値以上の最小の浮動小数点数値を返します。

ceil 123.001124.0を返します。

round

小数点以下の桁数を指定した桁数に丸めた浮動小数点数値を返します。

round 123.555555 3123.556を返します。

ネットワーク関数

Helmには、getHostByNameという単一のネットワーク関数があります。

getHostByNameはドメイン名を受け取り、IPアドレスを返します。

getHostByName "www.google.com"は、www.google.comに対応するIPアドレスを返します。

ファイルパス関数

Helmのテンプレート関数はファイルシステムへのアクセス権限を与えませんが、ファイルパスの規則に従う文字列を操作するための関数を提供します。これらには、basecleandirext、および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には、stringsliceint64boolなど、いくつかのプリミティブな種類があります。

Goには、開発者が独自の型を作成できるオープンなシステムがあります。

Helmは、種類関数型関数を介して、それぞれ一連の関数を提供します。deepEqual関数も、2つの値を比較するために提供されています。

種類関数

2つの種類関数があります。kindOfはオブジェクトの種類を返します。例えば、kindOf "foo"

kindOf "hello"

上記はstringを返します。単純なテスト(ifブロックなど)では、kindIs関数を使用して、値が特定の種類であることを確認できます。例えば、kindIs "string" "foo"

kindIs "int" 123

上記はtrueを返します。

型関数

型は少し扱いが難しいので、3つの異なる関数があります。

  • typeOfは値の基になる型を返します:typeOf $foo
  • typeIskindIsに似ていますが、型に対して使用します: typeIs "*io.Buffer" $myVal
  • typeIsLiketypeIsと同様に機能しますが、ポインタの参照外しも行います。

注記: これらのいずれも、与えられたインターフェースを実装しているかどうかをテストすることはできません。なぜなら、そうするにはインターフェースを事前にコンパイルする必要があるためです。

deepEqual

deepEqualは、2つの値が"深く等しい"場合にtrueを返します。

(組み込みのeqと比較して)プリミティブでない型にも対応しています。

deepEqual (list 1 2 3) (list 1 2 3)

上記はtrueを返します。

セマンティックバージョン関数

いくつかのバージョンスキームは、簡単に解析して比較できます。HelmはSemVer 2バージョンを扱うための関数を提供します。これにはsemversemverCompareが含まれます。以下では、比較に範囲を使用する方法についても詳しく説明します。

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-BETA1.2.3-alphaを返します。大文字と小文字の区別に関する期待とは異なります。これは、仕様で指定されているASCIIソート順によるものです。

ハイフン範囲の比較

範囲を処理する方法は複数あり、最初の方法はハイフン範囲です。これらは次のようになります。

  • 1.2 - 1.4.5>= 1.2 <= 1.4.5 と同等です。
  • 2.3.4 - 4.5>= 2.3.4 <= 4.5 と同等です。

比較におけるワイルドカード

xX*文字はワイルドカード文字として使用できます。これはすべての比較演算子に適用されます。=演算子で使用すると、パッチレベルの比較に戻ります(下記のチルダを参照)。たとえば、

  • 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にはurlParseurlJoinurlquery関数が含まれており、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アプリケーションで使用できるテンプレート関数ライブラリです。