From: Leandro Lucarella Date: Mon, 22 Oct 2007 16:11:43 +0000 (-0300) Subject: Merge commit 'nico-baryon/master' X-Git-Url: https://git.llucax.com/software/pymin.git/commitdiff_plain/71a35239852c629c02006219427db45b75bc24da?ds=inline;hp=-c Merge commit 'nico-baryon/master' Conflicts: pymin/services/ppp/__init__.py pymin/services/vrrp/__init__.py --- 71a35239852c629c02006219427db45b75bc24da diff --combined pymin/services/ppp/__init__.py index 91070e7,868b6d5..c251e50 --- a/pymin/services/ppp/__init__.py +++ b/pymin/services/ppp/__init__.py @@@ -1,11 -1,11 +1,13 @@@ # vim: set encoding=utf-8 et sw=4 sts=4 : ++import os from os import path ++from signal import SIGTERM from pymin.seqtools import Sequence from pymin.dispatcher import Handler, handler, HandlerError -from pymin.services.util import Restorable, ConfigWriter \ - ,TransactionalHandler, DictSubHandler, call +from pymin.services.util import Restorable, ConfigWriter, ReloadHandler, \ + TransactionalHandler, DictSubHandler, call __ALL__ = ('PppHandler',) @@@ -32,7 -32,6 +34,7 @@@ class Connection(Sequence) self.username = username self.password = password self.type = type + self._running = False if type == 'OE': if not 'device' in kw: raise ConnectionError('Bad arguments for type=OE') @@@ -71,11 -70,11 +73,11 @@@ class ConnectionHandler(DictSubHandler) _cont_subhandler_attr = 'conns' _cont_subhandler_class = Connection -class PppHandler(Restorable, ConfigWriter, TransactionalHandler): +class PppHandler(Restorable, ConfigWriter, ReloadHandler, TransactionalHandler): handler_help = u"Manage ppp service" - _persistent_attrs = ('conns') + _persistent_attrs = ['conns'] _restorable_defaults = dict( conns = dict(), @@@ -90,70 -89,32 +92,76 @@@ self._config_writer_cfg_dir = config_dir self._config_build_templates() self._restore() + for conn in self.conns.values(): + if conn._running: + conn._running = False + self.start(conn.name) self.conn = ConnectionHandler(self) - @handler('Starts the service') - def start(self, name): - if name in self.conns: - call(['pppd','call', name],stdout=None, stderr=None) - #print ('pon', name) - else: - raise ConnectionNotFoundError(name) - - @handler('Stops the service') - def stop(self, name): + @handler(u'Start one or all the connections.') + def start(self, name=None): + names = [name] + if name is None: + names = self.conns.keys() + for name in names: + if name in self.conns: + if not self.conns[name]._running: - call(('pon', name)) ++ call(('pppd', 'call', name)) + self.conns[name]._running = True + self._dump_attr('conns') + else: + raise ConnectionNotFoundError(name) + + @handler(u'Stop one or all the connections.') + def stop(self, name=None): + names = [name] + if name is None: + names = self.conns.keys() + for name in names: + if name in self.conns: + if self.conns[name]._running: + call(('poff', name)) ++ if path.exists('/var/run/ppp-' + name + '.pid'): ++ pid = file('/var/run/ppp-' + name + '.pid').readline() ++ try: ++ os.kill(int(pid.strip()), SIGTERM) ++ except OSError: ++ pass # XXX report error? + self.conns[name]._running = False + self._dump_attr('conns') + else: + raise ConnectionNotFoundError(name) + + @handler(u'Restart one or all the connections (even disconnected ones).') + def restart(self, name=None): + names = [name] + if name is None: + names = self.conns.keys() + for name in names: + self.stop(name) + self.start(name) + + @handler(u'Restart only one or all the already running connections.') + def reload(self, name=None): + r"reload() -> None :: Reload the configuration of the service." + names = [name] + if name is None: + names = self.conns.keys() + for name in names: + if self.conns[name]._running: + self.stop(name) + self.start(name) + + @handler(u'Tell if the service is running.') + def running(self, name=None): + r"reload() -> None :: Reload the configuration of the service." + if name is None: + return [c.name for c in self.conns.values() if c._running] if name in self.conns: - if path.exists('/var/run/ppp-' + name + '.pid'): - pid = file('/var/run/ppp-' + name + '.pid').readline().strip() - call(['kill',pid],stdout=None, stderr=None) - #print ('poff', name) + return int(self.conns[name]._running) else: raise ConnectionNotFoundError(name) - @handler('Reloads the service') - def reload(self): - for conn in self.conns.values(): - self.stop(conn.name) - self.start(conn.name) - def _write_config(self): r"_write_config() -> None :: Generate all the configuration files." #guardo los pass que van el pap-secrets @@@ -185,3 -146,3 +193,4 @@@ if __name__ == '__main__' p.commit() print p.conn.list() print p.conn.show() ++ diff --combined pymin/services/vrrp/__init__.py index c8563a6,580d4e6..403cd36 --- a/pymin/services/vrrp/__init__.py +++ b/pymin/services/vrrp/__init__.py @@@ -1,26 -1,18 +1,24 @@@ # vim: set encoding=utf-8 et sw=4 sts=4 : +import os 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 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' - -class VrrpHandler(Restorable, ParametersHandler, TransactionalHandler): +class VrrpHandler(Restorable, ParametersHandler, ReloadHandler, RestartHandler, + ServiceHandler, TransactionalHandler): + handler_help = u"Manage VRRP service" - _persistent_attrs = 'params' + _persistent_attrs = ['params'] _restorable_defaults = dict( params = dict( ipaddress='192.168.0.1', @@@ -30,29 -22,37 +28,31 @@@ ), ) - 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'] != '': - call(('/usr/local/bin/vrrpd','-i',self.params['dev'],'-v',self.params['id'],'-p',self.params['prio'],self.params['ipaddress'])) - #print ('vrrpd','-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: - call(('/usr/local/bin/vrrpd','-i',self.params['dev'],'-v',self.params['id'],self.params['ipaddress'])) - #print ('vrrpd','-i',self.params['dev'],'-v',self.params['id'],self.params['ipaddress']) - - @handler('Stop the service') - def stop(self): - try : - pid = 'vrrpd' + '_' + self.params['dev'] + '_' + self.params['id'] + '.pid' - f = file(path.join(self._pid_dir, pid ), 'r') - call(('kill',f.read().strip('\n'))) - #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 - @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') - v.commit() + v.commit() ++