Anomalie #6087
Pouvoir gérer un service non déclaré dans un dico
Description
run-parts: executing /usr/share/eole/posttemplate/00-arv reconfigure Traceback (most recent call last): File "/usr/share/eole/posttemplate/00-arv", line 85, in <module> creole_service_out({'name': 'arv', 'method': 'upstart'}, 'stop', container={'name': 'root'}) File "/usr/lib/python2.7/dist-packages/pyeole/decorator.py", line 192, in wrapper return self.decorate(*args, **kwargs) File "/usr/lib/python2.7/dist-packages/pyeole/decorator.py", line 439, in decorate ret = self.decorated(*args, **kwargs) File "/usr/lib/python2.7/dist-packages/pyeole/service/__init__.py", line 478, in creole_service_out manage_service(action, service[u'name'], container=container[u'name']) File "/usr/lib/python2.7/dist-packages/pyeole/service/__init__.py", line 171, in manage_service _manage_service(action, services=names, ctx=ctx) File "/usr/lib/python2.7/dist-packages/pyeole/service/__init__.py", line 218, in _manage_service raise UnknownServiceError(msg) pyeole.service.error.UnknownServiceError: Service unknown to creoled in root: arv run-parts: /usr/share/eole/posttemplate/00-arv exited with return code 1 Traceback (most recent call last): File "/usr/bin/reconfigure", line 9, in <module> main() File "/usr/lib/python2.7/dist-packages/creole/reconfigure.py", line 433, in main run_parts(u'posttemplate') File "/usr/lib/python2.7/dist-packages/creole/reconfigure.py", line 157, in run_parts raise Exception(u'Erreur {0}'.format(directory)) Exception: Erreur posttemplate
depuis version creole 2.4.0-180
Révisions associées
Appliquer des actions sur des services non gérés par « creole »
La nouvelle API n’expose aucune fonction publique pour appliquer facilement
des actions à des services non présents dans les dictionnaires
« creole ».
- pyeole/service/__init__.py (unmanaged_service): Nouvelle fonction
permettant de démarrer ou arrêter un service System V ou
upstart.
Fixes: #6087 @30m
Historique
#1 Mis à jour par Emmanuel GARETTE il y a plus de 10 ans
- Assigné à
Emmanuel GARETTEsupprimé
#2 Mis à jour par Fabrice Barconnière il y a plus de 10 ans
- Projet changé de creole à python-pyeole
- Assigné à mis à Daniel Dehennin
#3 Mis à jour par Daniel Dehennin il y a plus de 10 ans
- Début mis à 24/09/2013
Il faut utiliser la fonction privée pyeole.service._manage_service()
source:pyeole/service/__init__.py?rev=e6afcf0#L179
Cette fonction requiert 3 paramètres :
- L’action
- Le service sous forme de dictionnaire avec les clef suivantes :
name
: le nom, utilisé pour chercher les fichiers sur le disque durmethod
: la méthode de gestion :service
: pour les scripts System Vupstart
: pour les scripts upstartapache
: pour les services apache
activate
:True
ouFalse
si le service est à démarrer ou pascontainer
: le conteneur où le service tournepty
:True
(je ne sais pas vraiment à quoi ça sert mais tous les services ont ça)
- Le contexte où l’action est à effectuer (le conteneur quoi), sous forme de dictionnaire avec les clef suivantes :
name
: le nom du conteneurpath
: le chemin où se trouve la racine du conteneur,u''
pourroot
ip
: l’adresse IP du conteneur,127.0.0.1
pourroot
services
: liste des services du conteneurs, permet de vérifier que le second argument est bien déclaré dans le conteneur
On peut déclarer une nouvelle fonction qui prend un nom de service, une méthode et un nom de conteneur et qui génère les dictionnaires qui vont bien et ensuite appel pyeole.service._manage_service()
.
Je propose pyeole.service.unmanaged_service(action, service_name, service_method, container='root')
Ça convient à tout le monde ?
#4 Mis à jour par Fabrice Barconnière il y a plus de 10 ans
- Statut changé de Nouveau à Accepté
ça me va
#5 Mis à jour par Daniel Dehennin il y a plus de 10 ans
- Statut changé de Accepté à Résolu
- % réalisé changé de 0 à 100
Appliqué par commit e4ca92ba26c3ab0063a9d49a365e53cc1419f0f0.
#6 Mis à jour par Joël Cuissinat il y a plus de 10 ans
- Statut changé de Résolu à Fermé
#7 Mis à jour par Joël Cuissinat il y a plus de 10 ans
Exemple d'utilisation dans le commit : arv:ed3607d