使用Ansible将其安装到客户操作系统中以构建Vagrant环境

如果你想在Windows上使用Ansible来进行Vagrant的provisioning,你会在Windows上的Ansible环境中感到困扰。(根据我所查到的,貌似不可能实现)

因此,让我们安静地将Ansible推送到虚拟机中。

请点击这里查阅仓库: progre/template-vagrant

目录结构是这种感觉。

ansible/
  hosts
  playbook.yml
provision.sh
Vagrantfile

我会随心所欲地编写Playbook。

---
- hosts: 127.0.0.1
  connection: local
  sudo: yes
  tasks:
    - name: install ruby
      apt: pkg=ruby update_cache=yes
    - name: install rubygems
      apt: pkg=rubygems update_cache=yes
    - name: install bundler
      command: gem install bundler

我也会准备主持人。

127.0.0.1 ansible_connection=local

我将编写一个在客户操作系统上运行Ansible的脚本。

#!/usr/bin/env bash

if ! [ `which ansible` ]; then
    apt-get update -y
    apt-get install -y ansible
fi

ansible-playbook -i /vagrant/ansible/hosts /vagrant/ansible/playbook.yml

剩下的就是Vagrantfile了。

Vagrant.configure("2") do |config|
  config.vm.box = "precise64"
  config.vm.box_url = "http://files.vagrantup.com/precise64.box"
  config.vm.synced_folder ".", "/vagrant", :mount_options => ['dmode=775', 'fmode=664']
  config.vm.provision "shell", :path => "provision.sh"
end

对于共享文件夹,默认情况下会拥有可执行属性,这会导致无法读取hosts文件。可以使用synced_folder的:mount_options参数来指定共享文件夹的属性。(感谢garbagetown先生的pull请求)

通过这个,你可以在Windows上使用Ansible稳定地创建环境。

PS E:\Developments\vagrant\rubyist> vagrant provision
[default] Running provisioner: shell...
DL is deprecated, please use Fiddle
[default] Running: C:/Users/progre/AppData/Local/Temp/vagrant-shell20140202-12404-w7zith
stdin: is not a tty

PLAY [127.0.0.1] **************************************************************

GATHERING FACTS ***************************************************************
ok: [127.0.0.1]

TASK: [install ruby] **********************************************************
ok: [127.0.0.1]

TASK: [install rubygems] ******************************************************
ok: [127.0.0.1]

TASK: [install bundler] *******************************************************
changed: [127.0.0.1]

PLAY RECAP ********************************************************************
127.0.0.1                  : ok=4    changed=1    unreachable=0    failed=0

PS E:\Developments\vagrant\rubyist>

bannerAds