From e1b9e7fe3b1fa6b6e829f7eb5787b67d9894cfd1 Mon Sep 17 00:00:00 2001 From: Guido Günther Date: Fri, 2 May 2014 17:28:38 +0200 Subject: pkg_services: Check if a service is actually installed So far we returned the full list from pkg_services. This is o.k. for many to one mappings like apache but not for one to many like openjdk. To avoid to print out services that aren't installed check that beforehand. --- whatmaps/debiandistro.py | 10 ++++++++-- whatmaps/distro.py | 8 +++++++- 2 files changed, 15 insertions(+), 3 deletions(-) (limited to 'whatmaps') diff --git a/whatmaps/debiandistro.py b/whatmaps/debiandistro.py index 4a3d0db..3a47d50 100644 --- a/whatmaps/debiandistro.py +++ b/whatmaps/debiandistro.py @@ -26,7 +26,7 @@ except ImportError: lsb_release = None import logging -import string +import os import subprocess import sys @@ -35,7 +35,7 @@ from . debianpkg import DebianPkg from . pkg import PkgError class DebianDistro(Distro): - "Debian (dpkg) based distribution""" + "Debian (dpkg) based distribution" id = 'Debian' _pkg_services = { 'apache2-mpm-worker': [ 'apache2' ], @@ -73,8 +73,14 @@ class DebianDistro(Distro): @classmethod def restart_service_cmd(klass, name): + """The command that should be used to start a service""" return ['invoke-rc.d', name, 'restart'] + @classmethod + def is_service_installed(klass, name): + """Whether the system has this service""" + return os.path.exists('/etc/init.d/%s' % name) + @classmethod def has_apt(klass): return True diff --git a/whatmaps/distro.py b/whatmaps/distro.py index e4f417f..5625955 100644 --- a/whatmaps/distro.py +++ b/whatmaps/distro.py @@ -48,13 +48,19 @@ class Distro(object): """Restart a service""" subprocess.call(klass.restart_service_cmd(service)) + @classmethod + def is_service_installed(klass, service): + """Check wether a service exists on the system""" + return True + @classmethod def pkg_services(klass, pkg): """ List of services that package pkg needs restarted that aren't part of pkg itself """ - return klass._pkg_services.get(pkg.name, []) + return [ s for s in klass._pkg_services.get(pkg.name, []) + if klass.is_service_installed(s) ] @classmethod def pkg_service_blacklist(klass, pkg): -- cgit v1.2.3