C'è un modo per riprovare i playbook da dove hanno fallito?C'è un modo per riprovare i playbook da dove hanno fallito?
Sto iniziando con
vagrant provision
C'è un modo per riprovare i playbook da dove hanno fallito?C'è un modo per riprovare i playbook da dove hanno fallito?
Sto iniziando con
vagrant provision
Io non sono troppo sicuro perché ci si vuole fare questo come un playbook Ansible dovrebbe essere idempotente e così rieseguire il tutto fin dall'inizio dovrebbe sii completamente bene
Detto questo, se avete qualche necessità di questo, Ansible espone un meccanismo di tentativo al termine di un playbook fallito che assomiglia:
PLAY RECAP ********************************************************************
to retry, use: --limit @/home/user/playbook.retry
Se si dovesse direttamente sulla scatola si potrebbe poi esegue qualcosa sulla falsariga di:
ansible-playbook playbook.yml --limit @/home/user/playbook.retry
per rendere questo sia disponibile come provisioner per Vagrant è necessario aggiungere un altro provisioner chiamato così il vostro Vagrantfile potrebbe essere simile:
Vagrant.configure("2") do |config|
# ... other configuration
# Does the normal playbook run
config.vm.provision "bootstrap", type: "ansible" do |bootstrap|
bootstrap.playbook = "playbook.yml"
end
# Picks up from any failed runs
# Run this with: "vagrant provision --provision-with resume"
config.vm.provision "resume", type: "ansible" do |resume|
resume.playbook = "playbook.yml"
resume.limit = "--limit @/home/user/playbook.retry"
end
end
Come sottolineato nei commenti del Vagrantfile questo sarà quindi provare a eseguire sia il playbook.yml
playbook e il gioco playbook.retry
tentativi che si crea su una pista fallito su un primo vagrant up
. Se lo strumento playbook.yml
non riesce, tenterà e riprenderà automaticamente (e presumibilmente fallirà perché non è ancora stato risolto il motivo per cui non è riuscito) e quindi uscirà.
Si potrebbe quindi risolvere ciò che era necessario fissare nel vostro playbook o inventario e quindi eseguire vagrant provision --provision-with resume
per eseguire il blocco di provisioning chiamato resume
per riprendere da dove playbook.yml
fallito quando si originariamente provisioning l'istanza.
Attenzione però che l'opzione limit
sul playbook significherà che tutti i fatti/variabili raccolti prima che il playbook precedente fallisse non saranno disponibili per il tentativo di riprovare. Non sono sicuro che ci sia un buon modo per ricapitolare questi fatti prima di fare il tentativo e, come già detto, mi piacerebbe sicuramente appoggiare nuovamente l'intero playbook in caso di fallimento.
con ansible 1.9.2 e vagabondo 1.7.4 su macos non funziona come elencato, sostituire 'resume.raw_arguments =" --limit @/home/user/playbook.retry "' con 'resume.limit = "@/home/user/playbook.retry" 'per farlo funzionare. La causa è che 'vagrant provision' sembra usare' 'default'' come limite se non configurato diversamente. – MrsTang
Ogni volta che metto un curriculum di qualsiasi tipo nel mio file Vagrant, ottengo "variabile locale indefinita o metodo 'resume'". Utilizzo di Vagrant 1.9.4 su Ubuntu. Riesco a eseguire di nuovo l'ansible playbook utilizzando "ansible-playbook --private-key = ~/.vagrant.d/insecure_private_key -u vagrant -i .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory setup.yml" a condizione che non sia stato eseguito il provisioning la scatola con config.ssh.insert_key = false – MagicLAMP
"Non sono troppo sicuro del motivo per cui avresti voluto farlo come un playbook di Ansible dovrebbe essere idempotente e quindi riprendere il tutto dall'inizio dovrebbe essere tutto a posto." Anche con un diario di dimensioni modeste è possibile attendere 15 minuti prima di passare alla prima attività modificata. I tentativi sono follemente utili con grandi sforzi di orchestrazione. – chpatton013
Perché vuoi riavviarlo da dove è fallito? L'intera filosofia del design attorno ad Ansible e molti altri strumenti di configurazione è che dovresti essere in grado di eseguirli idempotently all'infinito. – ydaetskcoR
Può essere utile quando si ha una prima attività che richiede un'ora ma che riesce e una seconda che non riesce. –