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 shell
provisionador.
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á.