subelements によるネストしたループ
リスト内のリストを反復処理します。
「subelements によるネストしたループ」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
リストの中のリスト
各itemが独自のリストを持つことがあります。複数のSSHキーを持つユーザーや、多数のメンバーを持つグループなどです。これはネストした構造です。🪆
subelementsルックアップ
subelementsルックアップは、各親と内側のリストにある各子を組み合わせ、ネストした構造を1回ずつのイテレーションに平坦化します。
loop: "{{ users | subelements('keys') }}"2つの引数
subelementsには、親のリストと展開する内側のキーの名前を渡します。子要素ごとに1回のイテレーションが生成されます。
vars:
users:
- name: alice
keys:
- keyA
- keyBitemがペアになる
subelementsを使うと、itemは2要素のリストになります。item.0が親のディクショナリ、item.1が現在の子の値です。
- ansible.builtin.debug:
msg: "{{ item.0.name }} has {{ item.1 }}"
loop: "{{ users | subelements('keys') }}"多数のSSHキーを認証する
典型的な例は、各ユーザーにすべてのSSHキーを登録することです。item.0.nameがユーザーを表し、item.1が各イテレーションで1つのキーを表します。
- ansible.posix.authorized_key:
user: "{{ item.0.name }}"
key: "{{ item.1 }}"
loop: "{{ users | subelements('keys') }}"子要素をディクショナリにもできる
内側の要素をディクショナリにすることもできます。その場合、item.1には独自のフィールドがあり、item.1.pathやitem.1.modeのように参照できます。
イテレーション数を数える
ユーザー3人にキーが2つずつある場合、6回のイテレーションになります。subelementsは親と子の数を自動的に掛け合わせます。
内側のリストがない場合はスキップする
親に内側のキーがない可能性がある場合は、skip_missingを追加します。失敗する代わりに、subelementsがそのエントリを静かに無視します。
loop: "{{ users | subelements('keys', skip_missing=true) }}"2つのloopではだめな理由
1つのタスクに2つのloopキーワードを直接ネストすることはできません。subelementsが、親子構造を1つのタスクで扱うための、明確でサポートされた方法です。
巧妙さより読みやすさを優先する
深くネストしたデータは理解しにくくなることがあります。可能な限り構造を浅く保ち、本当に必要な場合にsubelementsを使ってください。
それでも冪等
各ペアは独立したモジュール呼び出しなので、すでに存在するキーを追加してもokが報告されます。ネストしても安全な再実行に変わりはありません。
クイックチェック
subelementsを使う場合、item.0は何を指しますか?
振り返り:ネストしたループ
subelementsで親子データを平坦化し、item.0とitem.1を使い、存在しないリストも安全に処理しました。次はloop_controlです。🎉
よくある質問
「subelements によるネストしたループ」レッスンは無料ですか?
はい。「subelements によるネストしたループ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「subelements によるネストしたループ」で何を学びますか?
リスト内のリストを反復処理します。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「subelements によるネストしたループ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- リストに対する loop キーワード
- 辞書のループ処理
- subelements によるネストしたループ
- loop_control:label、index、pause