Try / catch z rescue i always
Eleganckie odzyskiwanie po błędach.
Try / catch z rescue i always to bezpłatna lekcja DevOps Bootcamp na CoddyKit. To lekcja 2 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 DevOps Bootcamp, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs DevOps Bootcamp zawiera 4 lekcji w sumie.
Blocki zyskują siatkę bezpieczeństwa
Połączenie blocku z rescue i always zapewnia zadaniom odpowiedniki try, catch i finally. Błędy stają się możliwe do obsłużenia. 🛟
Sekcja rescue
Jeśli dowolne zadanie w blocku zakończy się błędem, Ansible przechodzi do rescue i zamiast niego uruchamia zawarte tam zadania, podobnie jak klauzula catch.
- block:
- ansible.builtin.command: /opt/risky-step
rescue:
- ansible.builtin.debug:
msg: "Step failed, recovering"always uruchamia się niezależnie od wyniku
Sekcja always uruchamia się niezależnie od tego, czy block zakończył się powodzeniem, czy błędem. Doskonale nadaje się do sprzątania, na przykład usunięcia pliku tymczasowego.
- block:
- ansible.builtin.command: /opt/deploy
always:
- ansible.builtin.file:
path: /tmp/lock
state: absentWszystkie trzy elementy razem
Należy używać block, rescue i always jako jednej struktury: wykonać pracę, przechwycić błędy, a następnie zawsze zakończyć działanie w uporządkowany sposób.
- block:
- ansible.builtin.command: /opt/deploy
rescue:
- ansible.builtin.debug:
msg: "Rolling back"
always:
- ansible.builtin.debug:
msg: "Done either way"rescue resetuje stan błędu
Jeśli rescue zakończy się powodzeniem, host nie jest już oznaczony jako niesprawny. Play jest kontynuowany tak, jakby block zakończył się pomyślnie.
Kolejność wykonywania
Najpierw wykonywane są zadania blocku. W razie błędu pozostała część blocku jest pomijana i rozpoczyna się rescue. always uruchamia się na końcu w każdym przypadku.
Gdy rescue również zawiedzie
Jeśli zadanie w rescue również zakończy się błędem, host zostanie oznaczony jako niesprawny, ale always nadal uruchomi się przed zakończeniem play dla tego hosta.
Sprawdzanie błędu
Wewnątrz rescue można odczytać ansible_failed_task i ansible_failed_result, aby sprawdzić, które zadanie zakończyło się błędem i dlaczego.
- rescue:
- ansible.builtin.debug:
msg: "Failed task was {{ ansible_failed_task.name }}"Praktyczne zastosowanie: wycofywanie zmian
Klasyczny schemat polega na wykonaniu wdrożenia w blocku, wycofaniu zmiany w rescue oraz ponownym uruchomieniu lub odblokowaniu w always. Zapewnia to czyste odzyskiwanie po błędach przy każdym wykonaniu.
Nie chodzi tylko o ukrywanie błędów
rescue służy do kontrolowanego odzyskiwania, a nie do wyciszania błędów. Należy zapisać błąd w logu i naprawić stan, zamiast udawać, że nic się nie stało. ⚠️
Brak rescue oznacza natychmiastowe zatrzymanie
Bez sekcji rescue block, w którym wystąpi błąd, zachowuje się jak dowolne zadanie zakończone błędem: natychmiast zatrzymuje play dla tego hosta.
Szybkie sprawdzenie
Sprawdźmy, jak zachowuje się always.
Podsumowanie
rescue przechwytuje błędy blocku i przywraca host do działania, a always uruchamia się za każdym razem w celu wykonania czynności porządkowych. Try, catch i finally w Ansible. ✅
Często zadawane pytania
Czy lekcja „Try / catch z rescue i always” jest bezpłatna?
Tak — pełny tekst „Try / catch z rescue i always” 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 DevOps Bootcamp, przejdź na CoddyKit PRO. Kurs DevOps Bootcamp zawiera 4 lekcji w sumie.
Co nauczysz się w „Try / catch z rescue i always”?
Eleganckie odzyskiwanie po błędach. Ćwiczysz DevOps Bootcamp 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ąć DevOps Bootcamp?
Nie wymagamy żadnego doświadczenia. DevOps Bootcamp 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 2 z 4.
Ile czasu zajmuje lekcja „Try / catch z rescue i always”?
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 DevOps Bootcamp?
Tak. Każda lekcja DevOps Bootcamp 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
- Grupowanie zadań za pomocą block
- Try / catch z rescue i always
- Kontrolowanie błędów: failed_when i ignore_errors
- Własne asercje za pomocą modułu fail