Evolution #5740
Permettre d’obtenir toutes les informations utiles à un conteneur ou groupe de conteneur
Description
Il est utilise de disposer des informations par conteneur ou par groupe de conteneur.
Cela sera utilisé par le processus de templatisation afin de transmettre ses informations dans les templates.
Plusieurs options pour accéder aux informations dans les templates :
- Accès aux informations du groupe de conteneurs
- Séparer les informations de groupe et de conteneur dans
%%current_container
et%%current_group
; - Mettre les informations de groupe dans
%%current_container
sousgroup
Le conteneur actuel est %%current_container.name Le nom du groupe de conteneur est %%current_container.group.name La liste des fichiers du groupe de conteneurs est %for %%file in %%current_container.group.files - %%file.relative_name %end for
- Séparer les informations de groupe et de conteneur dans
- Accès aux informations du conteneur courant
- Conserver un nombre d’informations minimale:
name
,ip
,group
,path
- Enrichir
%%current_container
des informations sur les fichiers, services, etc du conteneur courantLa liste des fichiers du conteneur courant est %for %%file in %%current_container.files - %%file.relative_name %end for
- Conserver un nombre d’informations minimale:
Demandes liées
Révisions associées
Récupérer la liste des groupes de conteneurs
Tous les groupes sont des conteneurs mais tous les conteneurs ne sont pas
des groupes.
- creole/client.py (CreoleClient.get_groups): Retourne la liste des noms
de groupe de conteneurs
Ref: #5740 @2m
Récupérer toutes les informations par conteneur ou groupe de conteneurs
Ajout de deux méthodes pour le client :
- « CreoleClient.get_container_infos() » permet de récupérer toutes les
informations pour un conteneur
- « CreoleClient.get_group_infos() » permet de récupérer toutes les
informations pour tous les conteneurs d’un groupe.
Les informations retournées sont sous forme de dictionnaire :
{composant: valeur}
« CreoleClient.get_group_infos() » supprime les doublons pour les valeurs
de type list.
- creole/client.py (_remove_duplicates_in_components): Supprime les
doublons dans les composants de conteneurs. On utilise la clef
« name ».
(CreoleClient.get_containers_components): Récupère les informations des
composants d’une liste de conteneurs.
(CreoleClient.get_container_infos): Agrège les informations d’un
conteneur avec ces composants.
(CreoleClient.get_group_infos): Agrège les informations du groupe de
conteneurs avec les composants de tous les conteneurs du groupes.
Ref: #5740 @2h
Utilisation de l’API « CreoleClient » pour les groupes de conteneurs
- creole/reconfigure.py (install_packages): Installation des paquets par
groupe de conteneurs.
- creole/template.py (CreoleTemplateEngine.instance_file):
« %%current_container » contient toutes les informations du conteneur.
(CreoleTemplateEngine.instance_files): « %%current_container » contient
toutes les informations du groupe de conteneurs.
- creole/containers.py (generate_lxc_containers): Utilisation de
« CreoleClient.get_groups ».
(instance_lxc_file): Les informations du groupe de conteneurs sont
récupérées par « CreoleClient.get_group_infos() ».
L’instanciation en mode « minimal » ne conserve que l’interface
inter-conteneurs.
(instance_lxc_files): Instanciation pour la liste des groupes obtenue
par « CreoleClient.get_groups() ».
Si un groupe est passé en paramètre, on valide sont existance par un
appel à « CreoleClient.get_container() ».
Fixes: #5740 @3h
Tous les conteneurs n’ont pas d’interface « containers »
La nouvelle API « CreoleClient.get_container_infos() » permettant
d’obtenir les informations pour un conteneur peut renvoyer des
informations incomplètes.
L’interface inter-conteneurs « containers » n’était ajoutée qu’au premier
conteneur d’un group afin de ne pas la générer plusieurs fois dans les
fichiers de configuration.
La nouvelle API « CreoleClient.get_group_infos() » permettant d’obtenir
les informations par groupe de conteneurs gére les doublons entre tous
les conteneurs d’un même groupe, le loader n’a donc pas à supprimer
d’informations.
- creole/loader.py (CreoleContainer.gen_interfaces): Génerer l’interface
« containers » pour tous les conteneurs (sauf « all » et « root »).
Ref: #5740 @5m
Impossible de trouver un fichier pour tous les conteneurs
La celf « name » du dictionnaire d’un fichier est le nom complet avec
préfix du conteneur.
La méthode « CreoleClient.get_file() » prend en argument un nom de
fichier qui est comparé à cette clef « name », elle ne retourne que
l’instance du fichier pour le conteneur « root ».
On inverse la logique introduite par le commit 7e11b59 :
- La clef « name » contient le nom relatif au conteneur ;
- La clef « full_name » contient le chemin préfixé par le conteneur.
- creole/loader.py (CreoleContainer._gen_file): « name » n’est plus
modifié. « full_name » est préfixé par le chemin du conteneur.
- creole/template.py (CreoleTemplateEngine._check_filevar): Prise en
compte des changements entre « name » et « full_name ».
(CreoleTemplateEngine.verify): Idem.
(CreoleTemplateEngine.process): Idem.
(CreoleTemplateEngine.change_properties): Idem.
(CreoleTemplateEngine.remove_destfile): Idem.
(CreoleTemplateEngine._instance_file): Idem.
(CreoleTemplateEngine._instance_file): Idem.
(CreoleTemplateEngine.instance_file): Idem.
(CreoleTemplateEngine.instance_files): Idem.
- creole/containers.py (ContainerTemplateEngine.instance_lxc_file): Idem.
- bin/CreoleCat (main): Idem.
Ref: #5740 @5m
Utilisation de l’API « CreoleClient » pour les groupes de conteneurs
- bin/CreoleCat (_find_file): Renvoi un fichier en fonction du nom du
template.
(main): Simplification du code en travaillant sur les groupes de
conteneurs.
Ref: #5740 @10m
Historique
#1 Mis à jour par Daniel Dehennin il y a plus de 10 ans
- % réalisé changé de 0 à 80
J’ai créé une branche de développement (source:?rev=feature/get-all-info-for-container-and-group) afin de faire tester avant de tout intégrer à master.
Vous pouvez récupérer cette branche sur un serveur de test et copier les fichiers modifiés afin de tester.
Il reste à voir où seront stockées les informations pour les rendre accessibles dans les templates.
#2 Mis à jour par Daniel Dehennin il y a plus de 10 ans
Il y a deux mode d’instanciations des fichiers supportés par CreoleTemplateEngine.instance_files()
(source:creole/template.py?rev=c214f1cf#L474)
- Pour tous les conteneurs en laissant le paramètre
container
àNone
- Pour un seul conteneur en passant le nom du conteneur au paramètre
container
Le contexte %%current_container
dépend de ce paramètre, la clef containers
ne sera disponible que dans le cas d’un groupe de conteneurs.
- reconfigure:
Le nom du conteneur actuel %%current_container.name est égal au nom du groupe de conteneur %%current_container.group La liste des conteneurs de ce groupe est %for %%name in %%current_container.containers - %%name %end for La liste des fichiers du groupe de conteneurs est %for %%file in %%current_container.files - %%file.relative_name %end for
CreoleCat -c bidule -t fichier
Le nom du conteneur actuel %%current_container.name est peut-être différent du nom du groupe de conteneur %%current_container.group, ça dépend s’il est son propre groupe Il n’y a aucune liste de conteneur. La liste des fichiers du conteneur est %for %%file in %%current_container.files - %%file.relative_name %end for
#3 Mis à jour par Daniel Dehennin il y a plus de 10 ans
- Statut changé de Nouveau à Résolu
- % réalisé changé de 80 à 100
Appliqué par commit ebafdd0ecfe8668a036a9bbec93cf95377d031c0.
#4 Mis à jour par Joël Cuissinat il y a plus de 10 ans
- Version cible mis à 209
#5 Mis à jour par Joël Cuissinat il y a environ 10 ans
- Version cible changé de 209 à Eole 2.4-RC3
#6 Mis à jour par Joël Cuissinat il y a presque 10 ans
- Statut changé de Résolu à Fermé
- 02eoleproxy
- 50-nat_rules
- ouvre.firewall