Table of Contents
VAGRANT: Référentiel de box privé
Table of Contents
Pour diverses raisons, il peut arriver que le référentiel public Vagrant ne puissent pas être utilisé, cet article présente les méthodes pour:
- Créer un dépôt local de box sur le réseau interne
- Gérer les versions des box hébergées.
Prérequis
- Serveur Nginx installé
- de box disponibles et opérationneles
Configuration du dépôt local
Configuration de NGINX
Créer le fichier vagrantbox.conf
$ vi /etc/nginx/conf.d/vagrantbox.conf
server { listen 8089; server_name vagrantbox;i root /var/www/html/vagrant/; # resolve vagrant json file(s) location ~ ^/(.*)/(.*)/$ { index $2.json; try_files $uri $uri/ $2.json =404; autoindex off; } # enable auto indexing for boxes location ~ ^/boxes/$ { try_files $uri $uri/ =404; autoindex on; autoindex_exact_size on; autoindex_localtime on; } # serve json with specific header location ~ \.json$ { add_header Content-Type application/json; } # serve box(s) with specific header location ~ \.box$ { add_header Content-Type application/octet-stream; } }
configurer le demarrage automatique de nginx au boot
$ /sbin/chkconfig nginx on
contrôler la configuration de nginx
$ nginx -t
Démarrer nginx
$ service nginx start
configurer le mode permissif
$ setenforce 0
Création de l'entrepôt vagrant
Créer les dossiers
$ mkdir -p /var/www/html/vagrant/boxes/ $ chmod 755 -R /var/www/html/vagrant/
Charger les fichiers d'indexation
Par défaut le root du serveur nginx est /var/www/html/, pour permettre à celui-ci de fonctionner dans un auter répertoire copier les fichiers html dans le nouveau répertoire racine.
$ cp /usr/share/nginx/html/*.html /var/www/html/vagrant/
Charger les box
$ cp ~/VagrantBoxes/dgfipbase/dgfipbase_1.0.0.box /var/www/html/repo/pub/boxes/vagrant/boxes/
Créer le catalogue JSON
$ mkdir -p /var/www/html/vagrant/dgfip/centos6 $ touch /var/www/html/repo/pub/boxes/vagrant/centos6.json
Le nom du répertoire doit être identique au nom de l'entrée du catalogue (sans le .JSON)
Afficher le tree de l'entrepôt
$ tree /var/www/html/vagrant/
├── vagrant │ ├── boxes │ │ ├── catalog │ │ ├── dgfipbase_1.0.0.box │ │ └── dgfip-rhel7-0.4.0.box │ ├── dgfip │ │ ├── centos6 │ │ │ └── centos6.json │ │ └── centos7 │ │ └── centos7.json │ ├── prod │ └── sandbox │ └── Vagrantfile
Création du catalogue
Afin de servir plusieurs versions d'une boîte vagrant et d'activer les notifications de mise à jour, il faut configurer un catalogue de box. Ce catalogue est écrit en code JSON dans un seul fichier.
Recupérer le checksum sha1 de la box
$ sha1sum /var/www/html/repo/pub/boxes/vagrant/boxes/dgfipbase_1.0.0.box
2fc11dcd75505e483a6ba1d1501216434e0e9d1b /var/www/html/repo/pub/boxes/vagrant/boxes/dgfipbase_1.0.0.box
Editer le fichier JSON
$ vi /var/www/html/repo/pub/boxes/vagrant/centos.json
{ "name": "demo/centos6", "description": "socle 2012 dgfip CentOS 6 64-bit.", "versions": [{ "version": "1.0.0", "providers": [{ "name": "libvirt", "url": "http://xx.xx.xxx.xxx:8089/boxes/vagrant/boxes/dgfipbase_1.0.0.box", "checksum_type": "sha1", "checksum": "2fc11dcd75505e483a6ba1d1501216434e0e9d1b" }] }] }
Description des informations du fichier ainsi créé:
- Définition du nom de la box dgfipbase. Toutes les versions seront regroupées sous ce nom.
- Ajout d'une description littérale de ce qui est dans la box.
- définition de la première version 1.0.0
- Indication du fournisseur : libvirt sous
- Indication de l'URL de la box: ~/VagrantBoxes/dgfipbase/dgfipbase_1.0.0.box
- Indication de la somme de contrôle sha1 à vérifier lors de l'importation de la box.
Redémarrer nginx
$ service nginx restart
Utilisation par les Clients
Sur un navigateur, vérifier les URL suivantes avant de continuer:
http://serveurlocal:8089/boxes/vagrant/centos.json http://serveurlocal:8089/boxes/vagrant/boxes/
Ajouter le repertoire base box
$ vagrant box add demo/centos6 http://127.0.0.1:8089/boxes/vagrant/centos.json
==> box: Loading metadata for box 'http://127.0.0.1:8089/boxes/vagrant/centos.json' ==> box: Adding box 'demo/centos6' (v1.0.0) for provider: libvirt box: Downloading: http://127.0.0.1:8089/boxes/vagrant/boxes/dgfipbase_1.0.0.box box: Calculating and comparing box checksum... ==> box: Successfully added box 'demo/centos6' (v1.0.0) for 'libvirt'!
On remarquera le changement dans la ligne des métadonnées pour la box 'http://127.0.0.1:8089/snsbox/vagrant/centos.json' qui confirme la lecture du catalogue. Et la ligne demo/centos6' (v1.0.0) for provider: libvirt qui confirme que la version 1.0.0 est ajoutée à Libvirt. Les deux dernières lignes confirment que notre somme de contrôle dans le fichier centos.json était correcte.
Lister les box
$ vagrant box list
centos (libvirt, 0) demo/centos6 (libvirt, 1.0.0)
Créer le projet Vagrant
dans le repertoire du projet
$ cd ~/VagrantTest $ vagrant init demo/centos6
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.
Démarrer la box
$ vagrant up
Vérifier à nouveau par ssh si tout est de nouveau opérationnel, en lisant le message d'accueil et en listant le contenu de /vagrant sur l'invité.
Gestion des versions dans l'entrepôt local
Editer le fichier JSON
$ vi /var/www/html/boxes/vagrant/centos.json
On utilise pour cette démonstration la même box!
{ "name": "demo/centos6", "description": "socle 2012 dgfip CentOS 6 64-bit.", "versions": [{ "version": "1.0.0", "providers": [{ "name": "libvirt", "url": "http://127.0.0.1:8089/boxes/vagrant/boxes/dgfipbase_1.0.0.box", "checksum_type": "sha1", "checksum": "2fc11dcd75505e483a6ba1d1501216434e0e9d1b" }] },{ "version": "1.0.1", "providers": [{ "name": "libvirt", "url": "http://127.0.0.1:8089/boxes/vagrant/boxes/dgfipbase_1.0.0.box", "checksum_type": "sha1", "checksum": "2fc11dcd75505e483a6ba1d1501216434e0e9d1b" }] }] }
Contrôler sur le client la version de la box
$ vagrant box outdated Checking if box 'demo/centos6' is up to date... A newer version of the box 'demo/centos6' for provider 'libvirt' is available! You currently have version '1.0.0'. The latest is version '1.0.1'. Run `vagrant box update` to update.
On peut ajouter maintenant plus de box avec différents fichiers JSON!