Project

General

Profile

Tâche #27094

Scénario #27095: Correction de bug 2.7.0

Messages d'erreur sur des problèmes d’encodage des chaînes de caractères sur 2.7

Added by Patrice THEBAULT over 3 years ago. Updated over 3 years ago.

Status:
Fermé
Priority:
Normal
Assigned To:
Start date:
03/04/2019
Due date:
% Done:

100%

Remaining (hours):
0.0

Description

sur un seth membre, dans ead3/Sauvegardes les différentes fonctions renvoient les messages :

An error occured: erreur inattendue "cannot use a string pattern on a bytes-like object" dans la fonction "is_fs_type" avec les arguments "['ext4']" et "{}" pour l'option "Format du système de fichiers"

puis

Connexion au serveur Salt perdue/impossible.

Associated revisions

Revision dfc23ca8 (diff)
Added by Benjamin Bohard over 3 years ago

Do not decode unicode string

Decoding is now done in system_out if python is v3.

Ref #27094

Revision 2098a740 (diff)
Added by Benjamin Bohard over 3 years ago

Decode subprocess output to prevent `str` VS `bytes` pitfall.

When used in python 3 environment, system_out should output `str`
objects to be compatible with methods used on python 2 `str` before.

Ref #27094

Revision a9ea176e (diff)
Added by Benjamin Bohard over 3 years ago

Do not decode unicode string

Decoding is now done in system_out if python is v3.

Ref #27094

Revision a4e57ab3 (diff)
Added by Benjamin Bohard over 3 years ago

Decode subprocess output to prevent `str` VS `bytes` pitfall.

When used in python 3 environment, system_out should output `str`
objects to be compatible with methods used on python 2 `str` before.

Ref #27094

History

#1 Updated by Emmanuel IHRY over 3 years ago

  • Parent task set to #27095

#2 Updated by Philippe Carre over 3 years ago

Quasiment le même message d'erreur avec la conf DHCP dans EAD3, sur esbl et essl 2.7.0 :

menu 'Paramétrer le DHCP'

 The minion function caused an exception: Traceback (most recent call last): File "/usr/lib/python3/dist-packages/salt/minion.py", line 1493, in _thread_return return_data = executor.execute() File "/usr/lib/python3/dist-packages/salt/executors/direct_call.py", line 28, in execute return self.func(*self.args, **self.kwargs) File "/var/cache/salt/minion/extmods/modules/ead/__init__.py", line 55, in func return getattr(module, function)(*args, **kwargs) File "/var/cache/salt/minion/extmods/modules/ead/dhcp/__init__.py", line 34, in wrapper cfg = _get_loader() File "/var/cache/salt/minion/extmods/modules/ead/dhcp/__init__.py", line 47, in _get_loader force_eoleextraconfig=_force_eoleextraconfig, reload_config=_reload_config) File "/usr/lib/python3/dist-packages/creole/loader.py", line 830, in creole_loader force_instanciate=force_instanciate) File "/usr/lib/python3/dist-packages/creole/loader1.py", line 325, in load_config_eol force_instanciate=force_instanciate) File "/usr/lib/python3/dist-packages/creole/loader1.py", line 724, in config_load_values force_load_owner=force_load_owner) File "/usr/lib/python3/dist-packages/creole/loader1.py", line 662, in config_load_store config.setattr(path, value, force_permissive=True) File "/usr/lib/python3/dist-packages/tiramisu/config.py", line 225, in setattr not_raises, index=index) File "/usr/lib/python3/dist-packages/tiramisu/config.py", line 240, in setattr not_raises=not_raises, index=index) File "/usr/lib/python3/dist-packages/tiramisu/value.py", line 420, in setitem err = opt.impl_validate(value, fake_context, display_warnings=False, force_index=index) File "/usr/lib/python3/dist-packages/tiramisu/option/baseoption.py", line 655, in impl_validate return do_validation(value, None, None) File "/usr/lib/python3/dist-packages/tiramisu/option/baseoption.py", line 615, in do_validation error = calculation_validator(_value, _index) File "/usr/lib/python3/dist-packages/tiramisu/option/baseoption.py", line 585, in calculation_validator is_validator=True) File "/usr/lib/python3/dist-packages/tiramisu/autolib.py", line 239, in carry_out_calculation ret = calculate(option, callback, is_validator, args, kwargs) File "/usr/lib/python3/dist-packages/tiramisu/autolib.py", line 286, in calculate raise ConfigError(msg) tiramisu.error.ConfigError: erreur inattendue "sequence item 0: expected str instance, bytes found" dans la fonction "is_lv_name" avec les arguments "['home']" et "{}" pour l'option "Volume logique à étendre" 

menu 'DHCP : Compatibilité EAD2/EAD3'

 An error occured: erreur inattendue "sequence item 0: expected str instance, bytes found" dans la fonction "is_lv_name" avec les arguments "['var+log']" et "{}" pour l'option "Volume logique à étendre" ✕ 

#3 Updated by Benjamin Bohard over 3 years ago

  • Subject changed from Message d'erreur sur les fonctions Sauvegardes (Bareos) sur un seth membre to Messages d'erreur sur des problèmes d’encodage des chaînes de caractères sur 2.7

Autre cas où on peut suspecter un problème de version de python pour le traitement des chaînes de caractère :

mars 06 09:55:26 file creoled[15216]: 127.0.0.1 - - [06/Mar/2019:09:55:26] "GET /get/quota/quota/directories HTTP/1.1" 200 36 "" "python-requests/2.18.4" 
mars 06 09:55:28 file salt-minion-ead3[17708]: Traceback (most recent call last):
mars 06 09:55:28 file salt-minion-ead3[17708]:   File "/var/lib/ead3/var/cache/salt/minion/extmods/modules/ead/bareosfilesselection/__init__.py", line 29, in submit
mars 06 09:55:28 file salt-minion-ead3[17708]:     return custom.submit(*args, **kwargs)
mars 06 09:55:28 file salt-minion-ead3[17708]:   File "/var/lib/ead3/var/cache/salt/minion/extmods/modules/ead/bareosfilesselection/custom.py", line 37, in submit
mars 06 09:55:28 file salt-minion-ead3[17708]:     return __action__.submit(*args, **kwargs)
mars 06 09:55:28 file salt-minion-ead3[17708]:   File "/var/lib/ead3/var/cache/salt/minion/extmods/modules/ead/bareosfilesselection/action.py", line 64, in submit
mars 06 09:55:28 file salt-minion-ead3[17708]:     config_save_values(config, modname)
mars 06 09:55:28 file salt-minion-ead3[17708]:   File "/usr/lib/python3/dist-packages/creole/loader1.py", line 801, in config_save_values
mars 06 09:55:28 file salt-minion-ead3[17708]:     store = config_get_values(config, namespace, check_mandatory)
mars 06 09:55:28 file salt-minion-ead3[17708]:   File "/usr/lib/python3/dist-packages/creole/loader1.py", line 740, in config_get_values
mars 06 09:55:28 file salt-minion-ead3[17708]:     ).mandatory_warnings(force_permissive=True))
mars 06 09:55:28 file salt-minion-ead3[17708]:   File "/usr/lib/python3/dist-packages/tiramisu/value.py", line 690, in mandatory_warnings
mars 06 09:55:28 file salt-minion-ead3[17708]:     for path in _mandatory_warnings(descr):
mars 06 09:55:28 file salt-minion-ead3[17708]:   File "/usr/lib/python3/dist-packages/tiramisu/value.py", line 661, in _mandatory_warnings
mars 06 09:55:28 file salt-minion-ead3[17708]:     for path in _mandatory_warnings(opt, currpath + [name]):
mars 06 09:55:28 file salt-minion-ead3[17708]:   File "/usr/lib/python3/dist-packages/tiramisu/value.py", line 661, in _mandatory_warnings
mars 06 09:55:28 file salt-minion-ead3[17708]:     for path in _mandatory_warnings(opt, currpath + [name]):
mars 06 09:55:28 file salt-minion-ead3[17708]:   File "/usr/lib/python3/dist-packages/tiramisu/value.py", line 685, in _mandatory_warnings
mars 06 09:55:28 file salt-minion-ead3[17708]:     ret = _is_properties_option(err, path)
mars 06 09:55:28 file salt-minion-ead3[17708]:   File "/usr/lib/python3/dist-packages/tiramisu/value.py", line 648, in _is_properties_option
mars 06 09:55:28 file salt-minion-ead3[17708]:     raise err
mars 06 09:55:28 file salt-minion-ead3[17708]: ValueError: "b'/home'" est une valeur invalide pour l'option "Répertoire gérant les quotas" de type nom de fichier, invalide caractère

#4 Updated by Benjamin Bohard over 3 years ago

On utilise directement la sortie de la fonction system_out comme si c’était du type str alors qu’avec le passage avec python 3, c’est du type bytes.

En ajoutant une conversion conditionnée par la version de python dans process.py et en retirant les decode qu’on avait mis en place sur certaines fonctions uniquement, ça corrige le problème. À vérifier si la suppression des decode n’introduit pas une régression dans le cas où c’est utilisé avec python 2 (est-ce que c’est encore le cas ?)

#5 Updated by Benjamin Bohard over 3 years ago

  • Project changed from eole-ead3 to Distribution EOLE
  • Status changed from Nouveau to En cours

#6 Updated by Benjamin Bohard over 3 years ago

  • Description updated (diff)
  • Assigned To set to Benjamin Bohard

#7 Updated by Benjamin Bohard over 3 years ago

Liste des fichiers de fonction présents sur un 2.7.0 :

usr/share/creole/funcs/__init__.py        admin/creole-common
usr/share/creole/funcs/calc_ldap_dn.py        admin/eole-ecdl,admin/eole-zephir-medde
usr/share/creole/funcs/cron_schedule.py        admin/eole-ad-dc
usr/share/creole/funcs/eole_smartmontools.py        admin/eole-smartmontools
usr/share/creole/funcs/eos-ldapreader.py        admin/eole-client-annuaire
usr/share/creole/funcs/get_etc_hosts.py        admin/eole-server
usr/share/creole/funcs/master_network_interfaces.py        admin/eole-server
usr/share/creole/funcs/partitioning_utils.py        admin/eole-server
usr/share/creole/funcs/pg_funcs.py        admin/eole-postgresql
usr/share/creole/funcs/quota.py        admin/eole-fichier-actions
usr/share/creole/funcs/submulti_utils.py        admin/eole-zephir-medde,admin/seth-ecologie
usr/share/creole/funcs/uploadedfiles.py        web/eole-ead3

system_out est utilisé dans :
  • usr/share/creole/funcs/partitioning_utils.py admin/eole-server
  • usr/share/creole/funcs/quota.py admin/eole-fichier-actions

Dans partitioning_utils.py, le résultat est décodé pour obtenir de l’unicode. Ce décodage ne peut pas être effectué sur un type str en python 3 mais doit toujours être fait sur un type str en python 2.

#8 Updated by Benjamin Bohard over 3 years ago

  • Status changed from En cours to Résolu

#9 Updated by Patrice THEBAULT over 3 years ago

  • Status changed from Résolu to Fermé
  • % Done changed from 0 to 100
  • Remaining (hours) set to 0.0

testé sur un seth 2.7.0 -> plus de message d'erreur

Also available in: Atom PDF