Come posso eseguire Ansible su un host alla volta e interrompere un errore


15

Ho un playbook Ansible in cui voglio aggiornare un numero di dispositivi traballanti in sequenza. Posso usarlo serial:1, ma voglio interrompere del tutto il playbook se ricevo un errore in modo da poterlo riparare prima di procedere invece di accumulare errori.

Vorrei anche riavviare il playbook sullo stesso host su cui mi sono fermato. Attualmente utilizza Ansible v2.0, ma può anche passare a una versione più recente se quel tipo di funzionalità è disponibile solo nelle versioni più recenti.

Risposte:


15

Il tuo playbook si fermerà quando si verifica un errore e lo stai utilizzando in serial: 1base alla documentazione .

Per impostazione predefinita, Ansible continuerà a eseguire azioni fino a quando nel gruppo ci sono host che non hanno ancora fallito.

Detto questo, sembra esserci un po 'di confusione nella comunità sul comportamento di default, e sembra essere cambiato - o è stato danneggiato - tra 1.8 e 2.1.

Quindi, se serial: 1non è sufficiente, utilizzare questa impostazione aggiuntiva:

max_failure_percentage: 0

In alcune situazioni, ad esempio con gli aggiornamenti continui sopra descritti, può essere desiderabile interrompere il gioco quando viene raggiunta una certa soglia di guasti. Per raggiungere questo obiettivo, a partire dalla versione 1.3 è possibile impostare una percentuale di errore massima ...

==

Per quanto riguarda il tentativo di ripetere il tuo playbook, dovresti visualizzare un messaggio di errore come questo:

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

Usa quel --limitflag e alla tua prossima esecuzione di ansible-playbooke continuerà da dove non è riuscito.

I file di tentativo verranno creati a meno che non sia stato impostato retry_files_enabled = Falsenella configurazione.

In alternativa, --start-at-taskpuò anche funzionare.

fonti:

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


1
Se qualcuno ha un'idea migliore di ciò che è accaduto alla modifica / bug in 1.9 e 2.0 per favore fatemelo sapere e aggiornerò questa risposta.
Woodland Hunter

Sì, so che Ansible 2.0 continuerà a funzionare su altri host se si verificano errori su uno di essi. Immagino di non pensare che avrebbe un comportamento diverso se avessi eseguito seriale: 1. È quello che stai dicendo?
Peter Turner,

È corretto, seriale: 1 dovrebbe avere quel comportamento, e se non (perché ??) aggiungi max_failure_percentage: 0, anche. Suggerirei anche di aggiornare Ansible poiché 2.0 presentava molti bug.
Woodland Hunter

Tanti bug, infatti, che ti mancano i file .retry in 2.0! github.com/ansible/ansible/issues/13944
Woodland Hunter

Eh, quindi non sono l'unico che corregge costantemente la fonte. Buono a sapersi.
Peter Turner,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.