情况:在Windows主机上,我想用Ubuntu 16安装一些具有开发工具的虚拟机 . 为此,我在vm上使用Vagrant和VirtualBox(都在Windows主机上)和 local Ansible .
问题:安装vm后,它应该在Virtual Box中显示统一登录,以便用户可以登录并开始工作 . 但是,统一(和升级任务)的安装似乎需要重新启动 . 此外,当我第二次运行 vagrant up
或 vagrant 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 回答
现有的vagrant插件https://github.com/aidanns/vagrant-reload可以帮助您在配置序列中运行重启
确保安装插件
在您的Vagrantfile中,您的配置将如下所示
您需要拆分您的playbook以运行在重新启动之前运行的任务以及之后运行任务的另一个playbook .
此命令已添加到供应程序序列中,因此这解决了在供应运行期间需要重新引导VM的事实 . 完全配置VM后,将不会再次调用它,因此第二次不会重新启动VM .
但是,由于它是配置运行的一部分,特别是调用配置程序运行(
vagrant up --provisioner
或vagrant provision
)将调用此配置程序运行 . 有一个open issue有可能在这个配置器上设置条件但是这还没有解决,所以调用vagrant配置器运行将始终调用此重新启动运行 .