Pensez à dire merci !
Mibinn
Dev, Portails, Mobile, Virtualisation...
mardi 25 novembre 2014
[ONEPLUS] Ki ki n'en veut des invites ?
Aller, jour de bonté : 3 codes d'invite pour achat Oneplus One ci-dessous... expire in one day (le 26/11/2014). Donc je vous conseille de les utiliser dès aujourd'hui, mardi 25/11/2014 !
Pensez à dire merci !
Pensez à dire merci !
dimanche 23 novembre 2014
[Vagrant]Créer un entrepôt de box - partie 4 - Synthèse et autres
Synthèse du cycle de vie
- Créer un dossier local
- Y déposer le Vagrantfile téléchargé depuis l'entrepôt central
- Descendre version N de la box et créer un instance de VM (Vagrant up)
- ... travailler sur la VM...
- Créer une box version N+1 (vagrant package)
- Uploader la box version N+1 sur serveur et maj du json
- Mettre à jour son entrepôt local, en descendant la version N+1 (vagrant update)
- Supprimer la VM basée sur la box versionN (vagrant destroy)
- Supprimer la box locale version N (vagrant box remove)
- créer un instance de VM basée sur la box N+1 (vagrant up)
Administration
- Arrêt/relance du serveur
/data/mibin-boxs/mibin.sh start|stop|status
- Création de dossier
Via ssh (winscp) en user root
- Edition de JSON
Via ssh (winscp) en user root
- Upload de box et vagrantfile
Via ssh (winscp) en user root
Roadmap
- Permettre l'upload via http (sans passer par ssh)
- Permettre l'édition en ligne (http) des fichiers json (et éventuellement Vagrantfile)
- Fournir une IHM de browse de l'entrepôt, avec affichage des caractéristiques, version, commentaires de box.
- Commande de commit depuis la ligne de commande avec formulaire en ligne : fichier à uploader, projet cible, n° de version, commentaire de version
[Vagrant]Créer un entrepôt de box - partie 3 - Utilisation
Prérequis
- VirtualBox et Vagrant installés sur le poste ( cf Installation Vagrant)
Parcourir l'entrepôt de boxs:
- L'entrepôt est accessible à l'adresse : http://vagrant.mibin.mibin:81/
Descendre une box sur son poste :
- télécharger et placer le fichier Vagrantfile d'une box dans un répertoire du poste hôte.
- dans ce répertoire lancer la commande :
vagrant up |
=> La box est téléchargée (sur la base du fichier JSON, en prenant la dernière version), décompressée, stockée en repository local, un vm est créée avec cette box, la vm est démarrée, les configuration du Vagrantfile sont appliquées.
Packager une box et la versionner
- stopper la VM
vagrant halt |
- packager
vagrant package --output <nomdlabox>_AA.MM.JJ.box |
- Copier le fichier box (et éventuellement le fichier Vagrantfile) dans l'entrepôt de box (sur serveur)
- Mettre à jour le fichier json en conséquence
Vérifier l'état des versions locales vis à vis du repository serveur
vagrant box outdated |
Exemple de résultat :
Checking if box 'lifeplus' is up to date... A newer version of the box 'lifeplus' is available! You currently have version '14.2.25' . The latest is version '14.10.21' . Run `vagrant box update` to update. |
Updater sa box locale et Reconstruire une VM
- Pour updater la box locale t:
vagrant box update ou vagrant box update --box '<nombox>' |
Note : cela ne fera que descendre une nouvelle version de box, et ne supprimera pas la version précédente de votre entrepôt local ni la/les instances de vm basées sur cette version précédente. (voir les commande suivantes pou cela)
- Pour lister les boxs locales (et leur versions)
vagrant box list |
- Pour supprimer sa vm (depuis le dossier du projet)
vagrant destroy |
Note : cela ne supprimera pas le fichier Vagrantfile présent dans le dossier, ce qui peut être pratique pour recréer un VM (vagrant up)
- Pour supprimer une version de box présente en local
vagrant box remove '<nombox>' --box-version '14.2.25' |
Icon
note : il est conseillé de supprimer les VM instanciées à partir de cette box avant de la supprimer.
- Recréer une VM à partir d'une nouvelle version de box, (méthode recommandée)
Dans le dossier du projet et si vous avez conservé ou redownloadé le fichier Vagrantfile de la box
vagrant up |
- Recréer une VM à partir d'une nouvelle version de box, dans un nouveau dossier projet,
Dans un nouveau dossier projet et si vous l'avez déjà "descendue" dans votre entrepôt local (via "vagrant box update")
vagrant init <nombox> puis vagrant up |
Note : l'inconvénient de cette méthode est qu'elle obfusque le fichier Vagrantfile de la box, en exposant dans le dossier du projet un Vagrantfile "enfant", sans les paramètres du Vagrantfile de la box (qui est cependant chargé en priorité)
[Vagrant]Créer un entrepôt de box - partie 2 - installation
Arborescence
- Création d'un dossier /data/mibin-boxs/vagrant/boxs
- Copie dans ce dossier des boxs existantes
- Organisation en sous-dossiers (libre à vous de définir votre plan de classement):
boxes
..linux
...._templates
....projet1
....projet2
.... etc
.. windows
....projet1
....projet2
.... etc
Installation de mongoose
J'utilise ici Mongoose comme serveur HTTP pour exposer l'entrepôt de box. C'est simple et efficace. Bien sûr, rien empêche de monter un apache, un nginx ou même un IIS (lol).
- Installation (ici sous redhat6 via yum)
yum install mongoose.x86_64 |
- Création d'un fichier de conf mongoose_vagrant.conf
document_root /data/mibin-boxs/vagrant listening_ports 81 extra_mime_types .json=application/json |
- Création d'un batch de lancement mibin.sh (start|stop|status). Exemple :
#!/bin/sh startup= "mongoose ./mongoose_vagrant.conf" start() { echo -n $ "Starting Mongoose service: " # sh $startup nohup $startup & echo $? } stop() { echo -n $ "Stopping Mongoose service: " #echo -n $ "NEED TO DO IT MANUALLY. " # sh $shutdown kill - 9 `ps -aef | grep "$startup" | grep -v mibin.sh | grep -v grep | awk '{print $2}' ` echo $? } restart() { stop start } status() { test=$(ps -aef | grep "$startup" | grep -v grep) if [ -z "$test" ] ; then echo "Stopped" else echo "Running" echo $test fi } # Handle the different input options case "$1" in start) start ;; stop) stop ;; status) status ;; restart) restart ;; *) echo $ "Usage: $0 {start|stop|restart|status}" exit 1 esac exit 0 |
Qualification des boxs
Pour chaque box :
- nommage du fichier box en : <nombox>_AA.MM.JJ.box ou AA, MM, JJ correspondent à la date de création de la box dans le repo (tient lieu d'indice de version)
- création d'un fichier <nombox>.json
exemple, avec 2 versions :
{ "name" : "lifeplus" , "description" : "lifeplus : centos64, postgres9, liferay6.2.0." , "versions" : [{ "version" : "14.2.25" , "providers" : [{ "name" : "virtualbox" , "checksum_type" : "sha1" , "checksum" : "e348c36dd40e45eb111ad88417e7bb45ba2c6e99" }] },{ "version" : "14.10.21" , "providers" : [{ "name" : "virtualbox" , "checksum_type" : "sha1" , "checksum" : "cf4a4d0bf06070b15253b0c80feeccd1d3f363a5" }] }] } |
Pour calculer le checksum d'une box :
openssl sha1 nomdelabox.box |
- création d'un Vagrantfile
Exemple :
# -*- mode: ruby -*- # vi: set ft=ruby : # Vagrantfile API/syntax version. Don 't touch unless you know what you' re doing! VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = "lifeplus" config.vm.post_up_message = " Centos6. 4 64 bits 2 cpus ram 4 Go HD 8 Go IP : 192.168 . 100.10 hostname : lifeplus.mibin.bzh Root : root/***** Liferay : mibin/***** " config.vm.hostname = "centos64.mibin.bzh" # The url from where the 'config.vm.box' box will be fetched if it # doesn 't already exist on the user' s system. # Create a private network, which allows host-only access to the machine # using a specific IP. config.vm.network :private_network, ip: "192.168.100.10" config.vm.provider :virtualbox do |vb| vb.customize [ "modifyvm" , :id, "--memory" , "4096" ] vb.customize [ "modifyvm" , :id, "--cpus" , 2 ] vb.customize [ "modifyvm" , :id, "--macaddress2" , "08002755A4B5" ] end end |
note : description de box
Plutôt qu'un fichier "lisezmoi.txt", il est plus judicieux de reporter les informations de la box dans le Vagrantfile, sous le paramètre config.vm.post_up_message.
Ainsi ces informations seront présentés à l'utilisateur de la box à chaque démarrage de la VM (en plus d'être lisible dans le Vagrantfile)
Inscription à :
Articles (Atom)