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))
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)
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())
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())
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()
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 __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()
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 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'])
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))
def get_admin_context(self): return get_admin_context()