I've been experimenting with Ansible for new server setup and I was amazed to see Vagrant supports it out of the box (I guess I shouldn't be Vagrant is a great piece of software). When I tried to use it on my Windows laptop I received the following error:
> vagrant up test Bringing machine 'test' up with 'virtualbox' provider... There are errors in the configuration of this machine. Please fix the following errors and try again: ansible provisioner: * `playbook` for the Ansible provisioner does not exist on the host system: C:/path/playbook.yml
I said to myself:
It's okay I'll just install ansible on Windows. How hard could it be?
It turns out it's not simple and I don't really want to have to do this on all our computers. I know it seems like a small amount of work but it adds up.
The fix for this was for me to run the playbook inside the VM. First I setup the
Vagrantfile to run a shell script:
config.vm.provision :shell, :inline => "/path/to/ansible/provision.sh"
Then inside the shell script we're going to install ansible (if the ansible-playbook executable doesn't exist) and then we're going to run the playbook.
if [ ! -f /usr/bin/ansible-playbook ] then apt-get install software-properties-common apt-add-repository ppa:ansible/ansible apt-get update apt-get install -y ansible fi ansible-playbook --inventory="localhost," -c local /path/to/ansible/playbook.yml
By using the
-c local we're telling anisble to make a local connection and not use SSH because then we would need to setup keys and that seems like a lot of unnecessary work. :-)