Zagnieżdżone pętle z subelements
Iterowanie po listach zagnieżdżonych w innych listach.
Zagnieżdżone pętle z subelements to bezpłatna lekcja Ansible Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Ansible Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Ansible Academy zawiera 4 lekcji w sumie.
Listy wewnątrz list
Czasami każdy element ma własną listę: użytkownik z kilkoma kluczami SSH albo grupa z wieloma członkami. Jest to struktura zagnieżdżona. 🪆
Mechanizm wyszukiwania subelements
Mechanizm wyszukiwania subelements łączy każdego elementu nadrzędnego z każdym elementem podrzędnym z jego wewnętrznej listy, spłaszczając zagnieżdżenie do pojedynczych iteracji.
loop: "{{ users | subelements('keys') }}"Dwa argumenty
subelements przyjmuje listę elementów nadrzędnych oraz nazwę wewnętrznego klucza, który ma zostać rozwinięty. Tworzy jedną iterację dla każdego elementu podrzędnego.
vars:
users:
- name: alice
keys:
- keyA
- keyBitem staje się parą
W przypadku subelements item jest dwuelementową listą: item.0 to słownik elementu nadrzędnego, a item.1 to bieżąca wartość podrzędna.
- ansible.builtin.debug:
msg: "{{ item.0.name }} has {{ item.1 }}"
loop: "{{ users | subelements('keys') }}"Autoryzowanie wielu kluczy SSH
Klasyczny przypadek: przekazanie każdemu użytkownikowi wszystkich jego kluczy SSH. item.0.name to użytkownik, a item.1 to jeden klucz w każdej iteracji.
- ansible.posix.authorized_key:
user: "{{ item.0.name }}"
key: "{{ item.1 }}"
loop: "{{ users | subelements('keys') }}"Element podrzędny może być słownikiem
Elementy wewnętrzne również mogą być słownikami. Wtedy item.1 ma własne pola, takie jak item.1.path lub item.1.mode.
Liczenie iteracji
Trzech użytkowników z dwoma kluczami każdy oznacza sześć iteracji. subelements automatycznie mnoży liczbę elementów nadrzędnych przez liczbę ich elementów podrzędnych.
Pomijanie brakujących list wewnętrznych
Jeśli elementowi nadrzędnemu może brakować wewnętrznego klucza, należy dodać skip_missing, aby subelements po cichu go pominął zamiast zgłaszać błąd.
loop: "{{ users | subelements('keys', skip_missing=true) }}"Dlaczego nie dwie pętle?
Nie można bezpośrednio zagnieździć dwóch słów kluczowych loop w jednym zadaniu. subelements to właściwy i obsługiwany sposób przechodzenia po strukturze nadrzędny–podrzędny w jednym zadaniu.
Czytelność ważniejsza niż spryt
Głęboko zagnieżdżone dane mogą być trudne do zrozumienia. Jeśli to możliwe, należy utrzymywać płytkie struktury, a po subelements sięgać tylko wtedy, gdy jest rzeczywiście potrzebne.
Nadal idempotentne
Każda para jest osobnym wywołaniem modułu, więc dodanie już istniejącego klucza zgłasza ok. Zagnieżdżenie nie zmienia bezpieczeństwa ponownego uruchamiania.
Szybki test
Podczas używania subelements, do czego odnosi się item.0?
Podsumowanie: zagnieżdżone pętle
Spłaszczyli Państwo dane nadrzędne–podrzędne za pomocą subelements, użyli item.0 i item.1 oraz bezpiecznie obsłużyli brakujące listy. Następnie: loop_control. 🎉
Często zadawane pytania
Czy lekcja „Zagnieżdżone pętle z subelements” jest bezpłatna?
Tak — pełny tekst „Zagnieżdżone pętle z subelements” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Ansible Academy, przejdź na CoddyKit PRO. Kurs Ansible Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Zagnieżdżone pętle z subelements”?
Iterowanie po listach zagnieżdżonych w innych listach. Ćwiczysz Ansible Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Ansible Academy?
Nie wymagamy żadnego doświadczenia. Ansible Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Zagnieżdżone pętle z subelements”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Ansible Academy?
Tak. Każda lekcja Ansible Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Słowo kluczowe loop dla listy
- Iterowanie po słownikach
- Zagnieżdżone pętle z subelements
- loop_control: label, index i pause