Matt at Keyboard Writes Code

A blog about software development, technology and other things that interest me

Init Provisioning

March 28, 2015 — Matt Forrester

I have a desire set up virtual machines on my laptop using scripts for testing things like microservices. Unfortunately I don't much like BASH as a provisioning system and would prefer to work with Ansible.

The Init Provisioning scripts are designed to allow easy development of Ansible based virtual machines they perform the following tasks.

  • Copy your SSH config and keys from ~/.ssh/ into the virtual machine for authentication with GitHub etc.
  • Install libraries necessary to install Ansible using pip
  • Install Ansible.
  • Set up the /etc/ansible/hosts file with roles coming from an environmental variable.
  • Run ansible-pull on repositories and playbooks which are also configured from environmental variables.

The following environmental variables are used:

ROLES: This is a semi colon separated list of all the roles you wish to give the virtual machine. These will be stored in /etc/ansible/hosts

ANSIBLE_PULL_REPOSITORY_PLAYBOOK: This is a more complicated environmental variable consisting of:

  • A Git repository
  • Followed by two colons
  • Then a set of playbook names (without the .yml extension) which should be separated by commas.
  • If there are any more Git repositories, a semi colon should be inserted followed by another Git repository etc.

The end result is a command line which looks something like the following:

ANSIBLE_PULL_REPOSITORY_PLAYBOOK='git@github.com:forbesmyester/provisioning-common.git::terminal_developer,gui_developer;git@github.com:someother/repository::another_playbook' ROLES=developer vagrant up

And if your playbooks are correct, a completely provisioned and working Vagrant virtual machine.

You can get the Project at GitHub.