Some (disjointed) notes on provisioning Vagrant with Ansible
I’ve been playing with Vagrant over the last few days, using Ansible to provision it. These are some notes to remind myself for next time and are very disjointed!
Configuring Vagrant to provision using Ansible is easy enough:
config.vm.provision "ansible" do |ansible| ansible.playbook = "provisioning/playbook.yml" end
Note however, that unlike Puppet, Ansible needs to be installed on your local computer, not within the virtual machine. On OS X, you use pip:
sudo easy_install pip sudo pip install -U ansible
Ansible uses roles which are re-usable sets of configuration commands. The easiest way to create a new playbook is to use the ansible-galaxy command line tool:
ansible-galaxy init my_new_role
This will create a skeleton role with a main.yml in each subdirectory for you.
Ansible Galaxy is the repository for finding reusable roles. Ansible doesn’t seem to have any distribution-independence. I’m unclear if this is a problem or not, but I kept finding roles on Galaxy that were for Centos only which was annoying. Also, roles installed via the ansible-galaxy command line tool are automatically installed globally, rather than in my vagrant project. I suspect that this fits better with its main purpose of managing servers rather than being a provisioner for Vagrant.
There are useful resources that I will want to find again:
- Ansible Galaxy: Reusable roles
- Ansible Examples: Starter examples from Ansible.
- vagrant-ansible: Vagrant LAMP provisioning by Martinez Delariva.
- ansible-zendserver: Richard Tuin’s playbook for installing Zend Server.