À travers son fichier de configuration nommé **Vagrantfile**, il permet d'orchestrer la mise en place d'environnement virtuel à base de VM ou de conteneur.
Des paquets Debian officiels (maintenu par Hashicorp) sont aussi disponibles dans des versions plus récentes mais sans dépôts : <https://www.vagrantup.com/downloads.html>
Vagrant permet de lancer et configurer des environnements basés sur VirtualBox, Libvirt, VMware, Docker, Amazon EC2 et plusieurs autres, ces providers peuvent être locaux ou situés sur des serveurs distants.
### Libvirt
Le [provider libvirt](https://github.com/vagrant-libvirt/vagrant-libvirt/blob/master/README.md) permet d'utiliser les services supportés par l'API [libvirt](https://libvirt.org/), notamment [KVM](HowtoKVM), voici un example d'utilisation d'un serveur KVM distant :
~~~
Vagrant.configure('2') do |config|
config.vm.provider :libvirt do |libvirt, override|
Le provider originel et par défaut de Vagrant est [Virtualbox](https://www.virtualbox.org/), il a l'avantage de pouvoir tourner sur Linux, Windows et Mac OS :
Afin de permettre à chacun d'utiliser son propre provider, qu'il soit local ou distant, on peut mettre en place une surcharge de la configuration via un fichier ~/.VagrantFile :
~~~
# Load ~/.VagrantFile if exist, permit local config provider
load File.expand_path(vagrantfile) if File.exists?(vagrantfile)
~~~
Ce ~/.VagrantFile contiendra la configuration du provider spécifique a chaque utilisateur, s'il n'existe pas et qu'aucun provider n'est défini, le provider par défaut du système sera utilisé.