Tâche #12764
Distribution EOLE - Scénario #12978: Assistance aux utilisateurs (39-41)
Diagnose des conteneurs de fonctionne pas
Description
Sur un AmonEcole 2.5 les conteneurs sont toujours en erreur dans le diagnose même si tout vas bien.
Il semblerais que la commande lxc-info ai légèrement changé.
En 2.4 elle affiche
status: RUNNING
en 2.5 elle affiche
Status: RUNNING
Le code de pyeole diagnose cherche "status" et non "Status".
Demandes liées
Révisions associées
Correction du diagnose « test_containers() »
Les variables « OK » et « NOK » ne doivent pas être évaluées dans un
contexte booléen.
De plus, la commande « lxc-info » a évolué et permet de n’interroger que
l’état d’un conteneur, évitant d’avoir à chercher parmis plusieurs
lignes.
- pyeole/diagnose/diagnose.py (test_container): Nouvelle fonction
testant si le status LXC d’un conteneur est « RUNNING » et si l’accès
SSH est fonctionnel.
(test_containers): Utilisation de la nouvelle fonction.
Ref: #12764
Historique
#1 Mis à jour par Philippe Caseiro il y a plus de 8 ans
- Projet changé de eole-common à python-pyeole
#2 Mis à jour par Joël Cuissinat il y a plus de 8 ans
idem que https://dev-eole.ac-dijon.fr/issues/10919 ?
#3 Mis à jour par Daniel Dehennin il y a plus de 8 ans
En fait il s’agit d’une erreur basique de logique.
OK = 0 NOK = 1 NOT_AVAILABLE = 2
On ne peut pas utiliser ces valeurs en tant que booléen.
Je propose le diff suivant:
diff --git a/pyeole/diagnose/diagnose.py b/pyeole/diagnose/diagnose.py index 93d957b..560f2a9 100644 --- a/pyeole/diagnose/diagnose.py +++ b/pyeole/diagnose/diagnose.py @@ -273,12 +273,11 @@ def test_containers(): state: RUNNING pid: 19301 """ - is_stated = NOK + ret[container] = False for line in out.split('\n'): - if line.startswith('state: ') and line.split()[-1] == 'RUNNING': - is_stated = OK + if line.startswith('State: ') and line.split()[-1] == 'RUNNING': + ret[container] = True break - ret[container] = is_stated return ret
#4 Mis à jour par Daniel Dehennin il y a plus de 8 ans
Il y a beaucoup mieux en fait:
diff --git a/pyeole/diagnose/diagnose.py b/pyeole/diagnose/diagnose.py index 93d957b..a8eef36 100644 --- a/pyeole/diagnose/diagnose.py +++ b/pyeole/diagnose/diagnose.py @@ -26,7 +26,9 @@ import logging from creole.client import CreoleClient from creole.config import VIRTMASTER -from pyeole.process import system_code, system_out +from pyeole.process import system_code +from pyeole.process import system_out +from pyeole.process import tcpcheck log = logging.getLogger(__name__) @@ -258,27 +260,50 @@ def test_clamd(): return '' +def test_container(name, ip=None): + """Test if a container is running and reachable + + Check the state with the ``lxc-info`` command. + + If :data:`ip` is provided and the state is OK, check if SSH port + is open. + + :param name: name of the container + :type name: `str` + :return: if the container is running and reachable + :rtype: `bool` + + """ + is_running = False + code, out, err = system_out(['lxc-info', '--state', '-n', name]) + if code == 0: + """ + lxc-info --state returns something like: + State: RUNNING + """ + is_running = out.strip().endswith('RUNNING') + + if is_running and ip is not None: + is_running = tcpcheck(ip, '22', '2') + + return is_running + + def test_containers(): + """Check if the containers are running + + :return: The running state for each container + :rtype: `dict` + + """ client = CreoleClient() ret = {} for container in client.get_groups(): if container in ['all', VIRTMASTER]: continue - code, out, err = system_out(['lxc-info', '-n', container]) - if code != 0: - ret[container] = False - else: - """ - lxc-info returns something like: - state: RUNNING - pid: 19301 - """ - is_stated = NOK - for line in out.split('\n'): - if line.startswith('state: ') and line.split()[-1] == 'RUNNING': - is_stated = OK - break - ret[container] = is_stated + ip = client.get_creole('adresse_ip_{0}'.format(container)) + ret[container] = test_container(container, ip) + return ret
J’ai ça sur une branche, à voir si nous l’appliquons pour la 2.5.1.
#5 Mis à jour par Daniel Dehennin il y a plus de 8 ans
- Tâche parente mis à #12978
#6 Mis à jour par Daniel Dehennin il y a plus de 8 ans
- Assigné à mis à Daniel Dehennin
- Restant à faire (heures) mis à 1.0
#7 Mis à jour par Daniel Dehennin il y a plus de 8 ans
- Statut changé de Nouveau à En cours
- % réalisé changé de 0 à 100
Passage du patch en 2.5.1.
#8 Mis à jour par Daniel Dehennin il y a plus de 8 ans
- Restant à faire (heures) changé de 1.0 à 0.25
#9 Mis à jour par Scrum Master il y a plus de 8 ans
- Statut changé de En cours à Résolu
#10 Mis à jour par Joël Cuissinat il y a plus de 8 ans
- Statut changé de Résolu à Fermé
- Restant à faire (heures) changé de 0.25 à 0.0
OK
#11 Mis à jour par Joël Cuissinat il y a environ 6 ans
- Lié à Tâche #23205: Problème au diagnose en mode conteneur ajouté