2015-05-27 8 views
9

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 
+0

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

+0

Può essere utile quando si ha una prima attività che richiede un'ora ma che riesce e una seconda che non riesce. –

risposta

14

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.

+2

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

+0

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

+0

"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

Problemi correlati