【问题标题】:Continue Ansible Playbook after reboot重启后继续 Ansible Playbook
【发布时间】:2016-10-23 09:38:40
【问题描述】:

情况:在 Windows 主机上,我想安装一个带有 Ubuntu 16 + 一些开发工具的虚拟机。为此,我在虚拟机上使用 Vagrant 和 VirtualBox(都在 Windows 主机上)和 local Ansible。

问题:vm安装好后,应该在Virtual Box中显示unity login,这样用户就可以在那里登录并开始工作了。但是,安装统一(和升级任务)似乎需要重新启动。此外,当我第二次运行vagrant up 或vagrant provision 时,unity 已经安装,因此不应再次重新启动。

总结性问题:我如何如果需要重启我的虚拟机,然后在 vagrant + 本地 ansible 设置中继续配置?

到目前为止我的脚本:


Vagrantfile(在 Windows 主机上)

Vagrant.configure("2") do |config|

    # create a Ubuntu 16 LTS box
    config.vm.box = "ubuntu/xenial64"

    config.vm.provider "virtualbox" do |vb|
        # Display the VirtualBox GUI when booting the machine
        vb.gui = true

        # Customize the amount of memory on the VM:
        vb.memory = "4096"
    end

    config.vm.provision "ansible_local" do |ansible|
        ansible.playbook = "playbook.yml"
    end
end

playbook.yml(在 Windows 主机上并转移到 Ubuntu 客户机)

---
- hosts: all

  tasks: 
  - name: Update apt cache
    apt: update_cache=yes cache_valid_time=36000

  - name: Upgrade to latest version
    apt: upgrade=dist autoremove=yes
    become: yes

  - name: Add local user with pwd
    user: name=<someuser> password=<someencryptedpwd>
    become: true

  - name: Install Ubuntu Desktop
    apt: name=ubuntu-desktop
    become: true

附:如果已经看到了多个 ansible 解决方案,但他们认为 ansible 在主机上运行。由于 Windows 主机,在这种情况下不可能。

【问题讨论】:

  • 我暂时不回答这个问题,因为目前似乎没有 100% 的答案

标签: unity3d vagrant ansible reboot


【解决方案1】:

现有的 vagrant 插件 https://github.com/aidanns/vagrant-reload 可以帮助您在配置序列中间运行重启

确保安装插件

$ vagrant plugin install vagrant-reload

在您的 Vagrantfile 中,您的配置将如下所示

config.vm.provision "ansible_local" do |ansible|
    ansible.playbook = "playbook_pre_reboot.yml"
end
config.vm.provision :reload
config.vm.provision "ansible_local" do |ansible|
    ansible.playbook = "playbook_post_reboot.yml"
end

您需要拆分您的 playbook 以运行要在重新启动之前运行的任务和另一个 playbook 以便在之后运行任务。

此命令已添加到配置程序序列中,因此这解决了您需要在配置运行期间重新启动 VM 的事实。虚拟机完全配置后,将不会再次调用它,因此vagrant up 第二次不会重新启动虚拟机。

但是,由于它是您的配置运行的一部分,因此专门调用配置程序运行(vagrant up --provisioner 或 vagrant provision)将调用此配置程序运行。有一个 open issue 可以在此配置器上设置条件,但这尚未解决,因此调用 vagrant 配置器运行将始终调用此重新启动运行。

【讨论】:

  • 现在,问题是playbook_pre_reboot.yml 如何提供反馈以使此步骤有条件满足 OP 的要求“所以它不应该再次重新启动”......跨度>
  • @techraf 好吧,这个“重启供应商”没有任何条件,所以一旦你将它添加到你的 Vagrantfile 中,它将被添加到你的供应序列中,因此每当你专门调用供应商时,它都会被调用(vagrant up --provision 或 vagrant provision)我同意,如果您计划在配置部分运行许多更新,它可能并不理想,但通常一旦 VM 已完全配置好,您就不会多次调用 vagrant provision
  • 我同意它不应该是必要的,但 OP 在问题中明确指出:“当我第二次运行 [...] vagrant provision [...]不应再次重新启动“。
  • clear 它解决了 50% 的请求(初始配置后vagrant up 不会重新启动 VM),但专门调用配置程序将重新启动 VM。将编辑我的帖子以明确这一点。 afaik 您甚至无法编写脚本,如果您直接在脚本中启动 reboot 或 shutdown -r now 命令,它将重新启动机器但停止配置运行,您必须在插件上下文中运行。
  • 到目前为止,重启是可能的,但不是有条件的。另一种选择呢?我可以以运行它的方式设置 ansible playbook,然后触发重新启动,然后继续运行吗?这里的问题可能是,我们正在重新启动运行 ansible 的机器,这就是为什么它听起来更像是一个 vagrant 任务。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-22
  • 2019-11-20
相关资源
最近更新 更多