Vagrant et OpenStack

Bonjour à tous,
openstacklogo
Aujourd’hui nous allons réunir deux mondes distincts mais pourtant très proche. Le monde des développeurs avec Vagrant et le monde de l’administration système avec le grand Openstack.
Le tout dans une tendance très DevOps.

Si vous ne connaissez pas Vagrant, je vous invite à aller voir ici http://www.vagrantup.com/ et un ancien article : vagrant-redirection. Et si vous ne connaissez pas OpenStack voici une présentation qui explique les briques de base d’OpenStack : OpenStack_Briefing

Depuis sa version 1.1.0 Vagrant permet d’utiliser d’autres providers que VirtualBox. Ceci a permis principalement de pouvoir utiliser VMware mais une d’autres providers « officiel » tel que Docker, HyperV mais aussi beaucoup de providers venant de la communauté : LXC, OpenVz, KVM et même libvirt sans oublier ce qui nous intéresse OpenStack.

De nombreux providers Vagrant pour OpenStack existe ce sont plus ou moins des forks des uns des autres. Ici je vais vous présenter mon propre fork de ce projet vagrant-openstack-plugin. Le but de ce fork est l’ajout des fonctionnalités manquante afin de permettre l’utilisation de se provider par des développeurs ou pour du testing.

Le fork se trouve sur mon github. Pour l’installer vous pouvez cloner le repo et contruire le gem ou directement télécharger le dernier gem sur github.

$ wget https://github.com/bewiwi/vagrant-openstack-plugin/releases/download/0.7.0-bewiwi/vagrant-openstack-plugin-0.7.0-bewiwi.gem
$ vagrant plugin install vagrant-openstack-plugin-0.7.0-bewiwi.gem

La première modification a été de corriger le « vagrant reload » afin d’effectuer un vrai reboot du système (commit).

La seconde modification est l’ajout d’une commande afin de pouvoir effectuer un snapshot et ainsi obtenir une nouvelle image (commit). Ce qui est très utile afin d’avoir une image de démonstration une fois que les tests ont été validés.

$ vagrant openstack snapshot -h
Enters openstack
 
Usage: vagrant openstack snapshot <vmname> -n <snapshotname>
-n, --name NAME snapshotname
-h, --help Print this help
 
$ vagrant openstack snapshot -n centos-65-apache dev
==> dev: This server instance is snapshoting!
==> dev: Snapshot is ok

 

La dernière modification a été d’implémenter les systèmes de shared folder fourni par vagrant ( NFS, Rsync, SMB ), afin de ne pas juste faire un rsync au boot (commit). Bien entendu pour que le NFS fonctionne il est nécessaire que votre instance OpenStack est accès à votre machine hôte. Ceci vous permettra de pouvoir développer directement ou de tester votre code sur votre système avec les performances de votre instance.

Voici un exemple de Vagrantfile multi-vm qui vous permettra de lancer une instance identique soit sur Virtualbox soit sur Openstack :

# -*- mode: ruby -*-
# vi: set ft=ruby :
 
Vagrant.configure("2") do |config|
  config.vm.box = "centos-6.5"
 
  config.vm.provider :openstack do |os,override|
      #Param Openstack
      os.username     = "#{ENV['OS_USERNAME']}"
      os.api_key      = "#{ENV['OS_PASSWORD']}"
      os.endpoint     = "#{ENV['OS_AUTH_URL']}/tokens"
      os.keypair_name = "key"
      os.ssh_username = "root"
      os.networks = []
      os.flavor       = /m1.medium/
      os.tenant = "#{ENV['OS_TENANT_NAME']}"
      os.image = /centos6-5/
      override.ssh.private_key_path = "~/.ssh/id_dsa"
      override.vm.synced_folder ".", "/vagrant", type: "nfs"
      override.vm.box = "dummy"
      override.vm.box_url = "https://github.com/cloudbau/vagrant-openstack-plugin/raw/master/dummy.box"
  end
 
  config.vm.provider "virtualbox" do |vbox,override|
    #Param Vbox
    vbox.customize ["modifyvm", :id, "--memory", 4096]
    vbox.customize ["modifyvm", :id, "--cpus", 2]
    override.vm.synced_folder ".", "/vagrant", :id => "vagrant-root", owner: "root", group: "apache", :mount_options => ["dmode=777", "fmode=777"]
    override.vm.synced_folder "~/.composer", "/root/.composer", :id => "composer-root", owner: "root", group: "root", :mount_options => ["dmode=777", "fmode=777"]
  end
 
  config.vm.usable_port_range = (2200..2299)
  config.vm.network "forwarded_port", guest: 80,    host: 2280, auto_correct: true
 
  config.vm.define :dev do |dev|
    dev.vm.provision "shell", path: ".vagrant/scripts/maprovision-dev.sh"
  end
 
  config.vm.define :test do |test|
    test.vm.provision "shell", path: ".vagrant/scripts/maprovision-test.sh"
  end
 
end
 

 

Avec ce Vagrantfile on peut directement lancer les vms qu’il contient soit sur virtualbox soit sur openstack avec un provisioning identique.

# Virtualbox
$ vagrant up test
# OpenStack
$ vagrant up test --provider openstack
# OU
$ VAGRANT_DEFAULT_PROVIDER=openstack vagrant up

Cela permet par exemple aux développeurs d’utiliser Virtualbox sur leur poste local pour développer en local et la chaine de test utiliser la puissance de votre cloud privé.

En espérant que ça vous soit utile.

N’hésiter pas à laisser des commentaires si vous avez des questions voir des demandes d’évolutions.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *