with でブロックの Scope を限定する
ドットをサブツリーに絞り込む方法と注意点を学びます。
「with でブロックの Scope を限定する」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
長いパスの繰り返しをやめる
.Values.image.repositoryを何度も入力すると冗長になります。withアクションはドットをサブツリーに絞り込み、より短いパスで記述できるようにします。
withアクション
withブロックは{{ with SOMETHING }}で始まり、{{ end }}で閉じます。その中では、dotが渡した値にリセットされます。
{{ with .Values.image }}
repository: {{ .repository }}
tag: {{ .tag }}
{{ end }}ドットが内側へ移動する
中に入ると、.repositoryは.Values.image.repositoryを意味します。withキーワードがドットをサブツリーに再束縛するため、その下にあるすべてのパスを短くできます。
image:
repository: nginx
tag: "1.27"ガードとしても使える
値がemptyまたは存在しない場合、withはブロック全体をスキップします。つまり、ドットのスコープを絞ると同時にifのような役割も果たします。🛡️
else を追加する
if と同様に、with では else 分岐を指定できます。値が空の場合に else がレンダリングされるため、任意の設定値に対するすっきりしたフォールバックを用意できます。
{{ with .Values.resources }}
resources:
{{ toYaml . | indent 2 }}
{{ else }}
# no resources set
{{ end }}スコープの落とし穴
ここが落とし穴です。with の内部では、ドットはもはやルートではありません。そのため .Release.Name は機能しません。Release はそのサブツリーの下に存在しないためです。
$ でルートに戻る
with の内部でルートの値を使うには、$ を先頭に付けます。ドル記号は、どれだけ深くネストしていても常に元のルートコンテキストを指します。
{{ with .Values.image }}
name: {{ $.Release.Name }}
image: {{ .repository }}
{{ end }}ブロックを小さく保つ
with によってドットの指す先が変わるため、大きなブロックはすぐに分かりにくくなります。ドットの指す先が明確になるよう、with セクションは短く保ちます。
with と if
フラグを確認するだけなら if を使い、その値の中に入ることも必要なら with を使います。with はドットの指す先を変えますが、if は変えません。
スコープを確認する
ドットが何を保持しているか分からない場合は、helm template でレンダリングして出力を確認するか、複雑な with ブロックのデバッグ中にスコープを出力します。
helm template ./mychartwith ブロックをネストする
with の中に別の with をネストして、さらに深い階層へ入ることができます。レベルが一つ進むたびに ドット も一段深い場所を指すため、現在位置を把握しておきます。
{{ with .Values.image }}
{{ with .pullSecrets }}
# . is now pullSecrets
{{ end }}
{{ end }}確認問題
{{ with .Values.image }} ブロックの中で .Release.Name を読み取ろうとしましたが、空になっています。
まとめ
with でドットのスコープを変更し、空の場合のガードを自動的に適用し、else のフォールバックを追加して、$ でルートに戻れるようになりました。よりすっきりしたテンプレートを作れます! 🎯
よくある質問
「with でブロックの Scope を限定する」レッスンは無料ですか?
はい。「with でブロックの Scope を限定する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「with でブロックの Scope を限定する」で何を学びますか?
ドットをサブツリーに絞り込む方法と注意点を学びます。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「with でブロックの Scope を限定する」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- if と else による条件ブロック
- 条件式の真偽値と演算子
- range でリストと Map をループする
- with でブロックの Scope を限定する