web-dev-qa-db-ja.com

失敗した場所からプレイブックを再試行する方法はありますか?

失敗した場所からプレイブックを再試行する方法はありますか?

私はそれを始めています

vagrant provision
14
Javier Manzano

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オプションは、前のプレイブックが失敗する前に収集されたファクト/変数が再試行に使用できないことを意味することに注意してください。再試行を実行する前にこれらの事実を再収集する良い方法があるかどうかはわかりません。前述のように、失敗した場合はプレイブック全体を再実行することに間違いなく傾いています。

17
ydaetskcoR