def add_server(self, server=None, backend=None): '''Add server with ipaddr in backend section''' self.cfg.reload() if backend: backend = backend.strip() LOG.debug('HAProxyAPI.add_server') LOG.debug(' %s' % haproxy.naming('backend', backend=backend)) bnds = self.cfg.sections(haproxy.naming('backend', backend=backend)) if not bnds: if backend: raise exceptions.NotFound('Backend not found: %s' % (backend, )) else: raise exceptions.Empty('No listeners to add server to') #with self.svc.trans(exit='running'): #with self.cfg.trans(exit='working'): server.setdefault("check", True) server = rename(server) for bnd in bnds: self.cfg.backends[bnd]['server'][self._server_name( server)] = server self.cfg.save() self.svc.reload()
def import_class(import_str): """Returns a class from a string including module and class""" module, cls_name = import_str.rsplit('.', 1) try: if module not in sys.modules: __import__(module) return getattr(sys.modules[module], cls_name) except: raise exceptions.NotFound('Class %s cannot be found' % import_str)
def delete_listener(self, port=None, protocol=None): """ Removes listen section(s) by port (and)or protocol. """ ln = haproxy.naming('listen', protocol, port) if not self.cfg.sections(ln): raise exceptions.NotFound('Listen `%s` not found can`t remove it' % ln) try: default_backend = self.cfg.listener[ln]['default_backend'] except: default_backend = None for path in self.cfg.sections(ln): del self.cfg['listen'][ln] LOG.debug('HAProxyAPI.delete_listener: removed listener `%s`' % ln) if default_backend: has_ref = False for ln in self.cfg.listener: try: if self.cfg.listener[ln][ 'default_backend'] == default_backend: has_ref = True break except: pass if not has_ref: #it not used in other section, so will be deleting del self.cfg.backends[default_backend] try: if iptables.enabled(): iptables.FIREWALL.remove({ "jump": "ACCEPT", "protocol": "tcp", "match": "tcp", "dport": port }) except Exception, e: raise exceptions.NotFound(e)
def reset_healthcheck(self, target): # TODO: figure out what target is """ Return to defaults for `target` backend sections """ target = target.strip() # backend_name = self.naming_mgr.get_pattern({}) haproxy.naming('backend', backend=target) + '*' backend_xpaths = self.cfg.find_all_xpaths('backend', '/name', target) if backend_xpaths == None: raise exceptions.NotFound('Backend `%s` not found' % target) for backend_xpath in backend_xpaths: self.cfg.set(backend_xpath, HEALTHCHECK_DEFAULTS) self.cfg.save() self.svc.reload()
def configure_healthcheck(self, target=None, interval=None, timeout=None, unhealthy_threshold=None, healthy_threshold=None): """ APIDOC TBD. """ try: if interval == 'None': interval = None int(interval) interval = '%ss' % interval except: pass try: if timeout == 'None': timeout = None int(timeout) timeout = '%ss' % timeout except: pass bnds = haproxy.naming('backend', backend=target) if not self.cfg.sections(bnds): raise exceptions.NotFound('Backend `%s` not found' % bnds) for bnd in self.cfg.sections(bnds): if timeout: if isinstance(timeout, dict): self.cfg['backend'][bnd]['timeout'] = timeout else: self.cfg['backend'][bnd]['timeout'] = { 'check': str(timeout) } default_server = { 'inter': interval, 'fall': unhealthy_threshold, 'rise': healthy_threshold } self.cfg['backend'][bnd]['default-server'] = default_server for srv in self.cfg['backend'][bnd]['server']: server = self.cfg['backend'][bnd]['server'][srv] server.update({'check': True}) self.cfg['backend'][bnd]['server'][srv] = server #with self.svc.trans(exit='running'): # with self.cfg.trans(enter='reload', exit='working'): self.cfg.save() self.svc.reload()
def import_class(import_str): """Returns a class from a string including module and class""" mod_str, _sep, class_str = import_str.rpartition('.') try: loader = pkgutil.find_loader(mod_str) if not loader: raise ImportError('No module named %s' % mod_str) except ImportError: pass else: loader.load_module('') try: return getattr(sys.modules[mod_str], class_str) except (ValueError, AttributeError): pass raise exceptions.NotFound('Class %s cannot be found' % import_str)
def reset_healthcheck(self, target): '''Return to defaults for `tartget` backend sections''' target = target.strip() bnds = haproxy.naming('backend', backend=target) if not self.cfg.sections(bnds): raise exceptions.NotFound('Backend `%s` not found' % target) for bnd in self.cfg.sections(bnds): backend = self.cfg['backend'][bnd] backend.update(HEALTHCHECK_DEFAULTS) self.cfg['backend'][bnd] = backend #with self.svc.trans(exit='running'): # with self.cfg.trans(enter='reload', exit='working'): #TODO: with... self.cfg.save() self.svc.reload()
def add_server(self, server=None, backend=None): """ Adds server with ipaddr to backend section. :param server: Server configuration. :type server: dict :param backend: Backend name. :type backend: str Example:: TBD. """ self.cfg.load() if backend: backend = backend.strip() LOG.debug('HAProxyAPI.add_server') backend_xpaths = self.cfg.get_all_xpaths('backend') if backend_xpaths is None: if backend: raise exceptions.NotFound('Backend not found: %s' % (backend, )) else: raise exceptions.Empty('No listeners to add server to') server.setdefault("check", True) server['name'] = self._server_name(server) server = normalize_params(server) server = self._ordered_server_params(server) for backend_xpath in backend_xpaths: self.cfg.add(backend_xpath + '/server', server) self.cfg.save() self.svc.reload()