首页 文章

重启后继续Ansible Playbook

提问于
浏览
4

情况:在Windows主机上,我想用Ubuntu 16安装一些具有开发工具的虚拟机 . 为此,我在vm上使用Vagrant和VirtualBox(都在Windows主机上)和 local 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

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

1 回答

  • 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
    

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

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

    但是,由于它是配置运行的一部分,特别是调用配置程序运行( vagrant up --provisionervagrant provision )将调用此配置程序运行 . 有一个open issue有可能在这个配置器上设置条件但是这还没有解决,所以调用vagrant配置器运行将始终调用此重新启动运行 .

相关问题