I'm a big fan of Vagrant (and Puppet) and often use it to craft together test environments and test Puppet manifests and modules that are used elsewhere later. Often, I use the precise64 box as a starting point, but this has still Puppet 2.7 packaged in it. So I came with this little script (bootstrap-puppet.sh) to update Puppet on 'vagrant up' if applicable:
#!/bin/bash if [ ! -e /tmp/puppet-updated ]; then wget -O /tmp/puppetlabs-release-precise.deb http://apt.puppetlabs.com/puppetlabs-release-precise.deb dpkg -i /tmp/puppetlabs-release-precise.deb apt-get update apt-get --assume-yes install puppet touch /tmp/puppet-updated fi
Now this can simply be included in your Vagrantfile with a shell provisioner before (!) your Puppet provisioner, and if Puppet is not up-to-date yet, it'll be updated:
config.vm.provision :shell, :path => "scripts/bootstrap_puppet.sh"
If you're using different boxes, look at http://docs.puppetlabs.com/guides/puppetlabs_package_repositories.html for adjusting the script to fit your box' OS.