Vagrant - Créateur de VM

Documents pareils
VAGRANT POUR LES DÉVELOPPEURS

Gérer ses environnements de développement avec Vagrant RMLL 2012

Vade mecum installation et configuration d une machine virtuelle V5.1.0

Matrice snapshot Jacquelin Charbonnel ANF RNBM - Marseille, 23 mai 2013

Maintenance et gestion approfondie des Systèmes d exploitation Master 2 SILI. Année universitaire David Genest

Spécialiste Systèmes et Réseaux

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée VMWare ESX Server

INSTALLATION DEBIAN 7 (NETINSTALL) SUR VM

Virtual Box Mettez un PC dans votre... PC

Présentation Utilisation. VirtualBox. Firas Kraïem. 22 février 2014

Journée Josy/PLUME. Outils logiciels libres utiles à tout ASR SAMBA. Maurice Libes. Centre d'océanologie de Marseille UMS 2196 CNRS

Architecture de serveurs virtualisés pour la communauté mathématique

PROCEDURE ESX & DHCP LINUX

Les services de la PLM Mathrice. Et quelques outils de web-conférence

Serveur de partage de documents. Étude et proposition d'une solution afin de mettre en place un serveur de partage de documents.

Cisco Certified Network Associate

Virtualisation du poste de travail. Denis CASANOVA UFR Sciences & Technologies CUME - 29 Mars 2012

Machine virtuelle W4M- Galaxy : Guide d'installation

Les possibilités de paramétrage réseau des logiciels de virtualisation sont les suivantes quant à la connexion réseau :

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée VMWare ESX Server 3, 3.5

Les formations. Administrateur Systèmes et Réseaux. ENI Ecole Informatique

Réalisation d un portail captif d accès authentifié à Internet

Système Principal (hôte) 2008 Enterprise x64

Cours LG : Administration de réseaux et sécurité informatique. Dans les Paramètres Système onglet Processeur, le bouton "Activer PAE/NX"

Services RDS de Windows Server 2012 R2 Remote Desktop Services : Installation et administration

PPE 1 PRISE EN MAIN DE VMWARE VSPHERE 5.5 & CONFIGURATION D UNE MACHINE VIRTUELLE

Sauvegarde de postes clients avec BackupPC

Mise en place des TPs Réseau en machines virtuelles. Utilisation de VmPlayer

Authentification unifiée Unix/Windows

Mise en route d'une infrastructure Microsoft VDI

Travailler à l'ensimag avec son matériel personnel

Windows Serveur 2008

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

Armelin ASIMANE. Services RDS. de Windows Server 2012 R2. Remote Desktop Services : Installation et administration

contexte cahier des charges critères de choix fonctionnalités configuration en pratique Bilan Conclusion Backuppc Logiciel de sauvegarde

Table des matières. 1. Installation de VMware ESXI Pré-requis Installation... 3

VMware ESX/ESXi. 1. Les composants d ESX. VMware ESX4 est le cœur de l infrastructure vsphere 4.

Getting Started. 10 étapes pour bien démarrer. Avant de démarrer. Première connexion PCC

vsphere 5 TP2 La virtualisation avec VMware CNFETP F. GANGNEUX technologie GANGNEUX F. 17/12/2012

Grid 5000 : Administration d une infrastructure distribuée et développement d outils de déploiement et d isolation réseau

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée Virtual Server de Microsoft

Virtualisation CITRIX, MICROSOFT, VMWARE OLIVIER D.

Les différentes méthodes pour se connecter

Chapitre 2 : Abstraction et Virtualisation

Activité 1 : Création et Clonage d'une première machine virtuelle Linux OpenSuSE.

Projet VDI le futur poste de travail

Travailler à l'ensimag avec son matériel personnel

Date : NOM Prénom : TP n /5 ET ADMINISTRATION D'UN

Table des matières Page 1

Infrastructure RDS 2012

SUJET DES FINALES NATIONALES Sujet jour 1 version 1

Windows Server 2012 R2 Administration

Tour d horizon des différents SSO disponibles

Administration de Parc Informatique TP07 : Installation de Linux Debian

TP Déploiement de réseaux IP sous Linux et MS Windows sur une infrastructure virtualisée

Société TPA S.A.S. Servie Informatique TPA Metz Nord. 85, avenue de Thionville Woippy. L entreprise.

Adopter une approche unifiée en matière d`accès aux applications

Enoncé du TP 8 Système

VIDÉOSURVEILLANCE. Procédures de paramétrage des différentes box du marché

Le PLM. Azema, Charbonnel, Ferney, Le Cocq () La PLM Mars / 61

Service de Virtualisation de la DSI UJF

FreeNAS Shere. Par THOREZ Nicolas

Le Client/Serveur avec Enterprise Miner version 4

Automatisation de l administration système

Automatisation de l administration système avec

But de cette présentation. Bac à sable (Sandbox) Principes. Principes. Hainaut P

Installation de la plate-forme Liberacces 2.0 «Intégrale» avec LiberInstall

Service Cloud Recherche

NOUVEAUTES LINUX ITLA BY IMPACT TECHNOLOGIES

A Libre Ouvert. Médiathèque Jacques Ellul. le

LiveUSB clefisn. Meilland jean claude et Kbida Abdellatif. 16 septembre 2012

TP01: Installation de Windows Server 2012

EN Télécom & Réseau S Utiliser VMWARE

FileMaker Server 14. Guide de démarrage

Travailler à l'ensimag avec son matériel personnel

Module : Virtualisation à l aide du rôle Hyper-V

Les nouveautés d AppliDis Fusion 4 Service Pack 3

Installation et paramétrage de Fedora dans VirtualBox.

VPN. Réseau privé virtuel Usages :

Administration de systèmes

DESCRIPTION DU CONCOURS QUÉBÉCOIS INFORMATIQUE (GESTION DE RÉSEAUX)

Table des matières. 1. Installation de VMware ESXI Pré-requis Installation... 5

CREER UN ENREGISTREMENT DANS LA ZONE DNS DU DOMAINE

Contrôle distant par liaison SSH Christian Dupaty BTS Systèmes Numériques Lycée Fourcade Gardanne Académie d Aix Marseille

Présentation d HyperV

Réseau - VirtualBox. Sommaire

Services Réseaux - Couche Application. TODARO Cédric

Mise en place d un firewall d entreprise avec PfSense

Présentation OpenVZ. Marc SCHAEFER. 9 janvier 2009

MANUEL D INSTALLATION DE WATCHDOC 2011 (EVALUATION)

Gestion de parc Windows depuis Unix. Pascal Cabaud & Laurent Joly

Hands on Openstack : Introduction

Procédure pas à pas de découverte de l offre. Service Cloud Cloudwatt

La gestion du poste de travail en 2011 : Panorama des technologies

Nouvelles stratégies et technologies de sauvegarde

ECOLE POLYTECHNIQUE DSI. Utilisation des serveurs mandataires («proxy») avec les protocoles d usage courant

Terminal Server RemoteAPP pour Windows Server 2008

Chapitre 1 Windows Server

Transcription:

Vagrant - Créateur de VM Benoit Métrot benoit.metrot@math.univ-poitiers.fr UMR 7348 - Laboratoire de Mathématiques et Applications (Poitiers) Journée de veille technologique ARGOS Orsay, Décembre 2014 B. Métrot (UMR 7348) Vagrant 1 / 29

Plan 1 Introduction 2 Qu est ce que Vagrant? 3 Vagrant en pratique 4 Pour aller plus loin 5 Conclusion B. Métrot (UMR 7348) Vagrant 2 / 29

Progression 1 Introduction 2 Qu est ce que Vagrant? 3 Vagrant en pratique 4 Pour aller plus loin 5 Conclusion B. Métrot (UMR 7348) Vagrant 3 / 29

Le contexte Organisation d une action nationale de formation Titre : Les systèmes d authentification dans la communauté enseignement supérieur et recherche : étude, mise en œuvre et interfaçage dans un laboratoire de mathématique Partenaires : CNRS, INSMI, GDS Mathrice 50 participants Du 22 au 26 septembre 2014 à Angers Besoin d organiser des TPs Connexion réseau avec un débit relativement faible Pas de salle machine à disposition Diversité des OS installés sur les ordinateurs portables des participants http://anf2014.mathrice.fr B. Métrot (UMR 7348) Vagrant 4 / 29

Mathrice Un réseau de métier pour les informaticiens des laboratoires de Mathématiques Echange, entraide Formation Projets Des services en ligne à destination des chercheurs de la communauté Mathématique - Plateforme en Ligne Mathrice (PLM) Consultation de revues en ligne Messagerie électronique, Listes de diffusion Agendas partagés Disque internet (PLMbox) Webconférence... Un Groupement De Service (GDS) du CNRS (GDS 2754) http://www.mathrice.fr B. Métrot (UMR 7348) Vagrant 5 / 29

Organisation retenue Les participants apportent leur ordinateur portable Construction d un réseau filaire au sein de la salle de formation Intégration d un serveur DHCP DNS Mirroir Debian local Supports de cours et de TP (HTTP) Distribution de machines virtuelles aux participants B. Métrot (UMR 7348) Vagrant 6 / 29

Progression 1 Introduction 2 Qu est ce que Vagrant? 3 Vagrant en pratique 4 Pour aller plus loin 5 Conclusion B. Métrot (UMR 7348) Vagrant 7 / 29

Fonctionnalités Vagrant est un outil de construction d environnements de développement Création de machines virtuelles à partir de modèle (Box) Etablit les liens réseau entre les machines (réseau privé) et avec le monde extérieur (Internet) Définition des noms d hote et des adresses réseaux des machines virtuelles Mise en place d un dossier partagé entre la machine hôte et les machines virtuelles Personnalisation des machines virtuelles à partir d un script, d un programme Puppet ou Chef (Provisioning) B. Métrot (UMR 7348) Vagrant 8 / 29

Historique Projet initié en janvier 2012 par Mitchell Hashimoto Sortie de la version 1.0 en mars 2012 Création de HashiCorp en novembre 2012 Introduction du nouveau format de configuration en mars 2013 (v1.1+) Publication du livre Vagrant : UP and Running chez O Reilly en juin 2013 Sortie de la version 1.6.5 en mai 2014 B. Métrot (UMR 7348) Vagrant 9 / 29

Installation S installe sur : Pour construire des machines virtuelles : En s appuyant sur : B. Métrot (UMR 7348) Vagrant 10 / 29

Pourquoi virtualiser? Séparer les différents projets en cours Homogéniser les environnements de travail des développeurs d un projet Un environnement de développement n est pas un environnement de production Indépendance de l OS hôte de la machine Bugs Works on my machine B. Métrot (UMR 7348) Vagrant 11 / 29

Pourquoi automatiser? Avec une installation manuelle risque d oubli d un composant configuration pas forcément identique sur N machines long et fastidieux Passage à l échelle Accélérer le processus de mise en oeuvre Portage vers un environnement de production B. Métrot (UMR 7348) Vagrant 12 / 29

Principe de fonctionnement Abstraction du système de virtualisation Un seul fichier de configuration (Vagrantfile) Introduction d une unique commande vagrant pour tout piloter Création Allumage Mise en veille Extinction Ouverture de session Utilise des protocoles et outils existants (SSH, RDP...) B. Métrot (UMR 7348) Vagrant 13 / 29

Progression 1 Introduction 2 Qu est ce que Vagrant? 3 Vagrant en pratique 4 Pour aller plus loin 5 Conclusion B. Métrot (UMR 7348) Vagrant 14 / 29

Vos machines en 3 étapes 1 Installer Vagrant 2 Création d un unique fichier pour décrire Les machines à créer Les liens réseau Les logiciels à installer Les moyens par lesquels accéder à la machine 3 La commande vagrant up se charge du reste B. Métrot (UMR 7348) Vagrant 15 / 29

Vos machines en 3 étapes 1 Installer Vagrant 2 Création d un unique fichier pour décrire Les machines à créer Les liens réseau Les logiciels à installer Les moyens par lesquels accéder à la machine 3 La commande vagrant up se charge du reste B. Métrot (UMR 7348) Vagrant 15 / 29

Vos machines en 3 étapes 1 Installer Vagrant 2 Création d un unique fichier pour décrire Les machines à créer Les liens réseau Les logiciels à installer Les moyens par lesquels accéder à la machine 3 La commande vagrant up se charge du reste B. Métrot (UMR 7348) Vagrant 15 / 29

Commande vagrant vagrant up vagrant suspend vagrant resume vagrant halt [ -f ] vagrant status Construit et démarre les machines définies dans le fichier de configuration Vagrantfile Place en pause l ensemble des VM Réveille les machines virtuelles qui ont été placées en pause avec vagrant suspend Arrête (éteint) les machines virtuelles via un signal ACPI (arrêt logiciel). L option -f permet de forcer l arrêt Affiche l état des machines virtuelles Toutes ces commandes peuvent être suffixées par le nom d une machine virtuelle. Dans ce cas l action s applique uniquement à la machine spécifiée. B. Métrot (UMR 7348) Vagrant 16 / 29

Commande vagrant vagrant up vagrant suspend vagrant resume vagrant halt [ -f ] vagrant status Construit et démarre les machines définies dans le fichier de configuration Vagrantfile Place en pause l ensemble des VM Réveille les machines virtuelles qui ont été placées en pause avec vagrant suspend Arrête (éteint) les machines virtuelles via un signal ACPI (arrêt logiciel). L option -f permet de forcer l arrêt Affiche l état des machines virtuelles Toutes ces commandes peuvent être suffixées par le nom d une machine virtuelle. Dans ce cas l action s applique uniquement à la machine spécifiée. B. Métrot (UMR 7348) Vagrant 16 / 29

Accès aux machines 1 Avec SSH Commande : vagrant ssh <mavm> Ouvre un shell SSH sur la machine mavm avec l utilisateur vagrant Nécessite d avoir un client SSH définit dans le PATH et un service SSH fonctionnel sur la VM 2 Avec RDP Commande : vagrant rdp <mavm> Ouvre une session bureau à distance sur la machine mavm avec l utilisateur vagrant Nécessite de disposer d un client bureau à distance sur la machine hote et un service RDeskop sur la VM 3 Dossier partagé Le répertoire courant (d où sont lancés les commandes vagrant) sur la machine hôte est partagé avec le /vagrant de chaque VM Exemple : /home/user /vagrant B. Métrot (UMR 7348) Vagrant 17 / 29

Fichier de configuration : Vagrantfile # Vagrantfile API/syntax version. Don t touch unless you know what you re doing! VAGRANTFILE_API_VERSION = "2" box_repo = "file:///home/myname/boxes/" Vagrant.configure(VAGRANTFILE_API_VERSION) do config config.vm.define "linux1" do linux1 linux1.vm.box = "debian7" linux1.vm.box_url = "#{box_repo}/debian_wheezy.box" linux1.vm.network "private_network", ip: "172.16.20.10" linux1.vm.network "public_network" linux1.vm.provision "shell", path: ".vagrant.d/provisionning/apache.sh" end config.vm.define "linux2", autostart: false do linux2 linux2.vm.box = "debian7" linux2.vm.box_url = "#{box_repo}/debian_wheezy.box" linux2.vm.network "private_network", ip: "172.16.20.20" linux2.vm.provision "shell", path: ".vagrant.d/provisionning/desktop.sh" end config.vm.define "windows7", autostart: false do windows7 windows7.vm.box = "win7" windows7.vm.box_url = "#{box_repo}/windows_seven.box" windows7.vm.network "private_network", ip: "172.16.20.30" windows7.vm.communicator = "winrm" windows7.vm.network "forwarded_port", guest: 3389, host_ip: "127.0.0.1", host: 8902, protocol: "tcp" end end B. Métrot (UMR 7348) Vagrant 18 / 29

Vagantfile : syntaxe globale # Vagrantfile API/syntax version. Don t touch unless you know what you re doing! VAGRANTFILE_API_VERSION = "2" Définition de la version du fichier de configuration box_repo = "file:///home/myname/boxes/" Définition d une variable, c est du Ruby! Vagrant.configure(VAGRANTFILE_API_VERSION) do config Début de la section de configuration config.vm.define "linux2", autostart: false do linux2 linux2.vm.box = "debian7" linux2.vm.box_url = "#{box_repo}/debian_wheezy.box" linux2.vm.network "private_network", ip: "172.16.20.20" linux2.vm.provision "shell", path: ".vagrant.d/provisionning/desktop.sh" end Un bloc par machine virtuelle à construire B. Métrot (UMR 7348) Vagrant 19 / 29

Vagantfile : syntaxe globale # Vagrantfile API/syntax version. Don t touch unless you know what you re doing! VAGRANTFILE_API_VERSION = "2" Définition de la version du fichier de configuration box_repo = "file:///home/myname/boxes/" Définition d une variable, c est du Ruby! Vagrant.configure(VAGRANTFILE_API_VERSION) do config Début de la section de configuration config.vm.define "linux2", autostart: false do linux2 linux2.vm.box = "debian7" linux2.vm.box_url = "#{box_repo}/debian_wheezy.box" linux2.vm.network "private_network", ip: "172.16.20.20" linux2.vm.provision "shell", path: ".vagrant.d/provisionning/desktop.sh" end Un bloc par machine virtuelle à construire B. Métrot (UMR 7348) Vagrant 19 / 29

Vagantfile : syntaxe globale # Vagrantfile API/syntax version. Don t touch unless you know what you re doing! VAGRANTFILE_API_VERSION = "2" Définition de la version du fichier de configuration box_repo = "file:///home/myname/boxes/" Définition d une variable, c est du Ruby! Vagrant.configure(VAGRANTFILE_API_VERSION) do config Début de la section de configuration config.vm.define "linux2", autostart: false do linux2 linux2.vm.box = "debian7" linux2.vm.box_url = "#{box_repo}/debian_wheezy.box" linux2.vm.network "private_network", ip: "172.16.20.20" linux2.vm.provision "shell", path: ".vagrant.d/provisionning/desktop.sh" end Un bloc par machine virtuelle à construire B. Métrot (UMR 7348) Vagrant 19 / 29

Vagantfile : syntaxe globale # Vagrantfile API/syntax version. Don t touch unless you know what you re doing! VAGRANTFILE_API_VERSION = "2" Définition de la version du fichier de configuration box_repo = "file:///home/myname/boxes/" Définition d une variable, c est du Ruby! Vagrant.configure(VAGRANTFILE_API_VERSION) do config Début de la section de configuration config.vm.define "linux2", autostart: false do linux2 linux2.vm.box = "debian7" linux2.vm.box_url = "#{box_repo}/debian_wheezy.box" linux2.vm.network "private_network", ip: "172.16.20.20" linux2.vm.provision "shell", path: ".vagrant.d/provisionning/desktop.sh" end Un bloc par machine virtuelle à construire B. Métrot (UMR 7348) Vagrant 19 / 29

Vagantfile : définition d une machine (1) linux1.vm.box = "debian7" Le nom de la machine virtuelle linux1.vm.box_url = "#{box_repo}/debian_wheezy.box" Emplacement où prendre le modèle (box de machine à utiliser pour la création (URL possible)) linux1.vm.network "public_network" Ajout d une interface réseau avec pont sur l interface physique de la machine hôte linux1.vm.network "private_network", ip: "172.16.20.10" Réseau privé entre les machines virtuelles B. Métrot (UMR 7348) Vagrant 20 / 29

Vagantfile : définition d une machine (1) linux1.vm.box = "debian7" Le nom de la machine virtuelle linux1.vm.box_url = "#{box_repo}/debian_wheezy.box" Emplacement où prendre le modèle (box de machine à utiliser pour la création (URL possible)) linux1.vm.network "public_network" Ajout d une interface réseau avec pont sur l interface physique de la machine hôte linux1.vm.network "private_network", ip: "172.16.20.10" Réseau privé entre les machines virtuelles B. Métrot (UMR 7348) Vagrant 20 / 29

Vagantfile : définition d une machine (1) linux1.vm.box = "debian7" Le nom de la machine virtuelle linux1.vm.box_url = "#{box_repo}/debian_wheezy.box" Emplacement où prendre le modèle (box de machine à utiliser pour la création (URL possible)) linux1.vm.network "public_network" Ajout d une interface réseau avec pont sur l interface physique de la machine hôte linux1.vm.network "private_network", ip: "172.16.20.10" Réseau privé entre les machines virtuelles B. Métrot (UMR 7348) Vagrant 20 / 29

Vagantfile : définition d une machine (1) linux1.vm.box = "debian7" Le nom de la machine virtuelle linux1.vm.box_url = "#{box_repo}/debian_wheezy.box" Emplacement où prendre le modèle (box de machine à utiliser pour la création (URL possible)) linux1.vm.network "public_network" Ajout d une interface réseau avec pont sur l interface physique de la machine hôte linux1.vm.network "private_network", ip: "172.16.20.10" Réseau privé entre les machines virtuelles B. Métrot (UMR 7348) Vagrant 20 / 29

Vagantfile : définition d une machine (2) linux2.vm.provision "shell", path: ".vagrant.d/provisionning/desktop.sh" Script de personnalisation de la machine virtuelle windows7.vm.network "forwarded_port", guest: 3389, host_ip: "127.0.0.1", host: 8902, protocol: "tcp" Redirection de port entre VM et machine hote autostart: false Pour ne pas créer/allumer la machine lors d un vagrant up B. Métrot (UMR 7348) Vagrant 21 / 29

Vagantfile : définition d une machine (2) linux2.vm.provision "shell", path: ".vagrant.d/provisionning/desktop.sh" Script de personnalisation de la machine virtuelle windows7.vm.network "forwarded_port", guest: 3389, host_ip: "127.0.0.1", host: 8902, protocol: "tcp" Redirection de port entre VM et machine hote autostart: false Pour ne pas créer/allumer la machine lors d un vagrant up B. Métrot (UMR 7348) Vagrant 21 / 29

Vagantfile : définition d une machine (2) linux2.vm.provision "shell", path: ".vagrant.d/provisionning/desktop.sh" Script de personnalisation de la machine virtuelle windows7.vm.network "forwarded_port", guest: 3389, host_ip: "127.0.0.1", host: 8902, protocol: "tcp" Redirection de port entre VM et machine hote autostart: false Pour ne pas créer/allumer la machine lors d un vagrant up B. Métrot (UMR 7348) Vagrant 21 / 29

Progression 1 Introduction 2 Qu est ce que Vagrant? 3 Vagrant en pratique 4 Pour aller plus loin 5 Conclusion B. Métrot (UMR 7348) Vagrant 22 / 29

Où trouver des boxes? https://vagrantcloud.com/discover/featured http://www.vagrantbox.es/ http://puppet-vagrant-boxes.puppetlabs.com/ B. Métrot (UMR 7348) Vagrant 23 / 29

Créer sa boîte Créer une nouvelle machine dans VirtualBox Paramètrages spécifiques (Linux) Création d un utilisateur vagrant avec un mot de passe vagrant Autorisation de l utilisateur vagrant dans sudo Ajout des outils VirtualBox Mise en oeuvre du service SSH ou RDP Nettoyage du système (fichiers temporaires, caches) vagrant package base <mavm-vbox> Quelques recettes : Debian 7 http://anf2014.mathrice.fr/box-wheezy.html Fedora 20 http://anf2014.mathrice.fr/box-fedora20.html Windows 7 http://anf2014.mathrice.fr/box-windows7.html Windows Serveur 2012 R2 http://anf2014.mathrice.fr/box-windows2012r2.html B. Métrot (UMR 7348) Vagrant 24 / 29

Providers Définition Le Provider est un composant logiciel inclus dans Vagrant qui a en charge l interface entre Vagrant et le système de virtualisation sous-jacent. D origine Vagrant est fournit avec le Provider pour VirtualBox, mais d autres sont disponibles VMWare Hyper-V Docker B. Métrot (UMR 7348) Vagrant 25 / 29

Progression 1 Introduction 2 Qu est ce que Vagrant? 3 Vagrant en pratique 4 Pour aller plus loin 5 Conclusion B. Métrot (UMR 7348) Vagrant 26 / 29

Conclusion Utilisation facile Rapidité de déploiement et duplication d un environnement Accès automatique des VMs à Internet Idéal pour la construction : de maquettes de plateforme de tests d environnements de développement Attention aux licences des systèmes virtualisés Dans le provisionnement définir un maximum de choses statiquement Factoriser les scripts de provisioning B. Métrot (UMR 7348) Vagrant 27 / 29

Vos questions... B. Métrot (UMR 7348) Vagrant 28 / 29

A vous de jouer... B. Métrot (UMR 7348) Vagrant 29 / 29