wiki:documentation:avance:creationmodele

Création d'un nouveau modèle

Il peut être utile de créer un nouveau modèle de VM, afin de déployer des instances spécifiquement taillées pour vos besoins. Le principe d'un modèle est de proposer une base fixe (OS + applicatifs déjà installés), et de demander à l'utilisateur un jeu de données variables (nom d'utilisateur, mot de passe, etc), le but étant d'avoir un modèle qui demande à l'utilisateur le minimum de manipulations, tout en restant configurable simplement.

Pour ce faire, il faut disposer d'une image (un “patron” d'OS). Il est possible d'utiliser les images des modèles de VM existants.

Pour cet exemple, nous allons créer un modèle de serveur de fichiers avec samba. Pour obtenir un serveur de fichier utilisable, il faut donc prévoir :

  • d'installer le serveur samba
  • de le configurer (utilisation de ldap ? Créer les partages par défaut ?)
  • de configurer l'OS (mot de passe root, hostname, etc)

Nous allons donc repartir de l'image “Debian 9 (Stretch) - univnantes”, qui est assez générique pour nos besoins.

Les étapes que nous allons suivre sont les suivantes :

  1. créer notre patron à partir de l'image générique
  2. créer une nouvelle image à partir de notre patron
  3. créer un modèle

Le plus simple pour adapter une image existante est d'instancier temporairement une nouvelle VM à partir d'un modèle existant, de la configurer selon ses besoins, puis d'enregistrer les modifications dans une nouvelle image, qui deviendra la base de notre nouveau modèle.

L'instanciation d'une VM est expliquée ci-dessus. Une fois la VM fonctionnelle, il faut procéder à la suite, c'est-à-dire à l'installation du serveur samba (apt-get update && apt-get install samba, etc).

Il est possible à ce stade de customiser autant que possible le futur patron, en préconfigurant par exemple le serveur samba pour proposer des partages par défaut, ou en supprimant toute trace de cette préconfiguration (suppression des logs, de l'historique, etc).

Une fois notre VM configurée comme prévue, il est nécessaire de l’arrêter proprement en utilisant la commande “Éteindre” dans l'interface web du service.

Nous allons donc maintenant procéder à la création de l'image, en sauvegardant le disque de notre VM dans une nouvelle image. Pour ce faire, il faut passer par l'onglet “Stockage” de la VM, puis cliquer sur l'icône “Saveas” au niveau du disque :

Il faut ensuite donner un nom à notre nouvelle image :

La nouvelle image apparaît désormais dans la liste des images disponibles, dans “Storage” puis “Images” :

Nous allons donc passer à l'étape suivante, la création du modèle.

La création d'un nouveau modèle se fait dans le menu “Modèles” puis “Machines Virtuelles”. Il faut ensuite cliquer sur l'icône “+” :

L'utilisateur est donc invité à saisir les informations nécessaires à la création de son nouveau modèle.

Tout d'abord, les informations générales :

  1. le nom : “Modèle de Serveur Samba”
  2. la description : “Modèle de serveur samba pour automatiser le déploiement de serveurs de fichiers”
  3. la taille par défaut de la mémoire allouée à la VM : 2Go
  4. le nombre de CPU : 0.5
  5. le nom de CPU virtuels : 2
  6. l'hyperviseur: KVM (seul hyperviseur supporté par la plateforme)

Les informations concernant le stockage :

  1. l'image : c'est là que nous sommes amenés à choisir l'image “patron-serveur-samba-debian9” créée à l'étape précédente
  2. un disque de données : il est possible de rajouter un disque vierge, par exemple pour séparer le volume de données du volume de l'OS. Il faut pour cela cliquer sur le “+” sous le 1er disque, puis choisir, par exemple, “Disque Vierge (IDE)”

Les informations concernant le réseau :

  1. le nombre d'interfaces réseau et le réseau dans lequel les mettre. Il est tout à fait possible de ne rien préciser et l'utilisateur pourra choisir son réseau au moment de l'instanciation.

Une fois ces informations saisies, il faut engistrer le nouveau patron en cliquant sur le bouton “Créer”.

Le nouveau modèle est désormais disponible :

Il est donc possible d'instancier une nouvelle VM à partir de celui-ci, mais vous remarquerez que les informations demandées à l'instanciation se limitent au nom de la VM et à la configuration matérielle. Il n'y a rien concernant le mot de passe root, la configuration samba, etc. C'est ce qu'on appelle la “Contextualisation” de la VM.

La contextualisation permet d'adapter la VM au contexte de l'utilisateur. Elle permet par exemple de demander à l'utilisateur de saisir un mot de passe root, un nom d'utilisateur, de cocher une case pour démarrer un service ou un autre, etc.

La contextualisation se configure dans l'onglet “contexte”, lors de la création ou de la modification d'un modèle :

Il est possible d'injecter automatiquement dans le patron la clé SSH de l'utilisateur, si celui-ci en a configuré une dans son compte sur la plateforme. Cela permet, par exemple, de ne pas avoir à saisir de mot de passe root (mais cela empêche ainsi d'utiliser la console web). Pour cela, il suffit de cliquer sur “Ajouter une contextualisation SSH”. Cela permet d'avoir une contextualisation ssh adaptée à chaque utilisateur instanciant le modèle. Il est toutefois possible de forcer l'injection d'une clé tiers, en la précisant dans le champs “Clé SSH publique”.

Pour en savoir plus sur les clés SSH : https://delicious-insights.com/fr/articles/comprendre-et-maitriser-les-cles-ssh/

Exécution d'un script de démarrage

Au démarrage de la VM, il est possible de lancer un script. Ce script sera lancé à chaque démarrage. Par exemple, faire une image automatiquement à jour :

apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -y dist-upgrade --force-yes -o Dpkg::Options::="--force-confold"

Il est aussi possible de configurer des entrées utilisateurs.

Entrées utilisateurs

Les entrées utilisateurs sont des champs à saisir au moment de l'instanciation de la VM. Par exemple, le mot de passe root. Ces champs sont ensuite réutilisables dans le script de démarrage, notamment pour effectuer le changement de mot de passe de l'utilisateur root ou de configurer un service, etc.

Une entrée utilisateur peut être facultative ou obligatoire. Les types de champs possibles sont les suivants :

  1. texte, pour saisir du texte sur plusieurs lignes
  2. texte (base 64), pour saisir un hash64
  3. mot de passe, pour saisir un mot de passe, champs sur une ligne qui n'affiche pas le contenu
  4. nombre, pour saisir un nombre entier
  5. nombre (réel), pour saisir un nombre à virgule
  6. plage, pour saisir une valeur comprise entre 2 bornes
  7. interval, comme ci-dessus mais avec des nombres à virgule
  8. liste, une liste déroulante
  9. booléen, une case à cocher (oui / non)

Ces champs permettent de passer des variables au script de démarrage.

Par exemple, reprenons le cas du champs de saisie du mot de passe root. Il faut créer un champs de type “mot de passe”, obligatoire :

Lors de l'instanciation, cela sera traduit comme ceci :

Il faut toutefois utiliser la variable $ROOT_PASSWORD dans notre script de démarrage, afin de modifier le compte root du serveur :

echo -e "$ROOT_PASSWD\n$ROOT_PASSWD\n" | passwd root

et donc dans l'interface du service :

Notre modèle est désormais contextualisé. Du moins pour la partie mot de passe root.

  • wiki/documentation/avance/creationmodele.txt
  • Dernière modification: 2020/05/19 21:17
  • de abelard-a