ลูปซ้อนด้วย 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
- keyBitem กลายเป็นคู่ค่า
เมื่อใช้ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- คีย์เวิร์ด loop กับรายการ
- วนซ้ำกับพจนานุกรม
- ลูปซ้อนด้วย subelements
- loop_control: label, index และ pause