
Bonjour à tous,
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