使用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>