2015-05-27 2 views
9

Gibt es eine Möglichkeit, Playbooks von dort, wo sie fehlgeschlagen sind, erneut zu versuchen?Gibt es eine Möglichkeit, Playbooks von dort, wo sie fehlgeschlagen sind, erneut zu versuchen?

Ich fange es mit

vagrant provision 
+0

Warum soll es von wo es fehlschlägt neu starten? Die gesamte Design-Philosophie um Ansible und viele andere Konfigurations-Tools besteht darin, dass Sie in der Lage sein sollten, sie idempotent immer und immer wieder auszuführen. – ydaetskcoR

+0

Kann nützlich sein, wenn Sie eine erste Aufgabe haben, die eine Stunde dauert, aber erfolgreich ist, und eine zweite, die fehlschlägt. –

Antwort

14

Ich bin mir nicht sicher, warum diese als ansible Textbuch idempotent werden sollte tun wollen würde und so wieder läuft die ganze Sache von Anfang an sollte völlig in Ordnung sein.

Das heißt, wenn Sie dies einige Notwendigkeit zu tun haben, ansible einen Wiederholungsmechanismus am Ende eines gescheiterten Textbuch macht die wie folgt aussieht:

PLAY RECAP ******************************************************************** 
      to retry, use: --limit @/home/user/playbook.retry 

Wenn Sie direkt auf dem Feld waren, konnten Sie dann laufen etwas entlang der Linien von:

ansible-playbook playbook.yml --limit @/home/user/playbook.retry 

dies als provisioner zur Verfügung stellen Sie einen anderen Namen provisioner hinzufügen müssen, um vagabundierende so Ihre Vagrantfile etwas aussehen könnte:

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 

Wie bereits diese in den Kommentaren der Vagrantfile aus wird dann versuchen, sowohl das playbook.yml Textbuch und das playbook.retry Wiederholungsspiel auszuführen, die auf einem ausgefallenen Laufe auf einem ersten vagrant up erstellt wird. Wenn die playbook.yml fehlschlägt, wird es automatisch versuchen und wieder aufnehmen (und wahrscheinlich fehlschlagen, da Sie noch zu beheben, warum es fehlgeschlagen ist) und dann beenden.

Sie könnten dann reparieren, was in Ihrem Textbuch oder Inventar brauchte Festsetzung und dann vagrant provision --provision-with resume führen Sie den Provisioning-Block genannt laufen resume von abholen, wo playbook.yml schlug fehl, wenn Sie ursprünglich die Instanz bereitgestellt.

Beachten Sie jedoch, dass die Option limit auf Playbook bedeutet, dass alle Fakten/Variablen, die vor dem vorherigen Playbook gesammelt wurden, nicht für den Wiederholungsversuch verfügbar sind. Ich bin mir nicht sicher, ob es einen guten Weg gibt, diese Fakten zu sammeln, bevor ich den Versuch unternehme, und wie erwähnt, würde ich mich definitiv darauf verlassen, dass das ganze Spielbuch bei einem Misserfolg trotzdem erneut läuft.

+2

mit ansible 1.9.2 und vagrant 1.7.4 auf macos funktioniert es nicht wie aufgeführt, ersetzen 'resume.raw_arguments =" --limit @/home/user/playbook.retry "' mit 'resume.limit = "@/home/user/playbook.retry" ', damit es funktioniert. Ursache dafür ist, dass 'vagrant provision'' 'default'' als Limit zu verwenden scheint, wenn nicht anders konfiguriert. – MrsTang

+0

Immer, wenn ich Lebenslauf von beiden Arten in meine Vagrant-Datei setze, bekomme ich "undefined lokale Variable oder Methode' resume '". Verwenden von Vagrant 1.9.4 auf Ubuntu. Ich kann das Ansible-Playbook erneut mit "ansible-playbook --private-key = ~/.vagrant.d/insecure_private_key -u vagrant -i.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory setup.yml" ausführen, vorausgesetzt, ich habe keine Bereitstellung vorgenommen Die Box mit config.ssh.insert_key = false – MagicLAMP

+0

"Ich bin mir nicht sicher, warum du das so machen willst, weil ein Ansible-Playbook idempotent sein sollte, und es sollte völlig in Ordnung sein, das ganze von Anfang an neu zu starten." Selbst mit einem kleinen Übungsbuch können Sie 15 Minuten warten, bevor Sie zu der ersten veränderten Aufgabe gelangen. Wiederholungen sind wahnsinnig nützlich mit großen Orchestrierungsbemühungen. – chpatton013

Verwandte Themen