]> 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 393f90c23ef7825e506942ec2bbf361f9ab7c6f2..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',)
 
 pid_filename = 'vrrp.pid'
 
 
 __ALL__ = ('VrrpHandler',)
 
 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__':