Provisionamento indolor do Vagrant com HereDocs e bash

Mesmo que o Puppet seja bem legal, eu me cansei do detalhamento e da necessidade de alternar o contexto entre Ruby, Puppet e outras linguagens para configurações simples de Vagrant box e decidi começar a usar o shellprovisionador.

Aqui está um pequeno snippet (para caixas do Debian) que verificará se você fez uma atualização do APT recentemente e configurou um ambiente de desenvolvimento Python:

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
config
.vm.box = "raring64"

# config.vm.network :forwarded_port, guest: 80, host: 8080
config
.vm.provision :shell, :inline => <<END
# Check if we need to perform a weekly pkgcache update
touch
-d '-1 week' /tmp/.limit
if [ /tmp/.limit -nt /var/cache/apt/pkgcache.bin ]; then
sudo apt
-get -y update
fi
rm
/tmp/.limit

if [ ! -e /usr/bin/easy_install ]; then
sudo apt
-get -y install python-setuptools
fi

if [ ! -e /usr/local/bin/fab ]; then
sudo apt
-get -y install build-essential python-dev
sudo easy_install fabric

fi

if [ -e /vagrant/fabfile ]; then
cd
/vagrant
fab provision

fi
END
end

Eu configurei o acima para executar o Fabric no final, já que eu o uso para implantações de produção e é muito útil para mim, mas os fundamentos de atualização e instalação de pacotes estão todos lá.