Vagrant is een Ruby-programma dat je installeert met het commando gem install vagrant. Daarna download je een basismachine, een Ubuntu 10.04-gebaseerde server:

$ vagrant box add lucid32 http://files.vagrantup.com/lucid32.box

Eerst maken we een directory aan voor onze virtuele machine. Voer je hierin nu het commando vagrant init uit, dan creëert Vagrant een zogenaamde Vagrant-file in de directory (te vergelijken met een Makefile voor code). Als je nu voor deze virtuele machine de juist gedownloade template wilt gebruiken, dan plaats je het volgende in de Vagrant-file:

Vagrant::Config.run do |config|

config.vm.box = "lucid32"

end

Voer je nu het commando vagrant up uit, dan start je virtuele machine op in VirtualBox. Vagrant vereist wel VirtualBox 4.0. Je kunt op elk moment een virtuele machine weer verwijderen met het commando vagrant destroy, en met vagrant ssh log je via ssh in op je virtuele machine. Met vagrant suspend respectievelijk vagrant resume zet je de virtuele machine in slaap en wek je hem weer, waardoor je snel weer kunt verderwerken.

Je kunt ook je virtuele machines als Vagrant-boxes packagen en verspreiden, zodat anderen ze met het commando vagrant box add aan hun eigen Vagrant-installatie kunnen toevoegen. En als je bijvoorbeeld een ander besturingssysteem dan Ubuntu 10.04 voor de Vagrant-boxes wilt gebruiken, kan de tool VeeWee je helpen bij het aanmaken van je eigen basismachines.

Configuratie

Als slagroom op de taart ondersteunt Vagrant een automatische verdere configuratie van je virtuele machines, naar keuze met Chef of Puppet. Definieer de configuratie bijvoorbeeld in een Puppet-manifest en plaats dit in het bestand manifests/naamvanbox.pp in de directory van de machine. In de Vagrant-file voeg je dan de volgende regel toe:

config.vm.provision :puppet

En verder kun je port forwarding instellen om een poort van je host naar je virtuele machine te forwarden. De volgende regel in je Vagrant-file toont een voorbeeld voor als je een webserver in je virtuele machine wil testen:

config.vm.forward_port("web", 80, 8080)