Evolution #5052
Génération des conteneurs et de leur configurations
Description
Il faut réécrire la procédure de génération des conteneurs.
Nous avons désormais accès à toutes les informations nécessaires en dehors de source:creole/cfgparser.py.
Il faut créé un moteur de template pour les fichiers de configuration des conteneurs qui ne peuvent être géré par balise <file />
.
Demandes liées
Révisions associées
Les chemin des disknods sont résolus en informations de périphérique
L’accès aux disknods déclanche une résolution des chemins en dictionnaire
contenants les informations du périphique.
On ne résoud les chemins vers des répertoires et les périphériques blocs
et caractères, par exemple :
/dev/fuse -> {'type': u'c', 'major': 10, 'minor': 229, 'mode': 'rwm',
'permission': 'allow'}
/home -> {'type': u'b', 'major': 252, 'minor': 0, 'mode': 'rwm',
'permission': 'allow'}
Cette résolution se fait côté client mais ne devrait pas fonctionner dans
les conteneurs.
- creole/client.py (_gen_device_from_disknod): Résoud un chemin en
dictionnaire d’information de périphérique. Ne prend en compte que des
noms de périphérique blocs ou caractères ainsi que des répertoires afin
d’obtenir les informations du périphérique bloc contenant le système de
fichier.
Ref: #5052 @30m
Génération des interfaces sur le réseau inter-conteneurs
Cela permet de gérer toutes les interfaces de conteneurs de la même
façon.
Les interfaces sur le réseau inter-conteneurs sont la sortie par défaut
et peuvent être surpassées par des définissions ultérieurs.
Ces interfaces sont donc ajoutées précautionneusement afin de ne pas
écraser la définition de « sortie par défaut » d’une autre interface du
groupe de conteneur.
- creole/loader.py (CreoleContainer.gen_interfaces): Ajout des interfaces
du réseau inter-conteneurs avant les interfaces personnalisées.
Ref: #5052 @45m
Moteur de templatisation des configurations LXC
Ce moteur est à amélioré afin d’ajouter une gestion d’erreurs.
- creole/containers.py (ContainerTemplateEngine): Moteur de templating
basé sur « CreoleTemplateEngine » afin de gérer la configurations des
conteneurs LXC.
(generate_lxc_container): Wrapper à la commande « lxc-create ».
(generate_lxc_containers): Génération des conteneurs pour tous les
groupes de conteneurs.
Fixes: #5052 @45h
L’attribut « gateway » n’est pas supporté dans la DTD
- data/creole.dtd: Ajout de l’attribut optionnel « gateway » pour
l’interface.
Ref: #5052 @2m
Génération du fichier « /etc/network/interfaces » des conteneurs
- creole/containers.py: Ajout du fichier à généré.
(get_components): Ajout de la « gateway ».
- data/creole.dtd: Définition de la valeur par défaut de « fstype » à
« auto », utile dans le cas d’un mount « bind ».
Ref: #5052 @2m
Le chemin des fichiers préfixé par le conteneur est « full_container_name »
- creole/loader.py (CreoleContainer.gen_files): L’attribut de
fichier « full_container_name » est le chemin du fichier préfixé par le
chemin du conteneur.
- creole/template.py (CreoleTemplateEngine.patch_template): Suppression
de l’argument inutile « container ».
(CreoleTemplateEngine.strip_template_comment): Idem.
(CreoleTemplateEngine.prepare_template): Idem
(CreoleTemplateEngine.verify): Idem. Utilisation de
« full_container_name » au lieu de reconstruire le chemin.
(CreoleTemplateEngine.remove_destfile): Idem.
(CreoleTemplateEngine.process): Utilisation de
« full_container_name » au lieu de reconstruire le chemin.
(CreoleTemplateEngine.change_properties): Utilisation de
« name » au lieu de construire le chemin, la commande est exécutée dans
le « chroot ». Utilisation de « pyeole.process.creole_system_out() »
afin de passer le dictionnaire du conteneur et ne tenir compte
du « path » de celui-ci.
(CreoleTemplateEngine._instance_file): Correction des API.
- creole/containers.py (ContainerTemplateEngine.instance_lxc_file):
Utilisation de « full_container_name ». Utilisation du « path » du
maître pour l’appel à « CreoleTemplateEngine.change_permission() ».
- bin/CreoleCat (main): Définition de « full_container_name ».
Ref: #5052 @45m
Le conteneur « all » fait partie de tous les groupes de conteneurs
- creole/containers.py (get_components): Ajout du conteneur « all ».
Ref: #5052 @2m
Génération des conteneurs lors des « reconfigure »
- creole/reconfigure.py: Initialisation du logger avec
« pyeole.log.getLogger », cela permet d’utiliser les fonctions de
reconfigure depuis d’autres scripts.
Récupération du code du nouveau « gen_conteneurs ».
Ref: #5052 @2m
Ne pas générer de fichier dans le conteneur « all »
Ces fichiers sont à générér pour chaque conteneur.
La clef « name » du dictionnaire d’un fichier doit être unique, nous lui
assignons la valeur qui était celle de « full_container_name ».
Le nom relatif à l’intérieur du conteneur est stocké dans la
clef « relative_name ».
- creole/loader.py (CreoleContainer._gen_file): Prépare une structure de
fichier pour un conteneur.
Renommage de la clef « name » en « relative_name ».
Renommage de la clef « full_container_name » en « name ».
(gen_files): Prend en charge les fichiers du conteneur « all ».
- creole/template.py: Prise en compte du renommage des clefs du
dictionnaire de fichier.
- creole/containers.py (ContainerTemplateEngine.instance_lxc_file): Idem.
- bin/CreoleCat: Idem.
Ref: #5052 @20m
Ne pas générer toutes les interfaces lors d’un « gen_conteneurs »
Cela permet de démarrer des conteneurs minimalistes afin d’installer des
paquets.
- creole/containers.py (get_components): Nouveau paramètre afin de
supprimer certaines informations.
(ContainerTemplateEngine.instance_lxc_file): Idem.
(ContainerTemplateEngine.instance_lxc_files): Idem.
- creole/reconfigure.py (containers): Générer des configurations
minimales.
Ref: #5052 @10m
Créer les points de montage des conteneurs
Les conteneurs LXC ne démarrent pas si les montages ne peuvent pas se faire.
- creole/containers.py (ContainerTemplateEngine._create_mount_points):
Création de l’arborescence jusqu’au point de montage.
(ContainerTemplateEngine.instance_lxc_file): Appel à la création des
points de montage.
Ref: #5052 @5m
Historique
#1 Mis à jour par Daniel Dehennin il y a environ 11 ans
- Statut changé de Accepté à Résolu
- % réalisé changé de 0 à 100
Appliqué par commit d142da320861e3312701da431b2c147bdcce22fd.
#2 Mis à jour par Joël Cuissinat il y a environ 11 ans
- Statut changé de Résolu à Fermé
=> programme /usr/share/eole/sbin/gen_conteneurs