Project

General

Profile

Evolution #5740

Permettre d’obtenir toutes les informations utiles à un conteneur ou groupe de conteneur

Added by Daniel Dehennin almost 8 years ago. Updated almost 7 years ago.

Status:
Fermé
Priority:
Normal
Assigned To:
Category:
-
Start date:
07/10/2013
Due date:
% Done:

100%

Spent time:
Distribution:
EOLE 2.4

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 sous group
      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
      
  • 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 courant
      La liste des fichiers du conteneur courant est
      %for %%file in %%current_container.files
      - %%file.relative_name
      %end for
      

Related issues

Related to creole - Anomalie #8469: Mauvaise gestion des doublons par groupe de conteneurs Fermé 06/26/2014 07/04/2014
Related to creole - Anomalie #8515: L’inventaire par groupe ne conserve par l’ordre de déclaration Fermé 07/01/2014 07/04/2014

Associated revisions

Revision 56b86284 (diff)
Added by Daniel Dehennin almost 8 years ago

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

Revision 7c061108 (diff)
Added by Daniel Dehennin almost 8 years ago

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

Revision ebafdd0e (diff)
Added by Daniel Dehennin almost 8 years ago

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

Revision e20a293d (diff)
Added by Daniel Dehennin almost 8 years ago

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

Revision 6bcc22eb (diff)
Added by Daniel Dehennin almost 8 years ago

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

Revision 0e7fa0ed (diff)
Added by Daniel Dehennin almost 8 years ago

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

Revision e3e312de (diff)
Added by Daniel Dehennin almost 8 years ago

Add missing get_group_infos

Something fails during rebase.

Ref: #5740

History

#1 Updated by Daniel Dehennin almost 8 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 8 years ago

Il y a deux mode d’instanciations des fichiers supportés par CreoleTemplateEngine.instance_files() (source:creole/template.py?rev=c214f1cf#L474)

  1. Pour tous les conteneurs en laissant le paramètre container à None
  2. 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.

  1. 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
    
  2. 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 8 years ago

  • Status changed from Nouveau to Résolu
  • % Done changed from 80 to 100

#4 Updated by Joël Cuissinat over 7 years ago

  • Target version set to 209

#5 Updated by Joël Cuissinat about 7 years ago

  • Target version changed from 209 to Eole 2.4-RC3

#6 Updated by Joël Cuissinat almost 7 years ago

  • Status changed from Résolu to Fermé
Utilisé dans les templates suivants (en mode non conteneur) :
  • 02eoleproxy
  • 50-nat_rules
  • ouvre.firewall

Also available in: Atom PDF