0Pricing
DevOps Bootcamp · レッスン

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
        - keyB

itemがペアになる

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フィードバックを取得できます。ローカル設定は不要です。

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

  1. リストに対する loop キーワード
  2. 辞書のループ処理
  3. subelements によるネストしたループ
  4. loop_control:label、index、pause
← DevOps Bootcampに戻る