Projet

Général

Profil

Tâche #8684

Distribution EOLE - Scénario #8826: Gestion des conteneurs par les outils Creole

get_container_info ne fonctionne pas avec les groupes de conteneurs

Ajouté par Emmanuel GARETTE il y a plus de 9 ans. Mis à jour il y a plus de 9 ans.

Statut:
Fermé
Priorité:
Haut
Assigné à:
Début:
Echéance:
% réalisé:

100%

Temps estimé:
4.00 h
Temps passé:
Restant à faire (heures):

Description

get_container_info est peu fiable (pourtant il est utilisé a beaucoup d'endroit). Il ne renvoi pas les informations des conteneurs de type groupes.

Par exemple si je regarde les interfaces du conteneur 'fichier' :

>>> d=c.get_container_infos('fichier')
>>> d['interfaces']
[{u'activate': True, u'container': u'fichier', u'name': u'containers', u'ip': u'192.0.2.52', u'mask': u'255.255.255.0', u'gateway': u'192.0.2.1', u'method': u'bridge', u'container_group': u'partage', u'real_container': u'partage', u'bcast': u'192.0.2.255', u'linkto': u'br0'}, {u'activate': True, u'container': u'fichier', u'linkto': u'eth0', u'level': u'module', u'ip': u'192.168.2.3', u'mask': u'255.255.255.0', u'real_container': u'partage', u'container_group': u'partage', u'bcast': u'192.168.2.255', u'method': u'macvlan', u'name': u'eth1'}, {u'activate': True, u'container': u'fichier', u'name': u'eth1', u'level': u'module', u'ip': u'192.168.2.3', u'mask': u'255.255.255.0', u'container_group': u'partage', u'real_container': u'partage', u'method': u'macvlan', u'bcast': u'192.168.2.255', u'linkto': u'eth1'}]

On voit :

  • que le conteneur fait parti du groupe 'partage'
  • qu'il y a deux interfaces

Maintenant regardons la configuration du groupe de conteneur :

>>> d=c.get_container_infos('partage')
>>> d['interfaces']
[{u'activate': True, u'container': u'partage', u'name': u'containers', u'ip': u'192.0.2.52', u'mask': u'255.255.255.0', u'method': u'bridge', u'container_group': u'partage', u'real_container': u'partage', u'gateway': u'192.0.2.1', u'bcast': u'192.0.2.255', u'linkto': u'br0'}]

Il y a moins d'interface dans le groupe de conteneur que dans le conteneur inclut dans ce groupe !


Demandes liées

Lié à creole - Tâche #8673: Creole agit différemment si on spécifie le conteneur Fermé
Lié à creole - Tâche #8365: Les variables "container_name_<conteneur>" ne sont pas générées en 2.4 Fermé 20/06/2014
Bloqué par creole - Tâche #8916: Les ressources dont le nom est de type list ne sont pas gérés Fermé 16/09/2014

Révisions associées

Révision 4f036302 (diff)
Ajouté par Daniel Dehennin il y a plus de 9 ans

Toujours retourner les infos du groupe de conteneurs

  • creole/client.py (CreoleClient.get_container_infos): Extrait le nom du
    groupe et retourne les informations de celui-ci.

Fixes: #8684 @2h

Historique

#1 Mis à jour par Emmanuel GARETTE il y a plus de 9 ans

  • Description mis à jour (diff)

#2 Mis à jour par Emmanuel GARETTE il y a plus de 9 ans

Après diagnostic il faut utiliser get_group_infos et non get_container_infos.

Le problème c'est que certaines applications utilisent l'un et d'autre l'autre.

C'est totalement problématique. Voici un exemple :

root@amonecole:~# cat test
%%current_container['interfaces']
root@amonecole:~# CreoleCat -s test -o test.fichier -c fichier
root@amonecole:~# CreoleCat -s test -o test.partage -c partage
root@amonecole:~# md5sum test.partage test.fichier 
34890f87ae91d14f077dd439370eabbf  test.partage
6c0da116cda3116bb262153b2aeb253f  test.fichier

CreoleCat n'est pas fiable !

#3 Mis à jour par Emmanuel GARETTE il y a plus de 9 ans

Voici un code fiable :

root@amonecole:~# cat test.py
from creole.client import CreoleClient, NotFoundError
import sys

cont = sys.argv[1]

c = CreoleClient()

try:
    print c.get_group_infos(cont)['interfaces']
except NotFoundError:
    print c.get_container_infos(cont)['interfaces']

Il faut modifier tous les appels à get_group_infos et get_container_infos par ce code.

Outre le fait que le code est peu compréhensible, il génère inutilement de temps de chargement inutilement lent. Ne voudrait-il mieux pas fusionner les deux méthodes par une seule fiable ?

Avec un conteneur, il génère 31 requêtes sur le serveur et prend 1s50.
Avec un groupe de conteneur, il génère 13 requêtes sur le serveur et prend 1s30.

#4 Mis à jour par Daniel Dehennin il y a plus de 9 ans

Si je comprends bien, il faudrait :

  1. Retourner les informations du groupe de conteneurs lorsque l’on demande les informations d’un des conteneurs de ce groupe ;
  2. Retourner les informations du conteneurs s’il ne fait pas parti du groupe.

Dans ce cas, nous pouvons modifier CreoleClient.get_container_infos() (source:creole/client.py@4183ad6#L608) :

    def get_container_infos(self, container):
        """Get all components of a container or its group

        :param container: container name
        :type container: `str`
        :return: components of the container or its group
        :rtype: `dict`

        """ 
        container_info = self.get_container(container)
        if container != container_info['group']:
            container_info = self.get_group_infos(container_info['group'])
        else:
            container_info.update(self.get_containers_components([container]))
        return container_info

#5 Mis à jour par Joël Cuissinat il y a plus de 9 ans

  • Tâche parente mis à #8326

#6 Mis à jour par Joël Cuissinat il y a plus de 9 ans

  • Tâche parente changé de #8326 à #8826

#7 Mis à jour par Daniel Dehennin il y a plus de 9 ans

  • Temps estimé mis à 4.00 h

#8 Mis à jour par Daniel Dehennin il y a plus de 9 ans

  • Restant à faire (heures) mis à 4.0

#9 Mis à jour par Daniel Dehennin il y a plus de 9 ans

  • Statut changé de Nouveau à En cours

#10 Mis à jour par Daniel Dehennin il y a plus de 9 ans

  • Assigné à mis à Daniel Dehennin

#11 Mis à jour par Daniel Dehennin il y a plus de 9 ans

  • Statut changé de En cours à Résolu
  • % réalisé changé de 0 à 100

#12 Mis à jour par Joël Cuissinat il y a plus de 9 ans

  • Restant à faire (heures) 4.0 supprimé

#13 Mis à jour par Benjamin Bohard il y a plus de 9 ans

  • Statut changé de Résolu à Fermé

Paquet testé : 2.4.1-11

Formats disponibles : Atom PDF