値
このベストプラクティスガイドでは、値の使い方について説明します。このガイドでは、チャートのvalues.yamlファイルの設計に焦点を当て、値の構成と使用方法に関する推奨事項を提供します。
命名規則
変数名は小文字で始まり、単語はキャメルケースで区切る必要があります
正しい
chicken: true
chickenNoodleSoup: true
誤り
Chicken: true # initial caps may conflict with built-ins
chicken-noodle-soup: true # do not use hyphens in the name
Helmの組み込み変数はすべて大文字で始まるため、ユーザー定義の値(.Release.Name、.Capabilities.KubeVersion)と容易に区別できることに注意してください。
フラットな値またはネストされた値
YAMLは柔軟な形式であり、値は深くネストしたり、フラットにしたりできます。
ネストされた
server:
name: nginx
port: 80
フラットな
serverName: nginx
serverPort: 80
ほとんどの場合、ネストされた値よりもフラットな値の方が推奨されます。これは、テンプレート開発者とユーザーにとってよりシンプルだからです。
最適な安全性を確保するために、ネストされた値はすべてのレベルでチェックする必要があります
{{ if .Values.server }}
{{ default "none" .Values.server.name }}
{{ end }}
ネストのすべてのレイヤーに対して、存在チェックを行う必要があります。ただし、フラットな構成では、このようなチェックを省略できるため、テンプレートが読みやすく使いやすくなります。
{{ default "none" .Values.serverName }}
多数の関連変数があり、そのうち少なくとも1つが必須である場合は、読みやすさを向上させるためにネストされた値を使用できます。
型を明確にする
YAMLの型強制ルールは、直観に反する場合があります。たとえば、foo: falseはfoo: "false"と同じではありません。 foo: 12345678のような大きな整数は、場合によっては科学表記法に変換されます。
型変換エラーを回避する最も簡単な方法は、文字列については明示的に、それ以外のすべてについては暗黙的にすることです。つまり、簡単に言うと、*すべての文字列を引用符で囲みます*。
多くの場合、整数のキャストの問題を回避するために、整数も文字列として格納し、テンプレートで{{ int $value }}を使用して文字列から整数に変換することが有利です。
ほとんどの場合、明示的な型タグは尊重されるため、foo: !!string 1234は1234を文字列として扱います。*ただし*、YAMLパーサーはタグを使用するため、1回の解析後に型データは失われます。
ユーザーが値をどのように使用するかを検討する
値には3つの潜在的なソースがあります
- チャートの
values.yamlファイル helm install -fまたはhelm upgrade -fによって提供される値ファイルhelm installまたはhelm upgradeの--setまたは--set-stringフラグに渡される値
値の構造を設計する際には、チャートのユーザーが-fフラグまたは--setオプションを使用して値をオーバーライドする可能性があることに注意してください。
--setの表現力はより制限されているため、values.yamlファイルを作成するための最初のガイドラインは、***--setからオーバーライドしやすいようにする***ことです。
このため、多くの場合、マップを使用して値ファイルを構成する方が適切です。
--setでの使用が難しい
servers:
- name: foo
port: 80
- name: bar
port: 81
上記は、Helm <=2.4では--setで表現できません。 Helm 2.5では、fooのポートへのアクセスは--set servers[0].port=80です。ユーザーが理解するのが難しいだけでなく、後でserversの順序が変更された場合にエラーが発生しやすくなります。
使いやすい
servers:
foo:
port: 80
bar:
port: 81
fooのポートへのアクセスははるかに明白です:--set servers.foo.port=80。
values.yamlを文書化する
values.yamlで定義されているすべてのプロパティは、文書化する必要があります。ドキュメント文字列は、それが記述するプロパティの名前で始まり、少なくとも1文の説明を提供する必要があります.
誤り
# the host name for the webserver
serverHost: example
serverPort: 9191
正しい
# serverHost is the host name for the webserver
serverHost: example
# serverPort is the HTTP listener port for the webserver
serverPort: 9191
各コメントを、それが文書化するパラメータの名前で始めることで、ドキュメントをgrepで抽出するのが容易になり、ドキュメントツールがドキュメント文字列とそれらが記述するパラメータを確実に関連付けることができます.