0Pricing
DevOps Bootcamp · บทเรียน

ลูปซ้อนด้วย subelements

วนซ้ำรายการที่อยู่ภายในรายการ

ลูปซ้อนด้วย subelements เป็นบทเรียน DevOps Bootcamp ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน DevOps Bootcamp และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 4 บทเรียน

รายการซ้อนอยู่ในรายการ

บางครั้งแต่ละรายการมีรายการย่อยของตัวเอง เช่น ผู้ใช้ที่มีคีย์ SSH หลายคีย์ หรือกลุ่มที่มีสมาชิกหลายคน นี่คือโครงสร้างแบบ nested 🪆

การค้นหา subelements

การค้นหา subelements จะจับคู่พาเรนต์แต่ละรายการกับรายการลูกแต่ละรายการในลิสต์ย่อย แล้วคลี่โครงสร้างซ้อนกันให้เป็นการทำงานทีละรอบ

loop: "{{ users | subelements('keys') }}"

อาร์กิวเมนต์สองรายการ

subelements รับ parent list และชื่อคีย์ย่อยที่ต้องการขยาย จากนั้นจะสร้างการทำงานหนึ่งรอบต่อองค์ประกอบลูกแต่ละรายการ

vars:
  users:
    - name: alice
      keys:
        - keyA
        - keyB

item กลายเป็นคู่ค่า

เมื่อใช้ subelements ค่า item จะเป็นลิสต์สองส่วน โดย item.0 คือพจนานุกรมของพาเรนต์ และ item.1 คือค่าลูกปัจจุบัน

- ansible.builtin.debug:
    msg: "{{ item.0.name }} has {{ item.1 }}"
  loop: "{{ users | subelements('keys') }}"

กำหนดสิทธิ์ให้คีย์ SSH หลายรายการ

กรณีตัวอย่างที่พบบ่อยคือ มอบ SSH keys ทั้งหมดให้ผู้ใช้แต่ละราย โดย item.0.name คือผู้ใช้ และ item.1 คือคีย์หนึ่งรายการในการทำงานแต่ละรอบ

- ansible.posix.authorized_key:
    user: "{{ item.0.name }}"
    key: "{{ item.1 }}"
  loop: "{{ users | subelements('keys') }}"

รายการลูกอาจเป็นพจนานุกรมได้

องค์ประกอบภายในอาจเป็นพจนานุกรมได้เช่นกัน ในกรณีนั้น item.1 จะมีฟิลด์ของตัวเอง เช่น item.1.path หรือ item.1.mode

นับจำนวนรอบการทำงาน

ผู้ใช้สามรายที่มีคีย์รายละสองรายการหมายถึง six iterations subelements จะคูณจำนวนพาเรนต์กับจำนวนรายการลูกให้อัตโนมัติ

ข้ามรายการย่อยที่หายไป

หากพาเรนต์บางรายการอาจไม่มีคีย์ย่อย ให้เพิ่ม skip_missing เพื่อให้ subelements เพิกเฉยต่อรายการนั้นโดยไม่ทำงานล้มเหลว

loop: "{{ users | subelements('keys', skip_missing=true) }}"

ทำไมไม่ใช้ลูปสองตัว

งานหนึ่งงานไม่สามารถซ้อนคีย์เวิร์ด loop สองตัวโดยตรงได้ subelements คือวิธีที่สะอาดและรองรับอย่างเป็นทางการสำหรับเดินผ่านโครงสร้างพาเรนต์กับรายการลูกในงานเดียว

อ่านง่ายดีกว่าซับซ้อนเกินจำเป็น

ข้อมูลที่ซ้อนกันลึกมากอาจติดตามได้ยาก หากทำได้ควรรักษาโครงสร้างให้ตื้น และเลือกใช้ subelements เมื่อจำเป็นจริง ๆ

ยังคงเป็นไอดีมโพเทนต์

คู่ค่าแต่ละคู่คือการเรียกมอดูลแยกกัน ดังนั้นการเพิ่มคีย์ที่มีอยู่แล้วจะแจ้งว่า ok การซ้อนข้อมูลจึงไม่เปลี่ยนแปลงความปลอดภัยของการทำงานซ้ำ

ตรวจสอบความเข้าใจ

เมื่อใช้ subelements ค่า item.0 หมายถึงอะไร

สรุป: ลูปซ้อนกัน

คุณคลี่ข้อมูลพาเรนต์กับรายการลูกด้วย subelements ใช้ item.0 และ item.1 และจัดการกับรายการย่อยที่หายไปได้อย่างปลอดภัย ต่อไป: loop_control 🎉

คำถามที่พบบ่อย

บทเรียน “ลูปซ้อนด้วย subelements” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ลูปซ้อนด้วย subelements” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส DevOps Bootcamp ให้อัปเกรดเป็น CoddyKit PRO คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ลูปซ้อนด้วย subelements”

วนซ้ำรายการที่อยู่ภายในรายการ คุณปฏิบัติ DevOps Bootcamp ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน DevOps Bootcamp หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน DevOps Bootcamp บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “ลูปซ้อนด้วย subelements” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน DevOps Bootcamp นี้ได้ไหม

ได้ บทเรียน DevOps Bootcamp ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. คีย์เวิร์ด loop กับรายการ
  2. วนซ้ำกับพจนานุกรม
  3. ลูปซ้อนด้วย subelements
  4. loop_control: label, index และ pause
← กลับไปที่ DevOps Bootcamp