def resolve(self, cellname=None): """Resolve Zookeeper connection string by cell name.""" # TODO: LDAPs should be a list, and admin object shuld accept # list of host:port as connection arguments rather than # single host:port. if not cellname: cellname = self.cell if not cellname: raise ContextError('Cell is not specified.') if not self.ldap.url: ldap_srv_rec = dnsutils.srv('_ldap._tcp.%s.%s' % (cellname, self.dns_domain)) self.ldap.url = ','.join( ['ldap://%s:%s' % (rec[0], rec[1]) for rec in ldap_srv_rec]) cell_resolved = False while self.resolvers and not cell_resolved: resolver = self.resolvers.pop(0) cell_resolved = resolver(cellname) if not cell_resolved: raise ContextError('Unable to resolve cell: %s' % cellname) self.cell = cellname
def resolve(self, cellname=None): """Resolve Zookeeper connection string by cell name.""" # TODO: LDAPs should be a list, and admin object shuld accept # list of host:port as connection arguments rather than # single host:port. if not cellname: cellname = self.cell if not cellname: raise ContextError('Cell is not specified.') if not self.ldap.url: ldap_srv_rec = dnsutils.srv('_ldap._tcp.%s.%s' % (cellname, self.dns_domain)) if ldap_srv_rec: ldap_host, ldap_port, _prio, _weight = ldap_srv_rec[0] self.ldap.url = 'ldap://%s:%s' % (ldap_host, ldap_port) while self.resolvers: resolver = self.resolvers.pop(0) resolver(cellname) if self.zk.url: break if not self.zk.url: raise ContextError('Unable to resolve cell: %s' % cellname) self.cell = cellname
def _ldap_url(ctx): """Resolve LDAP for given cell.""" if not ctx.cell: raise context.ContextError('Cell not specified.') ldap_srv_rec = dnsutils.srv( '_ldap._tcp.%s.%s' % (ctx.cell, ctx.dns_domain), ctx.dns_server) return _srv_to_urls(ldap_srv_rec, 'ldap')
def _resolve_srv(self, srv_rec): """Returns list of host, port tuples for given srv record.""" _LOGGER.debug('Query DNS -t SRV %s.%s', srv_rec, self.dns_domain) if not self.dns_domain: raise ContextError('Treadmill DNS domain not specified.') result = dnsutils.srv(srv_rec + '.' + self.dns_domain) random.shuffle(result) return result
def image_group(api, srvrec): """Manage Treadmill app monitor configuration""" ctx['api'] = api if not ctx['api']: ctx['api'] = [] if srvrec: result = dnsutils.srv(srvrec, None) for host, port, _p, _w in result: ctx['api'].append('http://{}:{}'.format(host, port))
def _from_srvrec(ctx, srv_name): dns_server = list(ctx.obj['dns_server']) dns_port = ctx.obj['dns_port'] srv_records = dnsutils.srv(srv_name, [dns_server, dns_port]) if not srv_records: sys.exit('No srv records for %s' % srv_name) random.shuffle(srv_records) return [tuple(server_port[:2]) for server_port in srv_records]
def get_ipa_urls_from_dns(domain): """Looks up IPA servers from DNS SRV records.""" ipa_srv_rec = dnsutils.srv('_kerberos._tcp.{}'.format(domain)) if not ipa_srv_rec: raise Exception('No IPA servers found') # Sort by (priority, -weight). ipa_srv_rec.sort(key=lambda srv_rec: (srv_rec[2], -srv_rec[3])) _LOGGER.debug('IPA SRV records: %r', ipa_srv_rec) return ['https://{}/ipa'.format(srv_rec[0]) for srv_rec in ipa_srv_rec]
def _resolve_srv(self, srv_rec): """Returns list of host, port tuples for given srv record.""" if not self.dns_domain: raise ContextError('Treadmill DNS domain not specified.') result = dnsutils.srv(srv_rec + '.' + self.dns_domain) if result: return [ 'http://%s:%s' % (host, port) for host, port, _prio, _weight in result ] else: raise ContextError('No srv records found: %s', srv_rec)
def _resolve_srv(self, srv_rec): """Returns list of host, port tuples for given srv record.""" _LOGGER.debug('Query DNS -t SRV %s.%s', srv_rec, self.dns_domain) if not self.dns_domain: raise ContextError('Treadmill DNS domain not specified.') result = dnsutils.srv(srv_rec + '.' + self.dns_domain) _LOGGER.debug('Result: %r', result) if result: return [ dnsutils.srv_target_to_url(srv_rec, target) for target in result ] else: raise ContextError('No srv records found: %s' % srv_rec)
def _check_cell(cellname, srvrec): """Check that locker service is defined and up for given cell.""" result = dnsutils.srv(srvrec, context.GLOBAL.dns_server) active = [] for host, port, _, _ in result: sock = None try: sock = socket.create_connection((host, port), 1) active.append((host, port)) except socket.error: _LOGGER.warning('Keytab endpoint [%s] is down: %s:%s', cellname, host, port) finally: if sock: sock.close() return active
def _check_cell(cellname, appname, dns_domain): """Return active endpoint for the locker given cell name.""" srvrec = '_tickets._tcp.{}.{}.cell.{}'.format(appname, cellname, dns_domain) result = dnsutils.srv(srvrec, context.GLOBAL.dns_server) active = [] for host, port, _, _ in result: sock = None try: sock = socket.create_connection((host, port), 1) active.append((host, port)) except socket.error: _LOGGER.warning('Ticket endpoint [%s] is down: %s:%s', cellname, host, port) finally: if sock: sock.close() active.sort() return active