Vagrant: Virtual machine provisioning made easy

Pendant les Devops Days Paris 2013 , j’ai été assez supris qu’aussi peu de monde ait entendu parler de Vagrant. Heureusement, un open space était dédié à Vagrant et son utilisation mais dans la vingtaine de personnes qui s’y trouvaient, seule une poignée d’entre nous connaissait le logiciel (dont mon collègue François Armand et moi). Cet outil mérite d’être plus connu, et c’est pour cela que nous avons décidé d’écrire ce post : pour vous le faire découvrir et vous parler de l’usage que l’on en fait chez Normation.

Nous utilisons Vagrant intensément depuis Juillet 2012. À cette époque, la version de 2.4.0~beta3 de Rudder allait sortir. Pour valider cette release, nous avons réalisé de nombreux tests d’installation et de validation de la version. Pour réaliser ces tests, nous avons besoin à chaque fois de partir d’un nouvel environnement, complètement indépendant. Tester Rudder demande d’avoir plusieurs VMs (un serveur Rudder et plusieurs nœuds), ce qui nécessite d’avoir un Rudder installé et correctement configuré sur chacune d’entre elles… Réaliser ces taches manuellement nous prenait énormément de temps, demandait de rester concentré et surtout pouvait entraîner des erreurs de manipulation (interface chaise clavier…). A chaque fois, nous avions l’impression de gaspiller de l’énergie pour des VMs dont la durée de vie, très courte, ne demande pas un tel investissement. Avec Vagrant, tout ceci est automatisé, et le temps de configuration de ces VMs est optimisé.

Vagrant, c’est quoi ?

Vagrant est un outil de création d’environnement virtuel open source créé en Janvier 2010 puis développé sur son temps libre par Mitchell Hashimoto. Vagrant devenant de plus en plus populaire, Mitchell a créé Hashicorp en Novembre 2012, une entreprise dédiée à Vagrant. Avec 3 ans de développement, une très large communauté et le soutien d’Hashicorp, Vagrant est devenu un logiciel sain en lequel on peut avoir confiance.

Le fonctionnement de Vagrant est très simple :

  • Créer une VM, basée sur une base box pour un provider de VM,
  • La Customise, toujours grâce au provider,
  • La Configure au démarrage, grâce à un outil de provisioning,
  • La Contrôle directement soit par le biais des commandes Vagrant, soit grâce à une connexion par ssh (Vagrant ssh).

Une fois configuré, votre template (Vagrantfile) peut être réutilisé et ainsi automatiser tout votre processus d’installation.

Vagrant utilise un seul fichier de configuration : le Vagrantfile. Ce fichier décrit la façon dont les machines virtuelles seront créées et configurées. Tout ce que vous avez besoin de savoir sera centralisé dans ce fichier. La configuration du Vagrantfile est parfaitement documentée sur leur site web : http://docs.vagrantup.com/v2/.

Vagrant a besoin de trois choses pour créer une VM :

  • Une base box : ce sont des machines virtuelles prêtes à être utilisées par Vagrant (vagrant user, accès définis). Vous pouvez créer vos propres boxes, cependant, plusieurs sont déjà disponibles sur vagrantbox.es,
  • Un provider de VM : il va créer la VM à partir de la base box et va la customiser. De nombreux providers sont supportés (Virtualbox, AWS, …),Vagrant_FR
  • Un outil de provisioning : il sera lancé au démarrage de la VM, un script shell peut être utilisé, tout comme un outil de gestion de configuration (CFEngine, Chef, Puppet, …).

Il y a donc beaucoup de possibilités, qui s’adapteront très bien à vos compétences et sauront répondre à votre besoin.

Vagrant est vraiment très simple à installer et à utiliser, vous avez juste à choisir votre provider (virtualbox est la plus simple, mais d’autres providers sont également disponibles), et c’est parti !

Créer votre première VM est très simple, il vous suffit de lancer les commandes suivantes dans un répertoire dédié :

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

Vagrant propose de nombreuses commandes pour gérer votre environnement :

  • init: initialise un environnement Vagrant avec un Vagrantfile de base
  • up: crée la/les VM(s)
  • ssh: se connecte via ssh à la machine passée en paramètre
  • status: affiche le statut de chaque VM
  • destroy: détruit la/les VM(s)
  • halt: arrête la/les VM(s)
  • box:  gère les base boxes

… et bien d’autres !

Au final, tout ce que vous devez savoir sur l’utilisation de Vagrant se résume à comment déclarer une VM (très simple et direct avec le Vagrantfile), et comment la configurer (ce qui dépend de vos besoins) !

Vagrant vous permet d’accéder à l’automatisation, et je pense vraiment que c’est une des meilleures choses qu’on ait pu inventer. L’automatisation vous permet de récupérer le temps passé à faire les choses manuellement, vous permettant ainsi de mieux organiser votre planning sur d’autres taches, qui elles, requièrent votre présence. Avec Vagrant vous faites les choses une fois, et tout marchera comme prévu (à peu près, si on tient compte de la loi de Murphy). Chez Normation, on s’en sert dans trois cas : dans notre environnement de développement, dans notre environnement de test et pour la réalisation de démos. Je reviendrai plus en détails sur tout ce que Vagrant nous a permis de faire, et tous les avantages que nous en avons tiré dans un prochain post de blog.

Vagrant n’est pas le seul outil sur l’automatisation et le provisioning d’environnement virtuel, il y a aussi Veewee (création de base boxes, développé avec amour par Patrick Debois) ou Cobbler (mon collègue, Mathieu Cerda, a donné une présentation à ce sujet aux LOADays 2013, un petit lien vers ses slides). Ces deux outils sont également très pratiques et je vous encourage à les regarder plus en profondeur ! L’automatisation facile est maintenant possible, et ce serait dommage de ne pas en profiter !