예제 #1
0
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)
예제 #2
0
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)
예제 #3
0
    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)
예제 #4
0
파일: bind9.py 프로젝트: managedit/moniker
    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)
예제 #5
0
파일: bind9.py 프로젝트: CaptTofu/moniker-1
    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)
예제 #6
0
    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()
예제 #7
0
    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)