重启后继续Ansible Playbook

时间:2016-10-23 09:38:40

标签: unity3d vagrant ansible reboot

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

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

总结问题:如何在需要时重新启动我的虚拟机 ,然后在流浪汉+本地安全设置中继续配置?

到目前为止我的脚本:

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

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

1 个答案:

答案 0 :(得分:4)

现有的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

您需要拆分您的剧本以在重新启动之前运行要运行的任务,然后再运行另一个剧本以运行任务。

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

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