失敗した場所からプレイブックを再試行する方法はありますか?
私はそれを始めています
vagrant provision
Ansibleプレイブックはべき等である必要があるため、なぜこれを実行するのかよくわかりません。したがって、最初からすべてを再実行してもまったく問題ありません。
とはいえ、これが必要な場合、Ansibleは失敗したプレイブックの最後に次のような再試行メカニズムを公開します。
PLAY RECAP ********************************************************************
to retry, use: --limit @/home/user/playbook.retry
ボックスに直接いる場合は、次の行に沿って何かを実行できます。
ansible-playbook playbook.yml --limit @/home/user/playbook.retry
これをVagrantのプロビジョナーとして利用できるようにするには、Vagrantfileが次のようになるように別の名前付きプロビジョナーを追加する必要があります。
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
Vagrantfileのコメントで指摘されているように、これはplaybook.yml
プレイブックと最初のplaybook.retry
で失敗した実行で作成されたvagrant up
再試行プレイの両方を実行しようとします。 playbook.yml
が失敗した場合、自動的に再開を試み(失敗した理由をまだ修正していないため、おそらく失敗します)、終了します。
次に、プレイブックまたはインベントリで修正が必要なものを修正し、vagrant provision --provision-with resume
を実行して、resume
というプロビジョニングブロックを実行し、インスタンスを最初にプロビジョニングしたときにplaybook.yml
が失敗した場所からピックアップします。
ただし、プレイブックのlimit
オプションは、前のプレイブックが失敗する前に収集されたファクト/変数が再試行に使用できないことを意味することに注意してください。再試行を実行する前にこれらの事実を再収集する良い方法があるかどうかはわかりません。前述のように、失敗した場合はプレイブック全体を再実行することに間違いなく傾いています。