Vagrant 如何从错误中继续执行流浪/易变准备金脚本?

Vagrant 如何从错误中继续执行流浪/易变准备金脚本?,vagrant,ansible,ansible-playbook,Vagrant,Ansible,Ansible Playbook,在我养活了我的流浪汉之后。。。我可能会在供应过程中出错。。。如何从错误中重新启动,而不是从头开始 vagrant destroy -f && vagrant up 我可能会出错 PLAY RECAP ******************************************************************** to retry, use: --limit @/path/to/playbook.retry 我想从失败的地方重新开始。。。这似乎可以通过

在我养活了我的流浪汉之后。。。我可能会在供应过程中出错。。。如何从错误中重新启动,而不是从头开始

vagrant destroy -f && vagrant up
我可能会出错

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

我想从失败的地方重新开始。。。这似乎可以通过信息来实现。。。使用
--限制
。。。。但是当我在流浪环境中使用它时,它就不起作用了

您可以编辑
vagrant文件
并包含变量

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

文件


然而,因为Ansible plays是幂等的,所以您实际上不需要执行
启动任务
。您可以使用上面的reload命令重新运行供应。

如果您使用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运行这些命令,但这很容易添加。

您可以使用Vagrant box上的ansible playbook运行ansible。诀窍是使用ansible创建的库存文件。它位于你的流浪者之家

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

你为什么关心这个?Ansible剧本应该是幂等的,所以再次运行整个剧本应该非常快。@StrahinjaKustudic的“幂等”并不意味着“瞬间”。只重新运行失败的任务可以节省大量时间。这很公平。Ansible目前没有该功能,但我相信他们会喜欢使用它的pull请求:)shell provisioner在vagrant VM内部运行命令,而Ansible Provisionine在vagrant VM外部运行命令。Ansible重试文件也存储在VM之外,因此来宾计算机内的shell Provisionier无法访问。如果将它们放在vagrant共享目录中,则可以使它们可见。这就是我们将Ansible与Vagrant一起使用的方式,因为这样你就可以从任何没有安装Ansible的来宾操作系统(如Windows)中启动一个Vagrant box,但这完全是另一个主题。