]> git.llucax.com Git - software/pymin.git/blobdiff - pymin/services/vrrp/__init__.py
Merge commit 'scm/master'
[software/pymin.git] / pymin / services / vrrp / __init__.py
index 8f5a0037ab065a09e6028edf7217ffb58017ddd7..403cd364fdac153229282e8fb6230cc921680eb3 100644 (file)
@@ -1,20 +1,24 @@
 # 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'
+class VrrpHandler(Restorable, ParametersHandler, ReloadHandler, RestartHandler,
+                        ServiceHandler, TransactionalHandler):
 
 
-class VrrpHandler(Restorable, ParametersHandler, 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,36 +28,31 @@ 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_filename = 'vrrpd_%(dev)s_%(id)s.pid' % self.params
+            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__':
     v = VrrpHandler()
     v.set('prio','10')
 
 
 if __name__ == '__main__':
     v = VrrpHandler()
     v.set('prio','10')
-    v.commit()
\ No newline at end of file
+    v.commit()
+