Project

General

Profile

Tâche #34515

Scénario #34440: Sur Zéphir on a systématiquement "détection de 1 fichiers modifiés" si on ajouter un dépôt additionnelle en mode clé

Étude

Added by Benjamin Bohard over 1 year ago. Updated over 1 year ago.

Status:
Fermé
Priority:
Normal
Assigned To:
Start date:
07/25/2022
Due date:
% Done:

100%

Remaining (hours):
0.0

History

#1 Updated by Benjamin Bohard over 1 year ago

  • Status changed from Nouveau to En cours

#2 Updated by Benjamin Bohard over 1 year ago

Il semble que le problème réside plutôt dans la conversion des objets complexes (listes, dictionnaires) en chaînes de caractères.
Test avec une fonction qui convertit tous les objets complexes en chaînes de caractères en partant des éléments les plus petits, sur le modèle de la fonction dans zéphir backend utils.convert.to_bytes

#-*- coding: utf-8 -*-
import cjson
import json
import codecs

def to_bytes(objet):
    """Transforme les objets str ou Binary contenus dans un objet en bytes
    """ 
    if isinstance(objet, tuple):
        l = []
        for item in objet:
            l.append(to_bytes(item))
        return '({})'.format(', '.join(l))
    if isinstance(objet, list):
        l = []
        for item in objet:
            l.append(to_bytes(item))
        return '[{}]'.format(', '.join(l))
    if isinstance(objet, dict):
        dico={}
        for cle in objet:
            dico[to_bytes(cle)] = to_bytes(objet[cle])
        return '{{{}}}'.format(', '.join(['{}: {}'.format(el[0], el[1]) for el in dico.items()]))
    if isinstance(objet, unicode):
        print(type(objet), objet)
        string =  objet.encode('utf-8')
        return string
    if isinstance(objet, int):
        return str(int)
    if objet == None:
        return ''
    return objet

with open('/etc/eole/config.eol', 'r') as eol:
#with codecs.open('/etc/eole/config.eol', 'r', 'utf-8') as eol:
    cu = cjson.decode(eol.read(), all_unicode=True)
    eol.seek(0)
    cs = cjson.decode(eol.read())
    eol.seek(0)
    cj = json.loads(eol.read())

with open('/tmp/variables.eol', 'w') as v:
    v.write('\n'.join(['{}:{}'.format(el[0], to_bytes(el[1].get('val'))) for el in sorted(cs.items()) if isinstance(el[1], dict)]))
    #v.write(u'\n'.join([u'{}:{}'.format(el[0].decode('utf-8'), to_bytes(el[1].get('val')).decode('utf-8')) for el in sorted(cu.items()) if isinstance(el[1], dict)]))
    #v.write(u'\n'.join([u'{}:{}'.format(el[0].decode('utf-8'), to_bytes(el[1].get('val')).decode('utf-8')) for el in sorted(cj.items()) if isinstance(el[1], dict)]))
    #v.write('\n'.join(['{}:{}'.format(el[0], el[1].get('val')) for el in sorted(cs.items()) if isinstance(el[1], dict)]))

#with codecs.open('/tmp/variables.eol', 'w', 'utf-8') as v:
    #v.write(u'\n'.join([u'{}:{}'.format(el[0].decode('utf-8'), to_bytes(el[1].get('val')).decode('utf-8')) for el in sorted(cs.items()) if isinstance(el[1], dict)]))
    #v.write(u'\n'.join([u'{}:{}'.format(el[0].decode('utf-8'), to_bytes(el[1].get('val')).decode('utf-8')) for el in sorted(cu.items()) if isinstance(el[1], dict)]))
    #v.write(u'\n'.join([u'{}:{}'.format(el[0].decode('utf-8'), to_bytes(el[1].get('val')).decode('utf-8')) for el in sorted(cj.items()) if isinstance(el[1], dict)]))

#3 Updated by Benjamin Bohard over 1 year ago

Le problème suivant qui se pose est le traitement différencié, sur Zéphir, des objets complexes et des objets simples.

Exemple sur zéphir :

additional_repository_key_type:{'0': 'URL de la clé'}
additional_repository_key_url:{'0': 'https://vulcain.cadoles.com/cadoles.gpg'}
additional_repository_name:['cadoles']
additional_repository_source:{'0': 'deb https://vulcain.cadoles.com 2.7.0-unstable main'}
adresse_ip_dns:['192.168.0.1']
adresse_ip_eth0:192.168.0.5

Et avec la conversion en profondeur et l’utilisation du paramètre all_unicode=True, sur le seth :

additional_repository_key_type:{'0': 'URL de la clé'}
additional_repository_key_url:{'0': 'https://vulcain.cadoles.com/cadoles.gpg'}
additional_repository_name:['cadoles']
additional_repository_source:{'0': 'deb https://vulcain.cadoles.com 2.7.0-unstable main'}
adresse_ip_dns:['192.168.0.1']
adresse_ip_eth0:'192.168.0.5'

Enfin, avec la conversion en profondeur mais avec le paramètre all_unicode=False, sur le seth:

additional_repository_key_type:{0: 'URL de la clé'}
additional_repository_key_url:{0: https://vulcain.cadoles.com/cadoles.gpg}
additional_repository_name:[cadoles]
additional_repository_source:{0: deb https://vulcain.cadoles.com 2.7.0-unstable main}
adresse_ip_dns:[192.168.0.1]
adresse_ip_eth0:192.168.0.5

Dans ce dernier cas, seule la variable additional_repository_key_type est convertie en unicode (c’est la seule qui le nécessite)

#4 Updated by Benjamin Bohard over 1 year ago

  • Status changed from En cours to À valider

#5 Updated by Benjamin Bohard over 1 year ago

  • % Done changed from 0 to 100

#6 Updated by Benjamin Bohard over 1 year ago

  • Assigned To set to Benjamin Bohard

#7 Updated by Ludwig Seys over 1 year ago

  • Status changed from À valider to Résolu

#8 Updated by Joël Cuissinat over 1 year ago

  • Status changed from Résolu to Fermé
  • Remaining (hours) set to 0.0

Also available in: Atom PDF