如何从错误中继续Vagrant / Ansible配置脚本?

时间:2015-04-28 20:50:25

标签: vagrant ansible ansible-playbook

在我配置我的Vagrant之后...我可能会在配置期间遇到错误...如何从错误中重新启动,而不是从头开始做任何事情?

vagrant destroy -f && vagrant up

我可能会收到错误......

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

我想从失败的地方恢复......似乎可以通过消息来完成...使用--limit ....但是当我在流浪的情境中使用它时它不会'工作..

3 个答案:

答案 0 :(得分:7)

您可以修改Vagrantfile并添加ansible.start_at_task变量。

然后,您可以使用$ vagrant reload --provision

重新运行该条款

Vagrant Reload docs

但是,因为Ansible游戏是幂等的,所以你并不需要start_at_task。您可以使用上面的reload命令重新运行该配置。

答案 1 :(得分:1)

你可以在你的流浪盒上用ansible-playbook做一个ansible运行。诀窍是使用ansible创建的库存文件。它位于你的.vagrant foler。

ansible-playbook playbook.yml -i vagrant/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory --start-at-task='MY_TASK'

Vagrantfile:将您的角色分配给流浪汉机器。

      config.vm.provision "ansible" do |ansible|
        ansible.verbose = "v"
        ansible.playbook = "../playbook.yml"
        ansible.groups = {
        "web"                 => ['vm01app'],
        "db"                  => ['vm01db'],
        }
      end

答案 2 :(得分:-1)

如果您使用shell作为配置程序而不是Ansible(为此您需要在VM本身中安装Ansible),您可以运行如下命令:

test -f "/path/to/playbook.retry" && (ansible-playbook site.yml --limit @/path/to/playbook.retry; rm -f "/path/to/playbook.retry") || ansible-playbook site.yml

这基本上会检查重试文件是否存在,如果存在,它会运行具有该限制的playbook并删除重试文件,如果不存在则会运行整个playbook。当然,如果您使用的是Vagrant,则需要使用sudo运行这些命令,但这很容易添加。