Projet

Général

Profil

Scénario #35068

Zéphir : une erreur dans les dictionnaires empêche l'affichage de l'état

Ajouté par Emmanuel GARETTE il y a plus d'un an. Mis à jour il y a 10 mois.

Statut:
Terminé (Sprint)
Priorité:
Normal
Assigné à:
Catégorie:
-
Début:
01/10/2022
Echéance:
01/01/2024
% réalisé:

100%

Points de scénarios:
1.0
Restant à faire (heures):
0.00 heure
Estimation basée sur la vélocité:
Release:
Liens avec la release:
Auto

Description

Je ne devrais pas avoir d'erreur dans les dictionnaires, mais si cela était le cas, l'état du serveur passe au vert dans la page : https://zephir.temmii.com:8070/serveur/aff_groupe?id_groupe=XXXX

Pour reproduire :
- générer une erreur sur le serveur distant
- ajouter une dictionnaire incorrect

Dans la page "Liste des serveurs sélectionnés" l'état passe au vert.

Le problème est dans le fichier : /usr/lib/python3/dist-packages/zephir/backend/lib_backend.py

    def check_maj_status(self, maj_checker, show_installed = False, debnames = []):
        """vérifie l'état de mise à jour d'un serveur
        """ 
        # liste des paquets remontés par le serveur
        if type(debnames) != list:
            debnames = [debnames]
        liste_pkgs = []
        # on regarde le type de mise à jour configurée (minimale/complète) et le serveur de mise à jour
        type_maj = 'complete'
        dico = self.parsedico()
        # champ type_maj inexistant sur eole 2.4 et >
        serv_maj = dico['serveur_maj']
        # utilisation de serveur spécifique pour les mises à jour ubuntu selon la configuration
        if dico.get('ubuntu_update_mirrors', ''):
            serv_maj_ubuntu = dico['ubuntu_update_mirrors']
        else:
            serv_maj_ubuntu = serv_maj
        # utilisation de serveur spécifique pour les mises à jour envole selon la configuration
        if dico.get('envole_update_mirrors', ''):
            serv_maj_envole = dico['envole_update_mirrors']
        else:
            serv_maj_envole = serv_maj
        version = self.module_version
        pkg_file = os.path.join(os.path.abspath(config.PATH_ZEPHIR),'data','packages%s.list' % self.id_s)
        # on compare les paquets installés avec ceux disponibles sur le serveur de maj
        liste_pkgs, maj_infos = maj_checker.check_packages(self.id_s, self.maj_infos,
                                                           pkg_file, debnames, version,
                                                           serv_maj, serv_maj_ubuntu,
                                                           serv_maj_envole, type_maj,
                                                           show_installed)
        if maj_infos is not None and not debnames and not show_installed and maj_infos != self.maj_infos:
            # la liste des paquets non à jour a changé, on met à jour l'état du serveur
            try:
                nb_pack = len(maj_infos[0])
                if len(maj_infos[0]) > 0:
                    self.edit_serveur({'maj':len(maj_infos[0])})
                    self.maj_params({'query_maj':[len(maj_infos[0]),time.ctime()]})
                else:
                    self.edit_serveur({'maj':0})
                    self.maj_params({'query_maj':[0,time.ctime()]})
                self.maj_infos = maj_infos
            except:
                traceback.print_exc()
                pass
        return liste_pkgs

Devient :

    def check_maj_status(self, maj_checker, show_installed = False, debnames = []):
        """vérifie l'état de mise à jour d'un serveur
        """ 
        # liste des paquets remontés par le serveur
        if type(debnames) != list:
            debnames = [debnames]
        liste_pkgs = []
        # on regarde le type de mise à jour configurée (minimale/complète) et le serveur de mise à jour
        type_maj = 'complete'
        try:
            dico = self.parsedico()
            # champ type_maj inexistant sur eole 2.4 et >
            serv_maj = dico['serveur_maj']
            # utilisation de serveur spécifique pour les mises à jour ubuntu selon la configuration
            if dico.get('ubuntu_update_mirrors', ''):
                serv_maj_ubuntu = dico['ubuntu_update_mirrors']
            else:
                serv_maj_ubuntu = serv_maj
            # utilisation de serveur spécifique pour les mises à jour envole selon la configuration
            if dico.get('envole_update_mirrors', ''):
                serv_maj_envole = dico['envole_update_mirrors']
            else:
                serv_maj_envole = serv_maj
            version = self.module_version
            pkg_file = os.path.join(os.path.abspath(config.PATH_ZEPHIR),'data','packages%s.list' % self.id_s)
            # on compare les paquets installés avec ceux disponibles sur le serveur de maj
            liste_pkgs, maj_infos = maj_checker.check_packages(self.id_s, self.maj_infos,
                                                               pkg_file, debnames, version,
                                                               serv_maj, serv_maj_ubuntu,
                                                               serv_maj_envole, type_maj,
                                                               show_installed)
            if maj_infos is not None and not debnames and not show_installed and maj_infos != self.maj_infos:
                # la liste des paquets non à jour a changé, on met à jour l'état du serveur
                try:
                    nb_pack = len(maj_infos[0])
                    if len(maj_infos[0]) > 0:
                        self.edit_serveur({'maj':len(maj_infos[0])})
                        self.maj_params({'query_maj':[len(maj_infos[0]),time.ctime()]})
                    else:
                        self.edit_serveur({'maj':0})
                        self.maj_params({'query_maj':[0,time.ctime()]})
                    self.maj_infos = maj_infos
                except:
                    traceback.print_exc()
                    pass
        except:
            pass
        return liste_pkgs

Sous-tâches

Tâche #35422: Gestion d'un dictionnaire invalide dans zéphir pour l'affichage d'étatFerméLaurent Gourvenec

Tâche #35423: TestFerméBenjamin Bohard

Historique

#1 Mis à jour par Emmanuel GARETTE il y a plus d'un an

  • Description mis à jour (diff)

#2 Mis à jour par Joël Cuissinat il y a environ un an

  • Tâche parente mis à #35222

#3 Mis à jour par Joël Cuissinat il y a 11 mois

  • Tâche parente #35222 supprimé
  • Points de scénarios mis à 1.0

#4 Mis à jour par Joël Cuissinat il y a 11 mois

  • Tracker changé de Tâche à Scénario
  • Début 24/11/2022 supprimé
  • Release mis à Carnet de produit (Cadoles)

#5 Mis à jour par Benjamin Bohard il y a 11 mois

  • Echéance mis à 01/01/2024
  • Assigné à mis à Benjamin Bohard
  • Version cible mis à Carnet Cadoles
  • Début mis à 01/10/2022

#6 Mis à jour par Laurent Gourvenec il y a 11 mois

Je ne reproduit pas le problème avec un zéphir 2.9 et un scribe 2.7.2.
J'ai créé 2 erreurs : 1 problème bareos remonté par l'agent zéphir et des mises-à-jour à faire.
J'ai ajouté un dictionnaire invalide dans /usr/share/creole/dicos puis dans /usr/share/creole/dicos/local et via un dico local sur zéphir (non envoyé) mais l'état reste en erreur.
Emmanuel, est-ce que tu aurais plus de précision à apporter stp ? La manière d'ajouter le dico, le type d'erreur dans le dico, les versions de zéphir et du serveur, le type d'erreur qui se retrouve masquée, etc...

Edit : j'arrive à produire la traceback et effectivement, l'état ne se mets pas à jour corrrectement.

#7 Mis à jour par Laurent Gourvenec il y a 11 mois

  • Assigné à changé de Benjamin Bohard à Laurent Gourvenec

#8 Mis à jour par Joël Cuissinat il y a 10 mois

  • Statut changé de Nouveau à Terminé (Sprint)
  • Version cible changé de Carnet Cadoles à Livraison Cadoles 31/05/2023
  • Release changé de Carnet de produit (Cadoles) à EOLE 2.8.0

Formats disponibles : Atom PDF