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:
Related issues
Associated revisions
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
History
#1 Updated by Daniel Dehennin almost 10 years ago
- % Done changed from 0 to 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 Updated by Daniel Dehennin almost 10 years ago
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 Updated by Daniel Dehennin almost 10 years ago
- Status changed from Nouveau to Résolu
- % Done changed from 80 to 100
Appliqué par commit ebafdd0ecfe8668a036a9bbec93cf95377d031c0.
#4 Updated by Joël Cuissinat almost 10 years ago
- Target version set to 209
#5 Updated by Joël Cuissinat about 9 years ago
- Target version changed from 209 to Eole 2.4-RC3
#6 Updated by Joël Cuissinat about 9 years ago
- Status changed from Résolu to Fermé
- 02eoleproxy
- 50-nat_rules
- ouvre.firewall