Jak uruchomić ansible na jednym hoście na raz i zepsuć się w przypadku awarii

15

Mam podręcznik Ansible, w którym chcę kolejno aktualizować kilka niestabilnych urządzeń. Mogę używać serial:1, ale chcę całkowicie zatrzymać podręcznik, jeśli dostanę awarię, abym mógł to naprawić przed kontynuowaniem zamiast gromadzenia błędów.

Chciałbym również ponownie uruchomić poradnik na tym samym hoście, na którym zatrzymałem się. Obecnie używa Ansible v2.0, ale może także przełączyć się na nowszą wersję, jeśli tego rodzaju funkcja jest dostępna tylko w nowszych wersjach.

Peter Turner
źródło

Odpowiedzi:

15

Twój podręcznik zatrzyma się, gdy wystąpi awaria i korzystasz z niego serial: 1zgodnie z dokumentacją .

Domyślnie Ansible będzie kontynuował wykonywanie akcji tak długo, jak długo istnieją hosty w grupie, które jeszcze nie zawiodły.

To powiedziawszy, wydaje się, że istnieje pewne zamieszanie w społeczności w stosunku do domyślnego zachowania i wydaje się, że zmieniło się - lub było błędne - gdzieś pomiędzy 1,8 a 2,1.

Jeśli serial: 1to nie wystarczy, użyj tego dodatkowego ustawienia:

max_failure_percentage: 0

W niektórych sytuacjach, na przykład przy aktualizacjach kroczących opisanych powyżej, pożądane może być przerwanie gry po osiągnięciu określonego progu awarii. Aby to osiągnąć, od wersji 1.3 można ustawić maksymalny procent awarii ...

==

Jeśli chodzi o ponawianie próby, powinieneś zobaczyć następujący komunikat o błędzie:

to retry, use: --limit @/home/user/site.retry

Użyj tej --limitflagi, a przy następnym wykonaniu ansible-playbookbędzie kontynuowana od miejsca, w którym się nie udała.

Ponów próbę zostaną utworzone, chyba że skonfigurujesz retry_files_enabled = Falsekonfigurację.

Alternatywnie --start-at-taskmoże również działać.

Źródła:

https://github.com/ansible/ansible/issues/1663

https://github.com/ansible/ansible/issues/16241

http://docs.ansible.com/ansible/playbooks_delegation.html#rolling-update-batch-size

http://docs.ansible.com/ansible/playbooks_delegation.html#maximum-failure-percentage

http://docs.ansible.com/ansible/intro_configuration.html#retry-files-enabled

http://docs.ansible.com/ansible/playbooks_startnstep.html#start-at-task

Woodland Hunter
źródło
1
Jeśli ktoś ma lepsze pojęcie o tym, co stało się ze zmianą / błędem w wersjach 1.9 i 2.0, proszę dać mi znać, a zaktualizuję tę odpowiedź.
Woodland Hunter
Tak, wiem, że ansible 2.0 będzie nadal działać na innych hostach, jeśli wystąpi awaria jednego z nich. Chyba nie sądziłem, że miałbym inne zachowanie, gdybym uruchomił serial: 1. Czy tak mówisz?
Peter Turner
Zgadza się, serial: 1 powinien mieć takie zachowanie, a jeśli nie (bo ??), dodaj również max_failure_percentage: 0. Sugeruję również aktualizację Ansible, ponieważ 2.0 zawierało wiele błędów.
Woodland Hunter
Tak wiele błędów, że brakuje plików .retry w wersji 2.0! github.com/ansible/ansible/issues/13944
Woodland Hunter
Heh, więc nie jestem jedynym, który ciągle łata źródło. Dobrze wiedzieć.
Peter Turner