Anomalie #8469
Mauvaise gestion des doublons par groupe de conteneurs
Description
Avec l'anti-virus activé sur le proxy et désactivé sur le mail (cf. configuration jointe), le service est en erreur dans diagnose :
. Anti-virus => Erreur
Le service affiche l'erreur suivante :
root@amon:~# service clamav-daemon start * Starting ClamAV daemon clamd ERROR: Can't open /var/log/clamav/clamav.log in append mode (check permissions!). ERROR: Can't initialize the internal logger [fail]
Demandes liées
Révisions associées
Fusion des ressources par groupe de conteneurs
L’inventaires des ressources par groupe de conteneur ne prend en compte
que la première occurrence d’une ressource, identifié par l’attribut
« name ».
Si la première occurrence est désactivée et que la seconde est activé,
alors la ressource est considérée comme désactivée.
Au lieu de supprimer les doublons, il faut les fusionner.
- creole/client.py (_merge_entries): Fusionne les dictionnaires de
ressources en gérant les attributs par type.
(_merge_duplicates_in_components): Nouveau nom de
« _remove_duplicates_in_components() ».
Stocke la première occurrence d’une ressource et merge toutes les
occurrences suivantes si elles sont actives.
(CreoleClient.get_containers_components): Utilise le nouveau nom
« _merge_duplicates_in_components() ».
Fixes: #8469 @1h30m
Historique
#1 Mis à jour par Daniel Dehennin il y a presque 10 ans
Le fichier /etc/clamav/clamd.conf
est conditionné de la façon suivante :
- dans le proxy, si
activer_clam
est àoui
, alors le fichier est templatisé - dans le mail, si
exim_clamav
est àoui
, alors le fichier est templatisé
Le soucis c’est :
CreoleGet activer_clam
=>oui
CreoleGet exim_clamav
=>non
(Pdb) pp [ f for f in group['files'] if f['name'].endswith('clamd.conf') ] [{u'container': u'mail', u'container_group': u'mail', u'filelist': u'clamav_mail', u'full_name': u'/etc/clamav/clamd.conf', u'level': u'module', u'mkdir': False, u'name': u'/etc/clamav/clamd.conf', u'real_container': u'root', u'rm': False, u'source': u'/var/lib/creole/clamd.conf'}]
Il manque la clef activate
à True
.
On voit que la gestion des doublons ne retient que la déclaration du conteneur mail.
#2 Mis à jour par Emmanuel GARETTE il y a presque 10 ans
Il faut remplacer les "hidden_if_in" par des "hidden_if_not_in".
#3 Mis à jour par Emmanuel GARETTE il y a presque 10 ans
- Distribution changé de EOLE 2.3 à EOLE 2.4
#4 Mis à jour par Daniel Dehennin il y a presque 10 ans
Emmanuel GARETTE a écrit :
Il faut remplacer les "hidden_if_in" par des "hidden_if_not_in".
Ça n’a pas l’air de fonctionner :
root@amon:~# grep 'disable.*activer_clam' /usr/share/eole/creole/dicos/* /usr/share/eole/creole/dicos/20_antivirus.xml: <condition name='disabled_if_not_in' source='activer_clam'> /usr/share/eole/creole/dicos/23_proxy.xml: <condition name='disabled_if_not_in' source='activer_clam'> /usr/share/eole/creole/dicos/26_mail.xml: <condition name='disabled_if_not_in' source='activer_clam' fallback='True'>
>>> from creole.loader import creole_loader
>>> conf = creole_loader()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/creole/loader.py", line 286, in creole_loader
loader.read_dir(dirs, namespace)
File "/usr/lib/python2.7/dist-packages/creole/var_loader.py", line 947, in read_dir
self._gen_descr(namespace)
File "/usr/lib/python2.7/dist-packages/creole/var_loader.py", line 1370, in _gen_descr
containers = self.gen_container(paths, namespace='containers')
File "/usr/lib/python2.7/dist-packages/creole/var_loader.py", line 407, in gen_container
ret.append(getattr(self, func_name)(paths))
File "/usr/lib/python2.7/dist-packages/creole/loader.py", line 189, in gen_files
requires_key='activate')
File "/usr/lib/python2.7/dist-packages/creole/var_loader.py", line 386, in _gen_tiramisu_config
requires=requires, properties=properties))
File "/usr/lib/python2.7/dist-packages/tiramisu/option.py", line 297, in __init__
super(Option, self).__init__(name, doc, requires, properties)
File "/usr/lib/python2.7/dist-packages/tiramisu/option.py", line 71, in __init__
requires, self._name)
File "/usr/lib/python2.7/dist-packages/tiramisu/option.py", line 1500, in validate_requires_arg
" action: {1}").format(name, action))
ValueError: incohérence dans les types action pour l'option : activate action disabled
#5 Mis à jour par Daniel Dehennin il y a presque 10 ans
Peut importe le sens du test.
Même sans supprimer les doublons :
>>> from creole.client import CreoleClient; c = CreoleClient()
>>> import pprint; pp = pprint.PrettyPrinter(indent=4)
>>> files_dict = c.get('/containers/files')
>>> files = c.to_list_of_dict(files_dict, 'files')
>>> pp.pprint([ f for f in files if f['name'].endswith('clamd.conf') ])
[ { u'container': u'proxy',
u'container_group': u'internet',
u'filelist': u'clamav_proxy',
u'full_name': u'/etc/clamav/clamd.conf',
u'level': u'module',
u'mkdir': False,
u'name': u'/etc/clamav/clamd.conf',
u'real_container': u'root',
u'rm': False,
u'source': u'/var/lib/creole/clamd.conf'},
{ u'container': u'mail',
u'container_group': u'mail',
u'filelist': u'clamav_mail',
u'full_name': u'/etc/clamav/clamd.conf',
u'level': u'module',
u'mkdir': False,
u'name': u'/etc/clamav/clamd.conf',
u'real_container': u'root',
u'rm': False,
u'source': u'/var/lib/creole/clamd.conf'}]
Il doit y a un soucis avec les conditions car le fichier n’est actif pour le compte d’aucun des conteneurs.
#6 Mis à jour par Daniel Dehennin il y a presque 10 ans
Daniel Dehennin a écrit :
Peut importe le sens du test.
Même sans supprimer les doublons :
[...]
Il doit y a un soucis avec les conditions car le fichier n’est actif pour le compte d’aucun des conteneurs.
Sur un amon2.4 non trafiqué j’obtiens :
[ { u'activate': True, u'container': u'proxy', u'container_group': u'internet', u'filelist': u'clamav_proxy', u'full_name': u'/etc/clamav/clamd.conf', u'level': u'module', u'mkdir': False, u'name': u'/etc/clamav/clamd.conf', u'real_container': u'root', u'rm': False, u'source': u'/var/lib/creole/clamd.conf'}, { u'container': u'mail', u'container_group': u'mail', u'filelist': u'clamav_mail', u'full_name': u'/etc/clamav/clamd.conf', u'level': u'module', u'mkdir': False, u'name': u'/etc/clamav/clamd.conf', u'real_container': u'root', u'rm': False, u'source': u'/var/lib/creole/clamd.conf'}]
En revanche:
>>> from creole.client import CreoleClient; c = CreoleClient()
>>> import pprint; pp = pprint.PrettyPrinter(indent=4)
>>> root_infos = c.get_group_infos('root')
>>> pp.pprint([ f for f in root_infos['files'] if f['name'].endswith('clamd.conf') ])
[ { u'container': u'mail',
u'container_group': u'mail',
u'filelist': u'clamav_mail',
u'full_name': u'/etc/clamav/clamd.conf',
u'level': u'module',
u'mkdir': False,
u'name': u'/etc/clamav/clamd.conf',
u'real_container': u'root',
u'rm': False,
u'source': u'/var/lib/creole/clamd.conf'}]
Il y a donc bien un soucis avec la gestion des doublons (creole:source:creole/client.py@64e4b21#L90)
Il faudrait renommer cette fonction en quelque chose comme _merge_entries()
et gérer la fusion comme dans #8403.
#7 Mis à jour par Daniel Dehennin il y a presque 10 ans
- Projet changé de eole-antivirus à creole
- Début mis à 26/06/2014
C’est un problème creole.
#8 Mis à jour par Daniel Dehennin il y a plus de 9 ans
- Sujet changé de clamav-daemon non fonctionnel sur Amon à Mauvaise gestion des doublons par groupe de conteneurs
- Description mis à jour (diff)
- Statut changé de A étudier à Accepté
- Assigné à mis à Daniel Dehennin
#9 Mis à jour par Daniel Dehennin il y a plus de 9 ans
- Statut changé de Accepté à Résolu
- % réalisé changé de 0 à 100
Appliqué par commit a213d5bd8bce928d018ed94d8c4621f104cbf468.
#10 Mis à jour par Joël Cuissinat il y a plus de 9 ans
- Statut changé de Résolu à Fermé
Service OK avec le fichier de configuration fourni.