• Aucun résultat trouvé

Gestion Automatique d'Environnement Virtuel (GAEV)

N/A
N/A
Protected

Academic year: 2021

Partager "Gestion Automatique d'Environnement Virtuel (GAEV)"

Copied!
41
0
0

Texte intégral

(1)

HAL Id: hal-03192628

https://hal.archives-ouvertes.fr/hal-03192628

Submitted on 8 Apr 2021

HAL is a multi-disciplinary open access archive for the deposit and dissemination of sci-entific research documents, whether they are pub-lished or not. The documents may come from teaching and research institutions in France or abroad, or from public or private research centers.

L’archive ouverte pluridisciplinaire HAL, est destinée au dépôt et à la diffusion de documents scientifiques de niveau recherche, publiés ou non, émanant des établissements d’enseignement et de recherche français ou étrangers, des laboratoires publics ou privés.

Gestion Automatique d’Environnement Virtuel (GAEV)

Loic Houde, Daniel Jacob, Tovo Rabemanantsoa, Jean-François Rey

To cite this version:

Loic Houde, Daniel Jacob, Tovo Rabemanantsoa, Jean-François Rey. Gestion Automatique d’Environnement Virtuel (GAEV). [Autre] INRAE. 2021. �hal-03192628�

(2)

GAEV

(Gestion Automatique d’Environnement Virtuel)

Rapport / Bilan - Année 2020

Le 07/04/2021

Auteurs

Loic Houde | CATI IMOTEP Daniel Jacob | CATI PROSODie

Tovo Rabemanantsoa | CATI PROSODie

(3)

Introduction 3

Présentation du projet 3

Phases de travail 6

Phase 1 : Outils et Technologies 6

Phase 2 : Cas d’usages (use-cases) 10

Use-case Générique 10 Exemples de use-cases 11 Retours d'expériences 14 Conclusion 16 Perspectives 17 Remerciements 18 ANNEXES 19

Annexe A : Tableaux synthétisant les recherches sur la veille technologique 20

Annexe B : Cas d’utilisation 24

B1: Use-Case : JupyterHub 24

B2: Automatisation de la création et du partage d’un environnement sous R 38

(4)

Introduction

De nos jours, le partage d’applications scientifiques est indispensable mais cela reste parfois très compliqué. Effectivement une application scientifique impliquant un ou plusieurs outils informatiques n’est pas forcément facile à stocker, à trouver, à installer et à utiliser. Ce projet a pour but de montrer qu’il est possible d’élaborer une infrastructure permettant de faciliter cela en automatisant le maximum de choses et en utilisant des environnements virtuels.

De ce fait, le projet GAEV (Gestion Automatique d’Environnement Virtuel) vise à établir une preuve de concept (POC) d’une infrastructure logicielle permettant de créer, configurer, référencer et stocker à la demande des environnements sous forme de machines virtuelles lourdes déployables à multiple échelle.

La finalité d’un tel projet est de faciliter la mise à disposition d’applications scientifiques préinstallées et configurées sur des machines virtuelles référencées. Cela s’inscrit dans une démarche qualité de science ouverte pour le partage et la reproductibilité tout en s’appuyant sur les principes FAIR.

Présentation du projet

Cadre

Ce projet est soutenu par laDipSO1dans la cadre d’appel à projet 2020. Il a été proposé

par et réunit quatre ingénieursINRAE2des CATIsIMOTEP3etPROSODie4:

● Loic Houde ● Daniel Jacob

● Tovo Rabemanantsoa

● Jean-François Rey (porteur du projet)

Ce projet se déroule sous la direction des co-animateurs du CATI IMOTEP Thierry Hoch et Hervé Richard et du directeur d’unité deBioSP5Samuel Soubeyrand.

Contexte

Ce projet souhaite mettre en place un service de Gestion Automatique d’Environnement Virtuel à la demande dans le cadre de l’amélioration, de l’intégration et de la livraison continue des productions développées par nos chercheurs et collègues INRAE, ainsi que nos

5https://informatique-mia.inrae.fr/biosp/ 4https://prosodie.cati.inrae.fr/

3https://imotep.inrae.fr/ 2https://www.inrae.fr/

(5)

collaborateurs extérieurs et des différents CATIs. De tels environnements disponibles à différents niveaux (applicatif, développement, tests et production) permettraient une diffusion plus rapide, de qualité et une meilleure accessibilité des projets open sources développés par notre communauté scientifique. Cela intervient aussi dans un dispositif qui vise à faciliter la reproductibilité scientifique grâce à des environnements contrôlés, identifiés et réutilisables. Plus concrètement, cette étude s’inscrit dans une démarche pour faciliter la mise à disposition et le partage d’applications nécessitant de fonctionner sur une machine virtuelle (VM), c.à.d. que l’application ne fonctionne pas sous le système d’exploitation (OS) de l'hôte, mais fonctionne sous un système d’exploitation spécifique (en mode virtuel) nécessitant un accès à l’interface pour l’utilisateur.

La génération automatique de ces environnements (applications, outils de développement et de tests) doit faciliter l’intégration et la livraison continue des productions informatiques scientifiques nécessitant des environnements divers, variés et reproductibles. L’infrastructure permettrait également le stockage, la description et le référencement des environnements générés.

Conceptualisation

Le projet dans sa globalité, voudrait mettre à disposition un site web pour créer, configurer, déposer et référencer des machines virtuelles (VM) sous différentes couches de virtualisation (providers) et pour différents systèmes d’exploitations (OS), lesdites machines virtuelles embarquant des applications scientifiques préinstallées et configurées.

Du point de vue des chercheurs cela faciliterait la création, la gestion et la reproductibilité d’une VM contenant leurs applications et du point de vue utilisateur cela permettrait la recherche, le téléchargement de la VM et l’utilisation des applications scientifiques.

Pour réaliser ce POC, trois couches ont été identifiées :

1. Création des VMs (providers + OS VMs + provisioning)

2. Stockage et indexation (site web, infrastructure de stockage, ...) 3. Instanciation des VMs (ordinateur, cloud, ...)

(6)

Dans les parties qui suivent nous allons aborder ces trois couches, tout particulièrement les couches ‘Création’ et ‘Instanciation’. La couche ‘Stockage’ sera abordée plus comme perspective pouvant servir de base pour une version 2 du projet.

(7)

Phases de travail

Une première phase du POC a consisté à identifier des solutions/technologies existantes qui pouvaient nous être utiles et répondant aux critères énoncés ci-après.

Dans une deuxième phase, nous avons effectué des tests sous forme de cas d’utilisations (use-cases) pour valider nos choix. Les use-cases sélectionnés doivent servir à illustrer des situations typiques potentiellement rencontrées par les scientifiques et ingénieurs souhaitant faire fonctionner des applications impliquant un environnement logiciel complexe non disponible sur leur environnement habituel (par exemple : PC sous Windows et application scientifique sous Linux).

Phase 1 : Outils et Technologies

Veille technologique

Pour accomplir ce projet et avant toute réalisation, une veille technologique sur les outils existants a été établie afin d’identifier les outils les plus pertinents… Nos critères de recherches pour ces outils ont été de préférence : libres, open sources et possédants une forte communauté. Plus précisément, ces outils devaient nous permettre de créer, modifier, configurer, instancier et stocker des machines virtuelles (VM) et permettre leurs indexations et reproductions à l'identique.

Vous pouvez trouver en annexes les tableaux résumant les principales recherches effectuées. (outils,virtualisations,clouds)

Il ressort un concept important ; les “Providers” : Il s’agit des outils logiciels permettant d’instancier (faire tourner) une machine virtuelle. Ils permettent de simuler des ressources informatiques matérielles quelle que soit la machine physique sur laquelle ils fonctionnent. Cette émulation plus couramment appelée Virtualisation, peut intervenir au niveau matériel et l’on parlera alors de virtualisation de type 1 (ex : Hyper-V, VMware ESX, Proxmox), ou au niveau de l’OS de la machine hôte et dans ce cas on parlera de virtualisation de type 2 (ex : VirtualBox, VMware Workstation).

(8)

Le concept de provider est un peu plus élargi suivant son contexte et il peut inclure parfois des services de virtualisation de type cloud, qui offrent une couche d'abstraction de la partie virtualisation en fournissant (via leurs interfaces de programmation d’applications API) des instances de machines virtuelles déjà prêtes et configurées.

Nos choix

Nos investigations se sont arrêtées sur trois principaux outils : Packer6, Vagrant7 et

Ansible8. Tous les trois disposent d’une forte communauté d’utilisateurs et ils sont tous open

source et libres d’utilisation. Il est à noter que Ansible est disponible sous licence GPL et les deux autres sous licence MIT. Ils exploitent les concepts de

IaC

(Infrastructure as Code) c'est-à-dire qu’ils utilisent un ou des fichiers (Templates) lisibles par l’humain et la machine afin d’automatiser la gestion et la configuration de machine.

Packer et Vagrant sont des outils développés parHashicorp9et sont complémentaires.

Packer permet de créer des images de machines identiques pour de multiples providers à partir d’images au format ISO. Construire de telles images (appelée VM de base ou base box10) est très utile s’il n’existe pas déjà de base box répondant à vos besoins ou si vous voulez

maîtriser le contenu de votre VM.

Vagrant permet de manipuler ces images pour les configurer, les provisionner (avec Ansible, cf ci-après) et les instancier. Ces images sont appelées “boxes” dans l'environnement Vagrant.

Avec ces deux outils, on dispose d’un très bon moyen de mettre au point et de diffuser des environnements de travail, et ce, de manière reproductible. Ils permettent donc d’éviter le syndrome “It works on my machine”.

10https://www.vagrantup.com/docs/boxes/base.html 9https://www.hashicorp.com/about

8https://www.ansible.com/ 7https://www.vagrantup.com/ 6https://www.packer.io/

(9)

Ansible, développé par Red Hat11, est un outil de gestion de la configuration qui

automatise l'installation, le déploiement, l'exécution des tâches et la gestion de la configuration sur plusieurs machines en même temps. Plus précisément pour notre utilisation, il sert à alimenter la machine virtuelle (provisioning) avec des outils systèmes et/ou applicatifs selon les fichiers de définition (appelés rôles).

Ces trois outils nous permettent de créer, modifier, configurer et instancier automatiquement et de manière reproductible des machines virtuelles.

Pour ce qui est de l’indexation et du stockage nous n’avons pas trouvé de solution existante clé en main. Mais nous avons testé / exploré quelques solutions. La plus simple pour le stockage est d’utiliser Vagrant Cloud12 qui permet de stocker les images (boxes) et le

référencement (indexation) par type de provider. C’est d’ailleurs cette solution que nous utilisons pour stocker les images créées par Packer (appelées des “base boxes”) et qui facilitent leurs utilisations dans Vagrant.

Une autre possibilité testée est le stockage via l’API S3 d’openstack13de l’institut14et de

genouest15 ou le téléchargement au sein d’une librairie d’images instanciables par openstack

via l’APISwift/nova16. Possibilité qui nous permet d'héberger les machines virtuelles dans des

infrastructures de recherche nationales.

16https://docs.openstack.org/swift/queens/overview_backing_store.html 15https://www.genouest.org/ 14https://cloud.inrae.fr 13https://www.openstack.org/ 12https://app.vagrantup.com/GAEV 11https://www.redhat.com

(10)

Une troisième solution non explorée encore serait d’envisager une collaboration avec l’Institut Français de Bioinformatique17 (IFB) afin d’étendre les fonctionnalités de leur catalogue

RANBio de Biophere18 pour permettre le dépôt, le référencement et le téléchargement de VM,

voire leur instanciation sur le cloud de l’IFB.

L’indexation et le référencement sont encore en cours d’investigation pour conceptualiser une des solutions.

Pour les besoins du POC et le fait que nous ayons un accès restreint à différents types de providers, nous avons choisi de réaliser ce POC en utilisant le providerVirtualBox19(type 2),

qui nous permet de travailler sans restriction de format d’image sous des machines virtuelles avec des OS différents (UNIX-like, Windows et MacOS). De plus, VirtualBox est facilement utilisable autant sur un ordinateur standard que sur un serveur.

Le POC est facilement portable sur d’autres providers car ces derniers partagent les mêmes formats20 et/ou ces derniers sont convertissables entre eux à l’aide d’outil comme

qemu-img21.

21https://www.qemu.org/docs/master/interop/qemu-img.html

20Format standard example: Open Virtualization Archive (OVA), Virtual Machine Disk (VMDK), Virtual Hard Disk (VHD/VHDX), Open Virtualization Format (OVF)

19https://www.virtualbox.org/

18https://biosphere.france-bioinformatique.fr/catalogue/ 17https://www.france-bioinformatique.fr/

(11)

Phase 2 : Cas d’usages (use-cases)

Dans cette partie, après une description d’un use-case générique pour obtenir une VM partageable, nous présentons différents use-cases réalisés avec ces outils.

Use-case Générique

Construction d’une “VM finale” (Final box) pour partager une application ou une boîte à outils

Dans la plupart des cas, Vagrant est utilisé à partir d’une “VM de base” (base box) telle que celles que l’on peut trouver sur https://app.vagrantup.com/boxes/search. Mais Il peut être intéressant de constituer sa propre base box, par exemple :

● si vous voulez maîtriser le contenu de votre VM (c’est parfois une question de sécurité ou de taille limite des disques autorisée sur les services clouds) ;

● s’il n’existe pas déjà de base box répondant à vos besoins ;

● si le provisioning de votre box est long (compilation de paquets, téléchargements volumineux…) ;

● si vous voulez fixer une version exacte de votre environnement (pour ne pas dépendre d’un update, par exemple).

Les VM de base générées pour le projet se trouvent sur le compte GAEV de Vagrant Cloud :https://app.vagrantup.com/GAEV

(12)

Description des étapes à suivre

1. Choix d’une “VM de base” (Base box) préconfigurée pour le pipeline. a. Critères du choix => (OS + Provider)

i. Couche de virtualisation (provider, ex : VirtualBox, VMware, KVM, HyperV, ...)

ii. OS ciblé (Windows, Linux, Mac)

b. Absence de VM de base (c.à.d conforme aux spécifications requises) :

i. Construire la VM avec Packer (local) en partant d’un fichier ISO (OS) puis à l’aide d’un template (box-config.json) et d’un fichier de configuration de la VM (kickstart file) spécifique à la couche de virtualisation (provider) choisie.

ii. Déposer éventuellement la VM ainsi construite sur Vagrant Cloud (push). c. Disponibilité de la VM de la base

i. Téléchargement depuis Vagrant Cloud (pull)

2. Construction de la VM finale (Final box) à partir de la VM de base (Base box) a. Étape 1 : Construction du playbook d’Ansible

i. Ensemble des procédures concernant la configuration et l’installation des différents composants systèmes et/ou logiciels, décrites en Yaml (roles +

vars)

ii. Les procédures s’appliquent soit sur des éléments logiciels en ligne (repositories), soit sur des éléments logiciels (scripts, données, …) fournis par le créateur de la VM.

b. Étape 2 : Création du template de Vagrant (Vagrantfile) i. Configurer les caractéristiques de la VM

ii. Appliquer l’ensemble des procédures décrites par Ansible (roles + vars) 3. Utilisation de la VM finale (Final box)

a. Utilisation sur son instance locale de virtualisation (ex VirtualBox). b. Partage via un stockage (Vagrant Cloud ou stockage type S3)

c. Instanciation de l’image de la VM chez un fournisseur (type openstack, par ex genouest.org) / accès via https

Exemples de use-cases

Use-cases

- JupiterHub (configuré avec différents packages/environnement de travail) peut être spécialisé. Accessible aux chercheurs, TP écoles chercheurs, autres formations, ... - NMRProcFlow : Application fournie sous forme de conteneur (Docker)

- Automatisation de la création et du partage d’un environnement sous R : Intégration Continue / Distribution Continue pour les développeurs et utilisateurs R sous différents OS.

(13)

Sources

Les codes sources sont disponibles sur la Forge MathNUM dans le groupe de travail GAEV : - https://forgemia.inra.fr/gaev.

Use-Case : JupyterHub

JupyterHub22 apporte la puissance des Jupyter notebook à des groupes d'utilisateurs. Il

permet aux utilisateurs d'accéder à des environnements et des ressources de calcul sans leur imposer de tâches d'installation et de maintenance. Les utilisateurs - y compris les étudiants, les chercheurs et les spécialistes des données - peuvent effectuer leurs travaux dans leurs propres espaces de travail sur des ressources partagées qui peuvent être gérées efficacement par les administrateurs du système. En effet, à partir d'un compte administrateur depuis l'interface web, on peut administrer la gestion des utilisateurs. JupyterHub fonctionne dans le cloud ou sur votre propre PC et permet de servir un environnement scientifique de données préconfiguré à n'importe quel utilisateur dans le monde. Il est personnalisable et évolutif, et convient aux petites et grandes équipes, aux cours universitaires et aux infrastructures à grande échelle.

Construction / Configuration d'une machine virtuelle

● On doit pouvoir choisir ses modules R et Python (par catégories ; ex biostatistics, data processing, ...)

● En utilisation locale, on doit pouvoir avoir accès à un répertoire partagé sur son disque ● En utilisation cloud (par ex : openstack), on doit pouvoir avoir accès via SCP (WinSCP23,

Cyberduck24) au répertoire de partage commun à tous les utilisateurs afin d'y télécharger

des fichiers de données, des scripts, etc … EnAnnexe B1 sont présentées les différentes étapes.

Use-Case : automatisation de la création d’un environnement sous R

Ce use-case vise à automatiser la création et le partage d’une VM avec l’environnement R pré-installé et configuré en utilisant l’intégration continue sous GitLab. Cela afin de disposer de VMs sous différents OS avec un environnement R clé en main et assurer une qualité des livrables (les VMs).

Le logiciel de programmation R et son environnement est un outil très utilisé dans la communauté scientifique, que ce soit pour effectuer des analyses sur des données en statistique et mathématique ou bien le partage de package R contenant tous types de développement (modèles, outils, données, …). La difficulté d’homogénéité du logiciel suivant le système d’exploitation utilisé, rend parfois difficile le partage de modèle et des packages.

24https://cyberduck.io/

23https://winscp.net/eng/index.php 22https://jupyter.org/hub

(14)

L’automatisation vise à faciliter le partage d’une machine virtuelle contenant l’environnement R préinstallé et configuré pour permettre :

- aux scientifiques d’installer leurs scripts R et packages facilement, - de reproduire à l’identique un environnement (clé en main),

- de partager cette VM avec la communauté,

- de mettre à disposition aux développeurs un environnement propre, - d’utiliser cette VM comme GitLab-Runner pour l'intégration continue, - permettre l'utilisation de la VM sur son PC ou sur un serveur.

Deux use-cases (l’un sous Windows et l’autre sous MacOS) sont disponibles pour le projet aux adresses suivantes :

- https://forgemia.inra.fr/gaev/usecases/windowsr

- https://forgemia.inra.fr/gaev/usecases/macosr

(15)

Retours d'expériences

Création et Provision

La création automatique de VM a été mise en œuvre par un grand nombre d’outils éprouvés et de ressources disponibles en ligne sur lesquels nous avons pu nous appuyer. L'outil Ansible facilite grandement le provisioning pour les OS Linux-like. Néanmoins, certains paramètres ou fonctionnalités restent très spécifiques à Windows ou à MacOS, ce qui ne permet pas une automatisation générique.

Performance

Les machines virtuelles sous virtualbox ont un format standard qui permet de pouvoir les instancier sous différents providers. Faire tourner une VM sur une VM d’un hyperviseur (ex : proxmox -> VM virtualbox -> ma VM) même avec le modenested virtualization activé, offre de faible performance. Effectivement trop de couches de virtualisation engendrent de faibles performances. Permettre la création depuis une machine physique est la meilleure solution et pour l’instanciation sur une machine local ou via un hyperviseur (proxmox ou vmware) fonctionne très bien.

Stockage

Les boxes (VM) créés peuvent être très volumineuses, de 1Go à 100Go suivant leur OS et configuration. Pour utiliser une box, il faut la télécharger, ce qui peut être parfois long. Il faut ensuite l’instancier, ce qui augmente l’espace nécessaire à chaque nouvelle instanciation. En local, on peut très vite se retrouver avec le disque dur plein. Les solutions de stockage Vagrant Cloud ou S3 sont adaptées pour du stockage sur le long terme, mais là aussi il faut qu’il y ait beaucoup d’espace disponible.

Environnement

Il est impératif de bien connaître l'environnement d'instanciation de la VM lors de sa phase de configuration et de provisioning. En effet, si l'on souhaite faire tourner la VM en local sur un PC, il est judicieux que la machine puisse avoir accès aux disques locaux en mode partagé. Il faut prévoir l'installation des pilotes appropriés au niveau de la couche de virtualisation. Dans le cas d'une utilisation sur un cloud, un outil de configuration lors du démarrage de la VM commecloud-init25 devra être installé sur la machine lors du provisioning.

De même, la configuration du réseau (choix d'une adresse IP fixe ou en mode DHCP) devra tenir compte de l'environnement. Il est bon aussi de savoir qu'une machine instanciée sur un

(16)

cloud ne connaîtra ni son numéro IP ni son nom complet. Aussi, il faudra prévoir des scripts lors du son démarrage pour configurer les applications qui nécessitent de connaître leur URL externe (Base URL). Enfin la gestion des clés de sécurité (insecure private keys), des comptes utilisateurs et de leurs privilèges doivent faire parties des préoccupations lors de l’étape de provisioning.

(17)

Conclusion

Le projet a bien avancé malgré la crise sanitaire (ce qui nous a empêchés de nous réunir physiquement) et le calendrier a pu quand même être respecté pour les livrables. L’ampleur du PoC, le nombre de participants et les contraintes d’emploi du temps de chacun, nous ont permis de réaliser les deux tiers.

L’automatisation de la création, de la configuration, du stockage et de l’instanciation de VMs sous Virtualbox nous a permis de démontrer la faisabilité, surtout avec les moyens dont nous disposons (un remerciement à la DSI INRAE pour la mise à disposition d’espace de stockage et GenOuest pour l'accès à leur openstack).

La partie référencement (indexation et métadonnées) reste à étudier et à réaliser pour terminer ce PoC ; partie qui sera discutée dans les perspectives pour une prolongation du projet.

Pour conclure, nous avons démontré qu’il est possible de gérer des environnements virtuels automatiquement pour permettre leurs partages à la communauté avec des outils scientifiques préinstallés et configurés, et ce, de manière reproductible.

(18)

Perspectives

Les suites qui pourraient être apportées au projet sont de deux ordres : ● Continuer le projet pour le réaliser dans sa globalité.

● Participer à des Retours d’EXpériences (REX) et/ou formations/ateliers avec nos confrères.

Pour continuer ce projet voici deux grandes étapes à réaliser :

● Priorité 1 : L’étude et la réalisation de la partie référencements.

○ Cette partie pourrait consister au développement d’un site-web pour permettre le stockage avec référencement unique (PID) et l’indexation via des métadonnées des VMs.

○ Cette partie peut aussi être effectuée via des collaborations avec des plateformes tel que l’IFB (Biosphère/RAMbio)

● Priorité 2 : Faire évoluer le site web et les pipelines sous-jacents pour permettre la gestion automatique des environnements virtuels, c.à.d. le POC actuel intégré dans le site web pour permettre l'automatisation de la création, de la configuration, du stockage, de l’indexation et du partage en click bouton. Cela pourrait ressembler au site web

https://phansible.com/

Il est à noter qu’une collaboration avec le projetCSAN26(Comprehensive software

archive network) pourrait être envisagée sur des parties communes comme les métadonnées, la mise en place du site web (dépôts référencé).

Dans tous les cas, pour rendre ce projet pérenne, un soutien tant financier que moral sera nécessaire afin de maintenir la motivation et l’implication des participants à la hauteur des ambitions souhaitées par l’institut.

(19)

Remerciements

Nous tenons à remercier tout particulièrement la DipSO pour son engagement à soutenir ce projet (moralement et financièrement), qui sans celui-ci n’aurait jamais vu le jour.

Ainsi que les animateurs des CATI IMOTEP et PROSODie et du DU de l’unité BioSP pour leurs retours lors de la demande de financement et d’avoir accepté de soutenir ce projet.

Pour finir nous souhaitons remercier la DSI INRAE et GenOuest pour leur mise à dispositions des leurs infrastructures ce qui nous a permis de réaliser ce POC.

(20)
(21)

Annexe A : Tableaux synthétisant les recherches sur

la veille technologique

Tableau représentant les principaux outils de virtualisation étudiés (Providers). Il se peut qu’il manque des informations, celles présentes sont à titre explicatives.

Virtualisation /

Providers mainteneur Type(1) Format(2) License OS (Host) OS (Guest)

VirtualBox Oracle 2 OVA / OVF VMDK, VDI GPL 2 -libre full version propriétaire Windows MacOS Linux Linux DOS Windows FreeBSD Mac OS Solaris OpenBSD

VMware VMware 1 et 2 OVA / OVF

VMDK propiètaire Windows MacOS Linux Windows Linux Solaris FreeBSD OS/2 KVM Red Hat 1 GPL Linux FreeBSD illumos FreeBSD Linux Windows Solaris docker isolé lxc Canonical

Ltd isolé GPL2 Linux Linux

parallels Parallels,

inc 2

OVA / OVF

VMDK, VDI propriétaire MacOS

DOS Windows Linux macOS FreeBSD OS/2 qemu Fabrice Bellard et communaut é 2 QCOW2 GPL/LGPL Windows Linux MacOS Solaris FreeBSD OpenBSD Beaucoup

Xen XenSource 1 GPL Linux Linux

(22)

Proxmox VE proxmox 1 qcow2 raw vmdk AGPLv3 Debian LXC Windows Linux Solaris FreeBSD Hyper-V Microsoft 1 et 2 VHD /

VHDX propriétaire Windows Windows Jails

Communau té BSD

1 BSD FreeBSD FreeBSD

(2) Open Virtualization Archive (OVA), Virtual Machine Disk (VMDK), Virtual Hard Disk (VHD/VHDX), Open Virtualization Format (OVF)

(1) Type hyperviseur 1, 2 et isolé

Tableau des solutions cloud. Les prix sont à titre indicatif.

Plateforme URL Providers OS Stockage

Coûts (à titre indicatif) Comment-aires AWS https://aws.amazo n.com/cloudformati on/ Containers VMWare Citrix Hyper-V Azure Linux Windows S3 bucket Block Fichiers stockage: 0,024 USD par Go/mois Machine : 5 à 250$ / mois Azure https://azure.micro soft.com/en-us/feat ures/resource-man ager/ Hyper-V Linux (RedHat, SUSE) Windows (natif) Blob Block Fichiers Stockage : 30e/mois/TB Machine : environ 200e/mois Google Cloud https://cloud.google. com/ Containers VMs Linux Windows Bucket Blob Fichier machine standard 25 à 4000 e/mois $0.080/GB/mois Openshift https://www.openshif t.com/ Containers VMs (CVM) Linux Windows PV 1500$ à 4000$ / ans openstack https://www.opensta ck.org/ Containers VMs Bare Metal Linux Nixos Windows plugins extensions Plugins principaux stockages DSI Stockage 50e/TB/ans opensource auto heberge OVH Cloud https://www.ovh.com /world/ Containers VMs Bare Metal Linux Windows Bucket Blob Fichier stockage : $0.0112 /mois/GB Cloud : 1500 $ à 12000 $ / mois

(23)

Barmetal : 90 à 500 $/mois

Vagrant Cloud

https://app.vagrantu

p.com/ Infini Tous S3

mode public : gratuit

mode privé : 5 $/mois

mode privé par équipe : 25 $/mois

uniquement du stockage

Tableau des principaux outils étudiés.

Outils Création / Manipulation / Provisioning Créateur / communauté Interopérabilité Interface ? CLI ? License Pérennité / Ages / %utilisateurs / Standard

Ansible Red Hat

Provisioning CaC CLI + templates GPL et Propriétaire Red Hat Grosse communauté Standard Vagrant HashiCorp Manipulation Différents Providers CLI +

templates MIT, EULA Très utilisé

Packer HashiCorp

Création VM différents providers

CLI +

templates MIT, EULA De + en + utilisé

Pulumi Pulumi IaC différents principaux providers cloud CLI + templates Opensource + propriétaire

Gros potentiel mais limité au cloud et infra

Chef Chef, Progress

IaC différents principaux providers cloud Ruby, Erlang Apache 2.0 Très répandu dans l'industrie Puppet Puppet IaC différents principaux providers cloud Ruby, templates opensource + propriétaire Terraform HashiCorp IaC différents principaux providers Cloud interface CLI + templates Mozilla public 2.0 Très utilisé dans la communautée salt SaltStack IaC + outils

avancés Web Propriétaire

otter Inedo IaC Web

Propriétaire +

EULA Communauté limité

(24)

parc info

(R)?EX "Communauté"

IaC complet (Linux)

CLI +

templates Apache 2.0 Petit communauté

CFEngine northern parc info Web GPL3

JUJU Canonical

IaC differents

providers CLI/GUI GPL3

baker "Communauté" meta IaC CLI Apache 2.0 semble abandonné

veewee "Communauté"

IaC limité,

MacOS CLI MIT

pour OS exotique semble peu vivant

rundeck rundeck automatisation Web Apache 2.0

automatiser des tâches et collaboratif

Outils d’automatisation IaC (Infrastructure as Code), CCA (Continuous Configuration Automation) CaC (Configuration as Code)

(25)

Annexe B : Cas d’utilisation

B1: Use-Case : JupyterHub

Nous allons prendre comme exemple le cas d’utilisation (use-case) JupyterHub. Une distribution récente et évolutive conçue pour les petits déploiements, Littlest Jupiter Hub27

(également connu sous le nom de TLJH) est une méthode légère pour installer JupyterHub sur une seule machine virtuelle. TLJH est une application développée sous python nécessitant de nombreuses dépendances. Même si cette distribution gère ces dépendances et prend en charge les configurations de chacun des éléments, son installation reste néanmoins complexe et chronophage.

Cet exemple a été mis en œuvre sur un ordinateur de bureau sous Windows10 / Cygwin. Mais toute machine (portable, ordinateur de bureau, serveur, …) sous MacOS ou UNIX-like peut parfaitement convenir. Sachez que la mise en œuvre de cet exemple requiert des compétences techniques dans l’installation d’applications et suppose que l’édition de fichiers de configuration ne vous rebute pas. On trouvera l’ensemble des scripts et autres fichiers de configuration mentionnés dans cette description en accès libre sous le dépôt GiHub INRAE :

https://github.com/inrae/jupyterhub-vm

Pour construire notre VM finale, c.à.d. la VM qui sera instanciée pour une utilisation en local (virtualisation de type 2) ou sur un serveur distant (Datacenter ou Cloud), la procédure mise en œuvre s’appuie sur l’Use-case générique décrit précédemment et dont elle reprend les étapes. Ainsi nous allons procéder en deux grandes étapes pour la création. La première étape consistera dans la construction d’une VM de base (Base box). La deuxième étape consistera, à partir de la VM de base, à installer et à configurer l'ensemble des outils systèmes et applicatifs (packages) nécessaires à faire fonctionner correctement JupyterHub depuis un navigateur web. Une troisième étape décrira comment instancier la VM finale sur lecloud de GenOuest28.

Construction de la VM de base (Base box) pour Vagrant

On suppose que vous avez installé les outils Packer29 et Vagrant30, ainsi que le logiciel de

virtualisationOracle VirtualBox31.

31https://www.virtualbox.org/wiki/Downloads 30https://www.vagrantup.com/downloads 29https://www.packer.io/downloads

28https://www.genouest.org/2017/03/02/cluster/ 27https://tljh.jupyter.org/en/latest/

(26)

Les opérations permettant la création d’une base box sont documentées en ligne ; il faut suivre le guide de base32 et appliquer les règles spécifiques au provider, à savoir pourVirtualBox33. La

procédure est quelque peu fastidieuse et surtout, une erreur est vite arrivée. C’est pourquoi nous allons utiliser l’outil Packer, qui permetd’automatiser entièrement la création de base box Vagrant en suivant le processus illustré par la figure ci-dessous:

Nous nous basons sur laversion 18.04 d’Ubuntu34.

Une configuration Packer est définie avec un fichier JSON (box-config.json) comportant plusieurs sections:

● “builders”: permet de définir les éléments pour la création de la machine virtuelle à partir d’une image ISO.

● “provisioners”: sert à définir la configuration logicielle à partir de scripts Shell afin d'approvisionner la machine virtuelle.

● “post-processors”: s’exécute une fois la machine virtuelle créée et approvisionnée. Cela permet en autre de définir le format de sortie de la VM.

Section “builders”:

Pour constituer cette section, il est souvent plus simple de partir d’exemples déjà fonctionnels et de modifier les quelques éléments spécifiques à sa configuration. Une requête dans un moteur

34http://cdimage.ubuntu.com/ubuntu/releases/18.04/release/ 33http://docs.vagrantup.com/v2/virtualbox/boxes.html 32http://docs.vagrantup.com/v2/boxes/base.html

(27)

de recherche (Google par ex) avec les mots clés “github packer ubuntu 18.04 virtualbox” permet d’avoir suffisamment d’exemples. Ainsi nous sommes parti d’un exemple approprié à nos besoins35, que nous avons ensuite adapté.

La box est constituée à partir d’une ISO Ubuntu spécifiée par son URL (iso_urls) et son checksum de type sha256 (iso_checksum) afin de créer la VM dans VirtualBox (“type”: “virtualbox-iso”) .

Un fichier de “preseed” (http/preseed.cfg) permet de configurer l’installation (cf plus d’infos sur le preseeding36). Nous avons adapté l’exemple en ajoutant des instructions concernant le

compte root ainsi que la configuration du réseau.

Nous avons limité la taille maximale du disque à 18Go ("disk_size": 18432)afin que la VM

finale puisse être acceptée par le cloud de GenOuest.

Section “provisioners”:

Cette section permet d’exécuter des scripts Shell après que la machine virtuelle ait démarré correctement puis son système d’exploitation installé. C’est donc dans cette étape que nous pouvons configurer la VM afin qu’elle soit compatible avec Vagrant et VirtualBox. Un script Shell (scripts/setup.sh) est donc exécuté afin de: i) installer les pilotes pour VirtualBox, ii) de configurer les accès SSH en conformité avec les Boxes Vagrant.

Section “post-processors”:

Une fois la machine virtuelle de base complètement installée et configurée, il suffit de l’exporter au format Vagrant.

Création de la VM de base

Une fois la configuration établie, il suffit d’exécuter Packer de la façon suivante : $> packer build box-config.json

L’ensemble des messages produits peuvent être consultés sur ledépôt github37

La VM de base après exécution se trouve sous le répertoire builds.

37https://github.com/inrae/jupyterhub-vm/blob/master/logs/packer.log 36https://help.ubuntu.com/18.04/installation-guide/amd64/apb.html 35https://github.com/geerlingguy/packer-boxes/tree/master/ubuntu1804

(28)

Partir d’une VM de base (Base box) existante

Comme on le voit, la création d’une VM de base peut être complexe pour un non-initié. C’est pourquoi il est plus simple de partir d’une VM de base lorsque celle-ci est disponible. C’est aussi pourquoi la VM de base doit être la plus générique possible afin de pouvoir être utilisée facilement pour de nombreuses applications.

La VM de base générée et utilisée dans cet use-case a été déposé surVagrant Cloud38, à l’aide

de son interface de programmation (API, cf “Annexe B3”).

Construction de la VM finale

On va se servir de la VM de base afin de l'approvisionner (appelé le provisionning), c.à.d. installer et configurer l'ensemble des outils systèmes et applicatifs (packages) nécessaires à faire fonctionner correctement l’application JupyterHub. Pour cela, on va utiliser l’outil Ansible comme illustré dans la figure ci-dessous:

(29)

Création du fichier Vagrantfile

La première étape consiste à créer un fichierVagrantfile39et le personnaliser en fonction de vos

besoins. Ce fichier suit la syntaxe du langageRuby40. Une version allégée en est donnée

ci-dessous:

Vagrant.configure("2") do |config|

config.vm.box = file://builds/virtualbox-ubuntu1804.box config.vm.hostname = jupyterhub

config.vm.network "private_network", type: "dhcp" config.ssh.insert_key = false

config.vm.synced_folder ".", "/vagrant", type: "virtualbox" config.vm.provision "ansible_local" do |ansible|

ansible.playbook = "ansible/playbook.yml" ansible.install = true

ansible.limit = 'all'

end

config.vm.provision "shell", path: "scripts/cleanup.sh"

end

● config.vm.box : définit la base box en entrée

● config.vm.hostname : définit le nom de la machine (hostname) ● config.vm.network : définit la configuration réseau en mode dhcp

● config.ssh.insert_key : définit la clé SSH. Par défaut, ce sera celle définie dans la VM de base

● config.vm.synced_folder : définit une répertoire local comme répertoire partagé avec la VM. A minima, le répertoire “.” doit être définie afin de configurer la VM. Ces répertoires de partage ne seront actifs que pendant l’étape de création puis de test avant l’exportation.

● config.vm.provision : définit le procédé par lequel la VM sera approvisionnée. Ici, deux procédés sont invoqués. i) ‘ansible_local’ : indique que l’outil ansible sera

40https://www.ruby-lang.org/fr/about/

(30)

d’abord installé sur la VM puis utilisera le playbook définit dans ansible/playbook; ii) “shell”: indique qu’un script shell définit par son chemin relatif (path) sera utilisé.

Approvisionnement à l’aide de l’outil Ansible

Le choix a été fait de ne pas installer Ansible sur la machine hôte utilisée pour la création de la VM, mais sera plutôt installée sur la VM elle-même, ceci afin de simplifier le procédé.

L’approvisionnement est défini à partir d’un fichier au formatYAML41appeléplaybook.yml42

---- hosts: all become: true become_user: root #gather_facts: no vars_files: - vars/all.yml environment: PYTHONHTTPSVERIFY: 0 roles: - repositories - server - vm - install-r - jupyterhub - r_pkgs - python_pkgs

Ansible permet d'organiser les tâches dans une structure de répertoire appelée Rôle43. Dans

cette configuration, les playbooks invoquent des rôles, eux-mêmes définissant un ensemble de tâches, de sorte que vous pouvez toujours regrouper des tâches et réutiliser les rôles dans d'autres playbooks. Les rôles vous permettent également de collecter des modèles, des fichiers statiques et des variables en même temps que vos tâches dans un format structuré.

Chaque rôle, puis chaque tâche au sein des rôles sont interprétés séquentiellement. Ainsi sont définis les rôles suivants:

● repositories : configure les dépôts (repositories) pour les packages binaires (systèmes, R, python, outils, …),

43https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html 42https://docs.ansible.com/ansible/2.4/playbooks_intro.html

(31)

● server : configure le fuseau horaire (timezone) ● vm : configure le nom de la machine (hostname)

● install-r : installe l’application R avec des packages de bases ● jupyterhub : installe puis configure l’application jupyterhub ● r_pkgs : install un ensemble de packages R

● python_pkgs : install un ensemble de packages Python

Chaque rôle est défini par un ensemble de tâches (tasks), elles-mêmes définies par des fichiers au format YAML. Par exemple, le rôle ‘repositories’ est défini par le fichier

roles/repositories/tasks/main.yml suivant :

---- name: Add an apt key by id from a keyserver

apt_key:

keyserver: "{{repository.keyserver}}" id: "{{repository.id}}"

- name: Add repositories

apt_repository: repo: "{{item}}"

with_items: "{{repository.repos}}"

Deux tâches sont ainsi définies et décrites par leur champ name. Ensuite la tâche proprement dite est définie à l’aide d’un nom se référant à unmodule44. Descentaines de modules45sont

disponibles dans Ansible. Ici deux modules sont invoqués: i) apt_key46: ajouter ou supprimer

une clé apt et ii) apt_repository47: ajouter ou supprimer un dépôt de packages binaires. Les

variables définies par les doubles accolades {{ }} correspondent à celles définies dans le fichier vars/all.yml lui-même déclaré dans le playbook. Ainsi on trouve dans ce fichier les lignes suivantes : repository: keyserver: hkp://keyserver.ubuntu.com:80 id: E298A3A825C0D65DFD57CBB651716619E084DAB9 repos: - ppa:marutter/c2d4u3.5 - ppa:hnakamur/libgit2

- deb https://cloud.r-project.org/bin/linux/ubuntu bionic-cran35/

47https://docs.ansible.com/ansible/2.8/modules/apt_repository_module.html 46https://docs.ansible.com/ansible/2.8/modules/apt_key_module.html 45https://docs.ansible.com/ansible/2.8/modules/modules_by_category.html 44https://docs.ansible.com/ansible/latest/user_guide/modules_intro.html

(32)

Ainsi c’est de cette manière qu’est défini l’ensemble des tâches d’approvisionnement par Ansible.

Le rôle ‘jupyterhub’ a été construit à partir des instructions fournies sur le site de TLJH48. La

liste des packages Python et R nécessaires à une utilisation spécifique sous JupyterHub sont à définir dans le fichier vars/all.yml dont l’installation est prise en charge par les rôles respectifs ‘python_pkgs’ et ‘r_pkgs’.

Approvisionnement par scripts Shell

Une fois terminée l'approvisionnement par Ansible, on procède à un nettoyage de la VM, à savoir désinstaller Ansible, nettoyer les fichiers temporaires et nettoyer le disque dur. On utilise un script Shell (scripts/cleanup.sh) pour cela.

Création de la VM finale

Une fois la configuration établie, il suffit d’exécuter les commandes suivantes : $> vagrant up

$> vagrant package --output ubuntu-box.tar.gz

L’ensemble des messages produits peuvent être consultés sur ledépôt github49

Utilisation de la VM finale sur le cloud de GenOuest

GenOuest50 est une plateforme nationale de Bioinformatique et fédérée par l’Institut Français de

Bioinformatique (IFB51). Cette plateforme propose des services cloud pour la communauté

française de la recherche publique. Ainsi tout chercheur de cette communauté peut faire la demande auprès de GenOuest ou de toute autre plateforme de l’IFB pour avoir accès aux services proposés.

GenOuest propose sur son infrastructure datacenter un service de mise à disposition de ressources de calculs sous forme de machines virtuelles. L’infrastructure est gérée à l’aide de

Openstack52, qui est un ensemble de logiciels open source permettant de déployer des

infrastructures de cloud computing (Infrastructure en tant que Service, IaS). Il est donc nécessaire de disposer d’un compte valide sur cette infrastructure (cf l’aide en ligne53).

53https://help.genouest.org/ 52https://www.openstack.org/ 51https://www.france-bioinformatique.fr/ 50https://www.genouest.org/ 49https://github.com/inrae/jupyterhub-vm/blob/master/logs/vagrant.log 48https://tljh.jupyter.org/en/latest/

(33)

On suppose ensuite que vous avez installer Python (≥2.7) ainsi que le package

python-openstackclient54.

Récupération de ses paramètres de connexions depuis Openstack GenOuest

Pour définir les variables d'environnement requises pour les clients en ligne de commande openstack, vous devez télécharger le fichier d'environnement appelé openrc.sh à partir du

tableau de bord openStack de GenOuest55 en tant qu'utilisateur. Ce fichier d'environnement

spécifique au projet contient les informations d'identification que tous les services openstack utilisent.

Il faut récupérer le script openrc.sh ainsi que le fichier de configuration cloud.yml. Ce dernier est à mettre dans le répertoire <home directory>/.config/openstack.

Ensuite exécuter le script openrc.sh dans le shell courant; votre mot de passe vous sera demandé:

$> . ./openrc.sh

Please enter your OpenStack Password for project <Project> as user <Users>:

55https://genostack.genouest.org/

(34)

<Project> et <User> correspondant à votre configuration.

On va définir quelques alias afin de simplifier les commandes ensuites : OS_SCRIPTS=<path of the python-openstackclient scripts>

alias ostack="$OS_SCRIPTS/openstack --os-cloud=openstack --os-password $OS_PASSWORD"

alias onova="$OS_SCRIPTS/nova --os-password $OS_PASSWORD"

Si tout est configuré correctement, la commande suivante devrait vous fournir la liste des “flavors” disponibles. Les “flavors” (saveurs) définissent la configuration matérielle disponible pour un serveur. Elle définit la taille d'un serveur virtuel qui peut être lancé.

ostack flavor list

+---+---+---+---+---+ | Name | RAM | Disk | VCPUs | Is Public | +---+---+---+---+---+ | m2.xlarge | 16384 | 20 | 4 | True | | m1.small | 2048 | 20 | 1 | True | | m2.large | 8192 | 20 | 2 | True | | m1.medium | 4096 | 20 | 2 | True | | m2.4xlarge | 65536 | 20 | 8 | True | | m2.medium | 4096 | 20 | 1 | True | | m1.2xlarge | 32768 | 20 | 8 | True | | m1.large | 8192 | 20 | 4 | True | | m1.xlarge | 16384 | 20 | 8 | True | | m2.2xlarge | 32768 | 20 | 4 | True | +---+---+---+---+---+

Nous allons ensuite procéder en deux étapes : 1) création d’une image de VM au sein de la librairie, puis 2) création d’une instance de cette image comme illustré ci-dessous:

(35)

Création de l’image sur l’infrastructure openstack

Il est d’abord nécessaire d’extraire le fichier de la VM au format VMDK de l’archive générée à l’étape précédente.

tar xvzf ubuntu-box.tar.gz box-disk001.vmdk

C’est ce fichier qui servira à créer l’image. Il faut aussi spécifier un nom pour l’image. IMAGE_NAME=jupyterhub-image

ostack image create --disk-format vmdk \ --file box-disk001.vmdk $IMAGE_NAME ostack image set $IMAGE_NAME

ostack image show $IMAGE_NAME

Création d’une instance à partir de l’image créée

A partir de l’image créée, il est maintenant possible de créer une instance. Il faut spécifier le nom de l’instance, sa flavor (cf plus haut) et la clé SSH associée à cette VM. La clé SSH (keypair) doit d’abord avoir été créée depuis le tableau de bord d’openstack.

Vous pouvez lister les clés SSH à l’aide de la commande: ostack keypair list

On peut aussi spécifier le fichier contenant les commandes à exécuter après le premier boot. Ici ce fichier est nécessaire (user-data-jupystack.txt) car on doit écraser le fichier

/usr/local/bin/get-hostname donnant le nom complet de l’instance sur openstack afin de bâtir l’URL racine de l’application jupyterhub.

Dans notre exemple, on choisit une flavor correspondant à 8 CPUs, 16Go de RAM et 20Go de disque. Une clé SSH a été créée ayant pour nom genostack dans le tableau de bord

(36)

d’openstack. Cette clé SSH doit être une clé valide sur votre compte (linux) d’openstack. genouest.org56(fichier ~/.ssh/authorized_keys).

IMAGE_NAME=jupyterhub-image SERVER_NAME=jupystack

KEYPAIR=genostack FLAVOR_NAME=m1.xlarge

IMAGEID=$(ostack image show $IMAGE_NAME | \ grep "| id " | cut -d'|' -f3 | \ sed -e "s/ //g")

FLAVORID=$(ostack flavor list | \

grep "$FLAVOR_NAME" | cut -d'|' -f2 | \ sed -e "s/ //g")

onova boot --flavor $FLAVORID --image $IMAGEID --security-groups default \ --user-data ./user-data-jupystack.txt \

--key-name $KEYPAIR $SERVER_NAME ostack server show $SERVER_NAME

La dernière commande permet d’obtenir le numéro IP de la VM ainsi créée. Supposons que ce numéro IP soit 198.168.101.179. On peut ainsi accèder à l’application depuis son navigateur web à l’URL : https://app-192-168-101-79.vm.openstack.genouest.org/hub/login

(37)

Résumé de la procédure sous forme d’un schéma

Les cadres gris correspondent aux trois étapes décrites précédemment.

Les trois grandes étapes:

1. Construction de la VM de base 2. Construction de la VM finale

3. Utilisation de la VM finale sur un cloud Openstack

Le pipeline:

● En vert, le circuit du pipeline pour la création, stockage et instanciation de la machine virtuelle.

● En entrée du pipeline, un fichier ISO correspondant au système d’exploitation choisi et téléchargé depuis Internet.

● En sortie, une instance de la machine virtuelle opérationnelle sur le cloud Openstack de GenOuest.

(38)

Les différentes couches:

● La couche configuration correspond à l’ensemble des fichiers et scripts déposés dans le github.

● La couche création correspond à l’ensemble des outils installés et utilisés sur la machine locale de l’utilisateur (hormis Ansible qui est installé sur la machine virtuelle mais qui pourrait très bien être installé sur la machine locale).

● La couche storage correspond aux sites de stockage des VMs (de base et finale). ● La couche instantiation correspond à la machine virtuelle instanciée.

(39)

B2: Automatisation de la création et du partage d’un

environnement sous R

Les codes et fichiers sont disponibles sur ces deux dépôts : - https://forgemia.inra.fr/gaev/usecases/windowsr

- https://forgemia.inra.fr/gaev/usecases/macosr

En reprennent le use-case générique voici les différentes étapes :

1. Choix d’une “VM de base” (Base box) préconfigurée pour le pipeline. a. Critères du choix => (OS + Provider)

i. Utilisation du provider “VirtualBox” ii. OS ciblé (Windows et MacOS)

b. Absence de VM de base (c.à.d conforme aux spécifications requises) : i. Construction de la VM de base avec Packer

1. https://forgemia.inra.fr/gaev/packer/windows10

2. https://forgemia.inra.fr/gaev/packer/macos

ii. Dépôt des VMs (boxes) surhttps://app.vagrantup.com/GAEV/

2. Construction de la VM finale (Final box) à partir de la VM de base (Base box) a. Étape 1 : Construction du playbook d’Ansible

i. Playbook.yml

ii. Différents rôles sont disponibles suivant l’OS :

1. Windows : R, Rtools, msys2, R-package, Miktex, cicd 2. MacOS : common, R, R-packages, MacTex, Xquartz, cicd

iii. Les variables définies dans le rôle R-packages/default/main.yml peuvent être redéfini dans le playbook pour installer les packages R et librairies systèmes nécessaires.

b. Étape 2 : Création du template de Vagrant (Vagrantfile)

i. Configure les caractéristiques de la VM suivant l’OS hôte

ii. Appliquer l’ensemble des procédures décrites par Ansible et les variables spécifiques situé dans group_vars.

c. Automatisation des étapes précédentes via les GitLab runner du dépôt. 3. Utilisation de la VM finale (Final box)

a. Utilisation sur son ordinateur via Virtualbox

b. Partage des boxes via un stockage (S3 DSI INRAE) et VagrantCloud

(40)

Schéma Use Case environnement R

B3: Enregistrement d’une box sur Vagrant Cloud

Vagrant Cloud fournit une API permettant aux utilisateurs d'enregistrer leurs machines virtuelles (boxes) sur Vagrant Cloud afin qu'elles puissent être réutilisées par eux-mêmes ou par d'autres utilisateurs. L’utilisation del’API est décrite en ligne57.

L’enregistrement d’une machine virtuelles ne peut se faire qu’avec le format Vagrant, c.à.d une “box”. Une “box” est en fait un fichier archive zippée (TAR + GZIP) ayant l’extension ‘.box’.

Enregistrer une “box” comprend 5 étapes :

1. Création d’une entrée pour la “box” : il faut spécifier au minimum le nom de la box (boxname). Sa description est optionnelle.

2. Création d’une version : il peut y avoir plusieurs versions pour une même entrée; il faut spécifier la version.

3. Création d’un provider : de même, pour une entrée (boxname) et une version, il peut y avoir plusieurs providers associés; il faut spécifier le provider.

4. Télécharger le fichier de la box.

5. Valider la box. (entrée + version + provider)

Toutes ces étapes peuvent se faire soit via l’interface web de Vagrant Cloud58, soit par plusieurs

appels de l’API. Afin de faciliter l’automatisation des enregistrements, l’outil Vagrant fournitune fonctionnalité ‘cloud’59 qui permet d’enregistrer sa box sur Vagrant Cloud. Il faut préalablement

avoir créé un compte (appelé ‘organisation’) sur Vagrant Cloud.

59https://www.vagrantup.com/docs/cli/cloud 58https://app.vagrantup.com/

(41)

Exemple d’invocation :

$> vagrant cloud auth login # ...

Vagrant Cloud username: GAEV Vagrant Cloud password: XXXXXXX

$> vagrant cloud publish GAEV/centos7-dd8Gb 1.0.0 virtualbox virtualbox-centos7_8Gb.box

You are about to create a box on Vagrant Cloud with the following options: GAEV/centos7-dd8Gb (1.0.0) for virtualbox

Automatic Release: true Do you wish to continue? [y/N] y Creating a box entry...

Creating a version entry... Creating a provider entry...

Uploading provider with file /Vagrant/boxes/virtualbox-centos7_8Gb.box Releasing box...

Complete! Published GAEV/centos7-dd8Gb tag: GAEV/centos7-dd8Gb username: GAEV name: centos7-dd8Gb private: false downloads: 0 created_at: 2020-07-25T17:53:04.340Z updated_at: 2020-07-25T18:01:10.665Z current_version: 1.0.0 providers: virtualbox

La box ainsi enregistrée est consultable surVagrant Cloud60.

Figure

Tableau représentant les principaux outils de virtualisation étudiés (Providers). Il se peut qu’il manque des informations, celles présentes sont à titre explicatives.
Tableau des solutions cloud. Les prix sont à titre indicatif.
Tableau des principaux outils étudiés.

Références

Documents relatifs

— une UE de TP num´ eriques pour sciences physiques et chimiques [3 ECTS]. Pour la partie chimie de cet enseignement, l’objectif est de d´ ecouvrir les outils num´ eriques de la

Le but de cette UE est d’initier et de familiariser les ´ etudiants avec le travail sur le terrain dans les domaines des Sciences de la Terre au sens large via l’´ etude des

Partager des informations et confronter des expériences qui ont déjà démontré leur pertinence, tels sont les objectifs de la ren- contre régionale «Coopération internationale dans

La coopération belge constate une tendance favorable de ses pays partenaires à l’implication de plus en plus d’opérateurs professionnels privés dans la gestion technique

Mode d’évaluation : Examen écrit et oral; le travail personnel pendant le semestre Références (Livres et polycopiés, sites internet, etc) :..  Airiau M., Schweitzer E.,

• Pour connecter le lecteur CD/DVD virtuel au lecteur CD/DVD physique de l'hôte, sélectionnez Lecteur de l'hôte &lt;drive‑name&gt;. • Pour insérer une image ISO dans le

Compte tenue que le programme de Licence en Sciences Humaines et Langues de l’Université Libre est offert, à l’heure actuelle en modalité présentielle, il est nécessaire

Création d’une machine virtuelle sous Debian 10 sans interface graphique avec VirtualBox pour l’installation de WordPress..