【问题标题】:How to continue Vagrant/Ansible provision script from error?如何从错误中继续 Vagrant/Ansible 配置脚本?
【发布时间】:2015-04-28 20:50:25
【问题描述】:

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

vagrant destroy -f && vagrant up

我可能会得到一个错误...

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

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

【问题讨论】:

  • 你为什么关心这个? Ansible play 应该是幂等的,因此再次运行整个 playbook 应该非常快。
  • @StrahinjaKustudic “幂等”并不意味着“即时”。只重新运行失败的任务可以节省大量时间。
  • 很公平。 Ansible 目前没有该功能,但我相信他们会喜欢它的拉取请求:)

标签: vagrant ansible ansible-playbook


【解决方案1】:

您可以编辑Vagrantfile 并包含ansible.start_at_task 变量。

然后您可以使用$ vagrant reload --provision 重新运行配置

Vagrant Reload文档

但是,由于 Ansible 播放是幂等的,您实际上不需要执行 start_at_task。您可以使用上面的 reload 命令重新运行配置。

【讨论】:

    【解决方案2】:

    您可以在 vagrant box 上使用 ansible-playbook 进行 ansible 运行。诀窍是使用 ansible 创建的清单文件。它位于您的 .vagrant 文件夹中。

    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
    

    【讨论】:

      【解决方案3】:

      如果您使用 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
      

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

      【讨论】:

      • shell 配置器在 vagrant VM 内部运行命令,而 Ansible 配置在 vagrant VM 外部运行命令。 Ansible 重试文件也存储在 VM 外部,因此客户机内的 shell 配置程序无法访问。
      • 如果将它们放在 vagrant 共享目录中,则可以使它们可见。这就是我们将 Ansible 与 Vagrant 一起使用的方式,因为这样您就可以从任何甚至没有安装 Ansible 的客户操作系统(如 Windows)中启动一个 vagrant box,但这是另一个话题。
      猜你喜欢
      • 1970-01-01
      • 2022-07-01
      • 1970-01-01
      • 2011-07-14
      • 2014-08-17
      • 2019-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多