]> git.llucax.com Git - software/pymin.git/blobdiff - pymin/services/vrrp/__init__.py
Add support for service running status and restoring at startup.
[software/pymin.git] / pymin / services / vrrp / __init__.py
index 8f5a0037ab065a09e6028edf7217ffb58017ddd7..c8563a699b6923f091ea50be67532ddf94121d26 100644 (file)
@@ -1,20 +1,26 @@
 # vim: set encoding=utf-8 et sw=4 sts=4 :
 
 # vim: set encoding=utf-8 et sw=4 sts=4 :
 
+import os
 from os import path
 from os import path
+from signal import SIGTERM
 from subprocess import Popen, PIPE
 
 from pymin.seqtools import Sequence
 from pymin.dispatcher import Handler, handler, HandlerError
 from subprocess import Popen, PIPE
 
 from pymin.seqtools import Sequence
 from pymin.dispatcher import Handler, handler, HandlerError
-from pymin.services.util import Restorable, TransactionalHandler, ParametersHandler, call
+from pymin.services.util import Restorable, TransactionalHandler, \
+                                ReloadHandler, RestartHandler, \
+                                ServiceHandler, ParametersHandler, call
 
 
-__ALL__ = ('VrrpHandler')
+__ALL__ = ('VrrpHandler',)
 
 pid_filename = 'vrrp.pid'
 
 
 pid_filename = 'vrrp.pid'
 
-class VrrpHandler(Restorable, ParametersHandler, TransactionalHandler):
+class VrrpHandler(Restorable, ParametersHandler, ReloadHandler, RestartHandler,
+                        ServiceHandler, TransactionalHandler):
+
     handler_help = u"Manage VRRP service"
 
     handler_help = u"Manage VRRP service"
 
-    _persistent_attrs = 'params'
+    _persistent_attrs = ['params']
 
     _restorable_defaults = dict(
                             params = dict( ipaddress='192.168.0.1',
 
     _restorable_defaults = dict(
                             params = dict( ipaddress='192.168.0.1',
@@ -24,33 +30,26 @@ class VrrpHandler(Restorable, ParametersHandler, TransactionalHandler):
                                     ),
                             )
 
                                     ),
                             )
 
-    def __init__(self, pickle_dir='.', config_dir='.', pid_dir='.'):
-        self._persistent_dir = pickle_dir
-        self._pid_dir = pid_dir
-        self._restore()
-
-    @handler('Starts the service')
-    def start(self):
+    def _service_start(self):
         if self.params['prio'] != '':
         if self.params['prio'] != '':
-            #call(('vrrp','-i',self.params[dev],'-v',self.params[id],'-p',self.params[prio],self.params[ipaddress]))
-            print ('vrrp','-i',self.params['dev'],'-v',self.params['id'],'-p',self.params['prio'],self.params['ipaddress'])
+            call(('vrrp', '-i', self.params['dev'], '-v', self.params['id'],
+                    '-p', self.params['prio'], self.params['ipaddress']))
         else:
         else:
-            #call(('vrrp','-i',self.params[dev],'-v',self.params[id],self.params[ipaddress]))
-            print ('vrrp','-i',self.params['dev'],'-v',self.params['id'],self.params['ipaddress'])
-
-    @handler('Stop the service')
-    def stop(self):
-        try :
-            f = file(path.join(self._pid_dir, pid_filename ), 'r')
-            #call(('kill','<',f.read()))
-            print(('kill','<',f.read()))
-        except IOError:
+            call(('vrrp', '-i', self.params['dev'], '-v', self.params['id'], \
+                    self.params['ipaddress']))
+
+    def _service_stop(self):
+        try:
+            pid = file(path.join(self._pid_dir, pid_filename )).read().strip()
+            os.kill(int(pid), SIGTERM)
+        except (IOError, OSError):
+            # TODO log
             pass
 
             pass
 
-    @handler('Reloads the service')
-    def reload(self):
-        self.stop()
-        self.start()
+    def __init__(self, pickle_dir='.', config_dir='.', pid_dir='.'):
+        self._persistent_dir = pickle_dir
+        self._pid_dir = pid_dir
+        ServiceHandler.__init__(self)
 
 
 if __name__ == '__main__':
 
 
 if __name__ == '__main__':