Project

General

Profile

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

Added by Emmanuel GARETTE over 6 years ago. Updated over 6 years ago.

Status:
Fermé
Priority:
Haut
Assigned To:
Start date:
Due date:
% Done:

100%

Estimated time:
4.00 h
Spent time:
Remaining (hours):

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 !


Related issues

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

Associated revisions

Revision 4f036302 (diff)
Added by Daniel Dehennin over 6 years ago

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

History

#1 Updated by Emmanuel GARETTE over 6 years ago

  • Description updated (diff)

#2 Updated by Emmanuel GARETTE over 6 years ago

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 Updated by Emmanuel GARETTE over 6 years ago

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 Updated by Daniel Dehennin over 6 years ago

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 Updated by Joël Cuissinat over 6 years ago

  • Parent task set to #8326

#6 Updated by Joël Cuissinat over 6 years ago

  • Parent task changed from #8326 to #8826

#7 Updated by Daniel Dehennin over 6 years ago

  • Estimated time set to 4.00 h

#8 Updated by Daniel Dehennin over 6 years ago

  • Remaining (hours) set to 4.0

#9 Updated by Daniel Dehennin over 6 years ago

  • Status changed from Nouveau to En cours

#10 Updated by Daniel Dehennin over 6 years ago

  • Assigned To set to Daniel Dehennin

#11 Updated by Daniel Dehennin over 6 years ago

  • Status changed from En cours to Résolu
  • % Done changed from 0 to 100

#12 Updated by Joël Cuissinat over 6 years ago

  • Remaining (hours) deleted (4.0)

#13 Updated by Benjamin Bohard over 6 years ago

  • Status changed from Résolu to Fermé

Paquet testé : 2.4.1-11

Also available in: Atom PDF