有没有办法从失败的地方重试剧本?
Is there any way to retry playbooks from where they failed?
有什么方法可以从失败的地方重试 playbook 吗?
我从
开始
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
选项意味着在上一个剧本失败之前收集的任何 facts/variables 将无法用于重试。我不确定在 运行 重试之前是否有重新收集这些事实的好方法,并且如前所述,无论如何我肯定倾向于重新 运行 整个剧本。
有什么方法可以从失败的地方重试 playbook 吗?
我从
开始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
选项意味着在上一个剧本失败之前收集的任何 facts/variables 将无法用于重试。我不确定在 运行 重试之前是否有重新收集这些事实的好方法,并且如前所述,无论如何我肯定倾向于重新 运行 整个剧本。