0Pricing
DevOps Bootcamp · レッスン

range 内で Root のドットを保持する

ループ内で保存した Root 参照を使います。

「range 内で Root のドットを保持する」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。

ドットは移動する

range ループの内部では、ドットはチャートのルートを意味しなくなり、現在の項目を指します。これは初めてテンプレートを書く人がよくつまずく点です。

なぜ問題になるのか

ドットの指す先が変わると、ループ内では .Values や .Release のような式が機能しなくなります。ルートコンテキストがドットではなくなるためです。

先にルートを保存する

解決方法は簡単です。ループの前に、ルートのドットを 変数 に保存します。そうすれば、range の内部でもその変数を通じて元のコンテキストにアクセスできます。

{{ $root := . }}

保存したルートを使う

ループ内では、チャート全体に関わるパスを変数経由に切り替えます。ローカルなドットから抜けるには、.Values の代わりに $root.Values と記述します。

{{ range .Values.items }}
release: {{ $root.Release.Name }}
{{ end }}

ローカルなドットも使える

ループ項目自体には、通常のドットを使い続けます。range の内部では ドット が現在の要素を指すため、ここではそれが必要です。

{{ range .Values.ports }}
- port: {{ . }}
{{ end }}

項目とルートを組み合わせる

実際のテンプレートでは、項目とルートの両方を同時に参照する必要があります。ドットから項目を取得し、ルートからチャートの値を取得します。$root を保存しておけば、それぞれを分かりやすく参照できます。

{{ $root := . }}
{{ range .Values.hosts }}
host: {{ . }}.{{ $root.Values.domain }}
{{ end }}

よく使われる名前

多くのチャートでは、この変数に $root や $top という名前を付けますが、名前は自由に決められます。重要なのは、range によってドットの指す先が変わる前に保存することです。

インデックスと値を持つ range

2 変数形式ではインデックスと値が直接バインドされるため、ドットをそのまま使えます。それでも、ルート を保存しておくのが最も安全な習慣です。

{{ range $i, $v := .Values.ports }}
- {{ $i }}: {{ $v }}
{{ end }}

with の内部にも同じ落とし穴がある

with ブロックでも、ドットの指す先はサブツリーに変わります。同じルート保存の方法を使えば、その内部でもチャート全体への参照を維持できます。

ループの出力をテストする

チャートをレンダリングして、ループを確認します。helm template を使えば、各反復でルートの値が期待どおりに解決されたか確認できます。

helm template ./mychart

入る前に保存する

順序が重要です。ループの外側で $root := . を代入します。range の内部で保存すると、すでにドットの指す先が変わっているため、誤った値を保存してしまいます。

確認問題

range ループの内部で、{{ .Values.port }} が突然何も返さなくなりました。

まとめ

range によってドットの指す先が変わること、$root := . で元のコンテキストを保存できること、そしてローカルなドットはループ項目を指し続けることを学びました。 🔁

よくある質問

「range 内で Root のドットを保持する」レッスンは無料ですか?

はい。「range 内で Root のドットを保持する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。

「range 内で Root のドットを保持する」で何を学びますか?

ループ内で保存した Root 参照を使います。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

DevOps Bootcampを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「range 内で Root のドットを保持する」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このDevOps Bootcampレッスンでコードを書いて実行できますか?

はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Template 変数を割り当てる
  2. range 内で Root のドットを保持する
  3. 実践で学ぶ nindent と indent の違い
  4. レンダリング後の空白をデバッグする
← DevOps Bootcampに戻る