summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuido Günther <agx@sigxcpu.org>2014-05-02 17:28:38 +0200
committerGuido Günther <agx@sigxcpu.org>2014-06-28 21:34:51 +0200
commite1b9e7fe3b1fa6b6e829f7eb5787b67d9894cfd1 (patch)
tree80c713e5c54872f286cb38c4f726a2377b498c80
parentac817c1fc37bd7e831b33f32028005b612eb76eb (diff)
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.
-rw-r--r--whatmaps/debiandistro.py10
-rw-r--r--whatmaps/distro.py8
2 files changed, 15 insertions, 3 deletions
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,9 +73,15 @@ 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
@@ -49,12 +49,18 @@ class Distro(object):
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):