vendredi 14 septembre 2012

Magic Box

  • Vous est-il déjà arrivé de vouloir tester votre application sur votre environnement de développement et de passer plus de temps que nécessaire à installer des serveur de données, une version spécifique de tomcat ? 
  • Vous est-il déjà arrivé de dépendre d'un service tiers fourni par ne autre équipe et de vous retrouver coincé parce que leur service est arrếté ou n'utilise plus la version que vous deviez utiliser ?
  • Vous est-il déjà arrivé de rencontrer des problèmes en qualif/prod parce que les environnements de dev/test/prod ne tourne pas sous le même OS ou des versions de serveur Web différentes?

Non ?!? Vous avez bien de la chance...

Et si il existait une boite magique qui contient tous les services dont vous avez besoin... ?

Vous ne me croyez pas! Mais pourtant il y a ... Vagrant ...

image récupérée sur le site vagrant : http://vagrantup.com/

Vagrant

Vagrant est un outil de développement qui permet de gérer des machines virtuelles ainsi que leurs configurations à l'aide de VirtualBox et Puppet/Chef.

Le principe est simple :
  1. Vous disposez d'un ensemble de machines virtuelles (boxes) dans un repository accessible via HTTP
  2. Vous téléchargez une de ces "boxes" en utilisant la commande vagrant box add
  3. Vous initialisez une instance de cette machine (création d'un fichier de configuration Vagrantfile dans votre dossier de travail)
  4. vous la démarrez (au premier démarrage, la machine virtuelle est créée par virtualbox et si il y a des fichiers de configuration puppet/chef dans votre box, ils sont exécutés)
  5. Votre machine virtuelles est prête.
Voilà c'est aussi simple que ça d'un point devue utilisateur. Le plus long dans l'histoire c'est le téléchargement de la box depuis votre repostiry, un fois téléchargée vous pouvez créer autant d'instances de cette box que vous le souhaitez.

Les boxes sont stockées dans un répertoire .vagrant.d de votre home directory. Si vous voulez changer cet emplacement, il suffit de mettre à jour la variable d'environnement VAGRANT_HOME avec le chemin absolu du répertoire que vous souhaitez utiliser.

Grâce à ces "boites" en quelques secondes (ou minutes en fonction de votre débit) vous pouvez disposez d'une VM avec une configuration identique à votre environnement de production pour tester votre application... merveilleux...

En plus la documentation est très bien faite, je n'ai eu aucun mal à trouver les infos que je cherchais à l'exception du changement de repository local (cf. ci-dessus).

Les fichiers de configuration 

Les fichiers de configuration vont permettre de:
  • configurer la redirection de port entre votre machine et la VM créée à partir de la box.
  • redéfinir le chemin vers des dossiers créés par vagrant
  • configurer les paramètres de connexions via ssh
  • préciser la manière dont la VM sera provisionée (puppet/chef)
  • etc...
La liste des paramètres de configuration est disponible ici.
Lorsque l'on utilise vagrant, il existe 4 fichiers de configuration présentés ci-dessous dans l'ordre de chargement :

  1. Un fichier contenant la configuration par défaut dans le dossier "gems". (Dans mon cas il est à cet endroit /opt/vagrant/embedded/gems/gems/vagrant-1.0.3/config/default.rb) Ce fichier ne doit pas être édité, il contient :
    • la configuration ssh pour accéder à la VM avec le user vagrant
    • les informations de montage du dossier partagé. Chaque Box a un dossier "/vagrant" partagé avec le dossier dans lequel la commande "vagrant init" a été exécutée.
  2.  Le second fichier (optionnel) est contenu dans la box, il s'agit d'un fichier qui a été ajouté à l'archive avec l'option --vagrantfile de la commande "vagrant package", il est donc utilisé pour chaque machine virtuelle créée à partir de cette box. Il peut contenir par exemple les instructions de provisioning (via puppet/chef)
  3. Le troisième fichier (optionnel) est contenu dans le dossier VAGRANT_HOME (par défaut "~/.vagrant.d").
  4. Pour finir, le dernier fichier à être chargé est celui créé à l'initialisation de la VM, il est présent dans le dossier à partir duquel la command "vagrant init" a été exéctée.

Commandes

Voici la liste des commandes disponibles (à prefixer par la command principale "vagrant" ):

  • box : pour gérer les boxes dans le repository local (add/remove/list/repackage cette derniere est utile si on change la configuration de la box).
  • destroy : suppression de la VM dans VirtualBox, la box est toujours présente dans votre home vagrant mais l'instance de la VM est définitivement supprimée
  • gem : permet de télécharger des plugins vagrant
  • halt : arrête la vm
  • init : crée un fichier de configuration dans un le dossier courant, il faut toujours être dans ce dossier pour pouvoir manipuler une instance de VM. Il ne peut y avoir qu'un fichier Vagrantfile par dossier.
  • package : crée une box à partir d'une instance de VM dans VirtualBox. (Peu utile pour un utilisateur lambda)
  • provision : execute les mises à jour de configuration déclarées dans les conf puppet/chef si vous voulez les executer alors que votre VM est up, sinon ils sont automatiquement lancés au démarrage de la VM.
  • reload : redémarre la VM
  • resume : restore l'activité de la VM après un suspend
  • ssh : connexion à la VM 
  • status : état de la VM
  • suspend : mémorise l'état de la VM et la suspend (resume  restore la VM)
  • up : démarre la VM et la crée dans virtualbox si elle n'exite pas

VirtualBox attention aux versions...

Pour que vagrant fonctionne sans problème, il faut que les VM utilisent les "VirtualBox addition guest". Seulement voilà, si votre box a été crée avec une version VirtualBox différente de la votre, il se peut que vous ayez un message d'alerte au démarrage de la VM.
Ce message vous prévient qu'il est possible que certaines fonctionnalités comme le partage de fichier ou la redirection de port ne fonctionnent pas trés bien en raison de cette différence de version... pas génial quoi.

[eric@pcfixe test]$ vagrant init lucid32
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

[eric@pcfixe test]$ vagrant up
[default] The guest additions on this VM do not match the install version of
VirtualBox! This may cause things such as forwarded ports, shared
folders, and more to not work properly. If any of those things fail on
this machine, please update the guest additions and repackage the
box.

Guest Additions Version: 4.1.16
VirtualBox Version: 4.1.20

Pour résoudre ce problème, il faut vous connecter à votre VM en ssh et mettre à jour les "Guest Addition" en fonction de l'OS qui tourne dans la VM comme indiqué sur cette page du site VirtualBox.

[eric@pcfixe test]$ vagrant ssh
    Linux lucid32 2.6.32-38-generic #83-Ubuntu SMP Wed Jan 4 11:13:04 UTC 2012 i686 GNU/Linux
    Ubuntu 10.04.4 LTS

    Welcome to Ubuntu!
     * Documentation:  https://help.ubuntu.com/
    New release 'precise' available.
    Run 'do-release-upgrade' to upgrade to it.

    Welcome to your Vagrant-built virtual machine.
    Last login: Thu Jun  7 01:56:53 2012 from 10.0.2.2
    Last login: Thu Jun  7 01:56:53 2012 from 10.0.2.2
    vagrant@lucid32:~$
    vagrant@lucid32:~$ sudo apt-get update

    vagrant@lucid32:~$ sudo apt-get upgrade

    vagrant@lucid32:~$ sudo apt-get install dkms

    vagrant@lucid32:~$ sudo reboot

[eric@pcfixe test]$ vagrant ssh

    vagrant@lucid32:~$ sudo mkdir /media/cdrom

    vagrant@lucid32:~$ sudo mount /dev/cdrom /media/cdrom

    vagrant@lucid32:~$ bash /media/cdrom/VBoxLinuxAdditions.run

[eric@pcfixe test]$ vagrant reload

Normalement, l'erreur a disparue.

Ensuite, vous pouvez repackager votre VM dans une box pour pouvoir la réinstaller dans votre repository local à l'aide de la command package

[eric@pcfixe test]$ vagrant package --base <virtualbox_vm_name> --output lucid32AddGuest.box

Voilà, c'est tout pour aujourd'hui.


Prochainement, je ferais un tuto sur la création d'une box "from scratch" avec une config puppet ou chef pour installer quelques services...




Aucun commentaire:

Enregistrer un commentaire