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 !



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

Parcourir l'entrepôt de boxs:

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)