示例#1
0
    def _sync_domains(self):
        """ Sync the list of domains this server handles """
        # TODO: Rewrite this entire thing ASAP
        LOG.debug('Synchronising domains')

        admin_context = get_admin_context()

        domains = central_api.get_domains(admin_context)

        template_path = os.path.join(os.path.abspath(cfg.CONF.templates_path),
                                     'bind9-config.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, 'zones.config')

        self._render_template(template_path,
                              output_path,
                              domains=domains,
                              state_path=os.path.abspath(cfg.CONF.state_path))
示例#2
0
文件: nova.py 项目: devcamcar/moniker
    def handle_instance_create(self, payload):
        context = get_admin_context()

        # Fetch the FixedIP Domain
        fixed_ip_domain = self.central_service.get_domain(context,
                                                          self.fixed_ip_domain)

        # For each fixed ip, create an associated record.
        for fixed_ip in payload['fixed_ips']:
            record_name = '%(instance_id)s.%(tenant_id)s.%(domain)s' % dict(
                instance_id=payload['instance_id'],
                tenant_id=payload['tenant_id'],
                domain=fixed_ip_domain['name'])

            record_values = {
                'type': 'A' if fixed_ip['version'] == 4 else 'AAAA',
                'name': record_name,
                'data': fixed_ip['address'],

                'managed_resource': True,
                'managed_resource_type': u'instance',
                'managed_resource_id': payload['instance_id'],
            }

            self.central_service.create_record(context, self.fixed_ip_domain,
                                               record_values)
示例#3
0
def notify(context, message):
    """Sends a notification via RPC"""
    if not context:
        context = req_context.get_admin_context()
    priority = message.get("priority", CONF.default_notification_level)
    priority = priority.lower()
    for topic in CONF.notification_topics:
        topic = "%s.%s" % (topic, priority)
        try:
            rpc.notify(context, topic, message)
        except Exception:
            LOG.exception(_("Could not send notification to %(topic)s. " "Payload=%(message)s"), locals())
示例#4
0
def notify(context, message):
    """Sends a notification via RPC"""
    if not context:
        context = req_context.get_admin_context()
    priority = message.get('priority', CONF.default_notification_level)
    priority = priority.lower()
    for topic in CONF.rpc_notifier2.topics:
        topic = '%s.%s' % (topic, priority)
        try:
            rpc.notify(context, topic, message, envelope=True)
        except Exception:
            LOG.exception(
                _("Could not send notification to %(topic)s. "
                  "Payload=%(message)s"), locals())
示例#5
0
    def __init__(self, *args, **kwargs):
        kwargs.update(host=cfg.CONF.host, topic=cfg.CONF.agent_topic)

        super(Service, self).__init__(*args, **kwargs)

        # TODO: This is a hack to ensure the data dir is 100% up to date
        admin_context = get_admin_context()

        domains = central_api.get_domains(admin_context)

        for domain in domains:
            self._sync_domain(domain)

        self._sync_domains()
示例#6
0
    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)
示例#7
0
    def __init__(self, *args, **kwargs):
        kwargs.update(
            host=cfg.CONF.host,
            topic=cfg.CONF.agent_topic
        )

        super(Service, self).__init__(*args, **kwargs)

        # TODO: This is a hack to ensure the data dir is 100% up to date
        admin_context = get_admin_context()

        domains = central_api.get_domains(admin_context)

        for domain in domains:
            self._sync_domain(domain)

        self._sync_domains()
示例#8
0
    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)
示例#9
0
文件: nova.py 项目: devcamcar/moniker
    def handle_instance_delete(self, payload):
        context = get_admin_context()

        # Fetch the instances managed records
        criterion = {
            'managed_resource': True,
            'managed_resource_type': u'instance',
            'managed_resource_id': payload['instance_id']
        }

        records = self.central_service.get_records(context,
                                                   self.fixed_ip_domain,
                                                   criterion)
        # Delete the matching records
        for record in records:
            LOG.debug('Deleting record %s' % record['id'])

            self.central_service.delete_record(context, self.fixed_ip_domain,
                                               record['id'])
示例#10
0
    def _sync_domains(self):
        """ Sync the list of domains this server handles """
        # TODO: Rewrite this entire thing ASAP
        LOG.debug('Synchronising domains')

        admin_context = get_admin_context()

        domains = central_api.get_domains(admin_context)

        template_path = os.path.join(os.path.abspath(
            cfg.CONF.templates_path), 'bind9-config.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, 'zones.config')

        self._render_template(template_path, output_path, domains=domains,
                              state_path=os.path.abspath(cfg.CONF.state_path))
示例#11
0
 def get_admin_context(self):
     return get_admin_context()
示例#12
0
 def get_admin_context(self):
     return get_admin_context()