def get_servers(): context = flask.request.environ.get('context') try: servers = central_api.get_servers(context) except exceptions.Forbidden: return flask.Response(status=401) servers = servers_schema.filter(servers) return flask.jsonify(servers=servers)
def get_servers(): context = flask.request.environ.get("context") try: servers = central_api.get_servers(context) except exceptions.Forbidden: return flask.Response(status=401) except rpc_common.Timeout: return flask.Response(status=504) servers = servers_schema.filter({"servers": servers}) return flask.jsonify(servers)
def _sync_domain(self, domain, new_domain_flag=False): """ Sync a single domain's zone file """ # TODO: Rewrite this entire thing ASAP LOG.debug('Synchronising Domain: %s' % domain['id']) admin_context = MonikerContext.get_admin_context() servers = central_api.get_servers(admin_context) if len(servers) == 0: LOG.critical('No servers configured. Please create at least one ' 'server via the REST API') return records = central_api.get_records(admin_context, domain['id']) output_folder = os.path.join(os.path.abspath(cfg.CONF.state_path), 'bind9') output_path = os.path.join(output_folder, '%s.zone' % domain['id']) utils.render_template_to_file('bind9-zone.jinja2', output_path, servers=servers, domain=domain, records=records) self._sync_domains() rndc_call = [ 'sudo', cfg.CONF.rndc_path, '-s', cfg.CONF.rndc_host, '-p', str(cfg.CONF.rndc_port), ] if cfg.CONF.rndc_config_file: rndc_call.extend(['-c', cfg.CONF.rndc_config_file]) if cfg.CONF.rndc_key_file: rndc_call.extend(['-k', cfg.CONF.rndc_key_file]) rndc_op = 'reconfig' if new_domain_flag else 'reload' rndc_call.extend([rndc_op]) if not new_domain_flag: rndc_call.extend([domain['name']]) LOG.debug('Calling RNDC with: %s' % " ".join(rndc_call)) subprocess.call(rndc_call)
def _sync_domain(self, domain): """ Sync a single domain's zone file """ # TODO: Rewrite this entire thing ASAP LOG.debug('Synchronising Domain: %s' % domain['id']) admin_context = get_admin_context() servers = central_api.get_servers(admin_context) records = central_api.get_records(admin_context, domain['id']) template_path = os.path.join(os.path.abspath(cfg.CONF.templates_path), 'bind9-zone.jinja2') output_folder = os.path.join(os.path.abspath(cfg.CONF.state_path), 'bind9') # Create the output folder tree if necessary if not os.path.exists(output_folder): os.makedirs(output_folder) output_path = os.path.join(output_folder, '%s.zone' % domain['id']) self._render_template(template_path, output_path, servers=servers, domain=domain, records=records) self._sync_domains() rndc_call = [ 'sudo', cfg.CONF.rndc_path, '-s', cfg.CONF.rndc_host, '-p', str(cfg.CONF.rndc_port), ] if cfg.CONF.rndc_config_file: rndc_call.extend(['-c', cfg.CONF.rndc_config_file]) if cfg.CONF.rndc_key_file: rndc_call.extend(['-k', c.cfg.CONF.rndc_key_file]) rndc_call.extend(['reload', domain['name']]) LOG.warn(rndc_call) subprocess.call(rndc_call)
def _sync_domain(self, domain): """ Sync a single domain's zone file """ # TODO: Rewrite this entire thing ASAP LOG.debug('Synchronising Domain: %s' % domain['id']) admin_context = get_admin_context() servers = central_api.get_servers(admin_context) records = central_api.get_records(admin_context, domain['id']) template_path = os.path.join(os.path.abspath( cfg.CONF.templates_path), 'bind9-zone.jinja2') output_folder = os.path.join(os.path.abspath(cfg.CONF.state_path), 'bind9') # Create the output folder tree if necessary if not os.path.exists(output_folder): os.makedirs(output_folder) output_path = os.path.join(output_folder, '%s.zone' % domain['id']) self._render_template(template_path, output_path, servers=servers, domain=domain, records=records) self._sync_domains() rndc_call = [ 'sudo', cfg.CONF.rndc_path, '-s', cfg.CONF.rndc_host, '-p', str(cfg.CONF.rndc_port), ] if cfg.CONF.rndc_config_file: rndc_call.extend(['-c', cfg.CONF.rndc_config_file]) if cfg.CONF.rndc_key_file: rndc_call.extend(['-k', c.cfg.CONF.rndc_key_file]) rndc_call.extend(['reload', domain['name']]) LOG.warn(rndc_call) subprocess.call(rndc_call)
def _add_ns_records(self, domain): """ add the NS records, one for each server, for this domain """ table = self.get_dns_table() admin_context = MonikerContext.get_admin_context() servers = central_api.get_servers(admin_context) # use the domain id for records that don't have a match # in moniker's records table for server in servers: table.insert( tenant_id=domain['tenant_id'], domain_id=domain['id'], moniker_rec_id=domain['id'], name=domain['name'], ttl=domain['ttl'], type='NS', data=server['name']) self._db.commit()
def create_domain(self, context, domain): admin_context = MonikerContext.get_admin_context() servers = central_api.get_servers(admin_context) domain_m = Domain() domain_m.update({ 'moniker_id': domain['id'], 'name': domain['name'].rstrip('.'), 'master': servers[0]['name'].rstrip('.'), 'type': 'NATIVE', 'account': context.tenant_id }) domain_m.save(self.session) for server in servers: record_m = Record() record_m.update({ 'moniker_id': server['id'], 'domain_id': domain_m.id, 'name': domain['name'].rstrip('.'), 'type': 'NS', 'content': server['name'].rstrip('.') }) record_m.save(self.session) # NOTE(kiall): Do the SOA last, ensuring we don't trigger a NOTIFY # before the NS records are in place. record_m = Record() record_m.update({ 'moniker_id': domain['id'], 'domain_id': domain_m.id, 'name': domain['name'].rstrip('.'), 'type': 'SOA', 'content': self._build_soa_content(domain) }) record_m.save(self.session)