Remove the non-pools bind9 backend

Change-Id: Id04a0d6b76244d5f3b22b637e79bf05209287ad3
This commit is contained in:
Kiall Mac Innes
2014-12-12 13:06:32 +00:00
parent 9b7a253460
commit 39c49c057e
10 changed files with 92 additions and 497 deletions

View File

@@ -4,20 +4,13 @@ set -ex
pushd $BASE/new/devstack pushd $BASE/new/devstack
DEVSTACK_GATE_DESIGNATE_DRIVER=${DEVSTACK_GATE_DESIGNATE_DRIVER:-powerdns}
export KEEP_LOCALRC=1 export KEEP_LOCALRC=1
export ENABLED_SERVICES=designate,designate-api,designate-central,designate-sink,designate-mdns,designate-pool-manager export ENABLED_SERVICES=designate,designate-api,designate-central,designate-sink,designate-mdns,designate-pool-manager
echo "DESIGNATE_SERVICE_PORT_DNS=5322" >> $BASE/new/devstack/localrc echo "DESIGNATE_SERVICE_PORT_DNS=5322" >> $BASE/new/devstack/localrc
echo "DESIGNATE_BACKEND_DRIVER=$DEVSTACK_GATE_DESIGNATE_DRIVER" >> $BASE/new/devstack/localrc
DEVSTACK_GATE_DESIGNATE_DRIVER=${DEVSTACK_GATE_DESIGNATE_DRIVER:-powerdns}
if [ "$DEVSTACK_GATE_DESIGNATE_DRIVER" == "powerdns" ]; then
echo "DESIGNATE_BACKEND_DRIVER=powerdns" >> $BASE/new/devstack/localrc
elif [ "$DEVSTACK_GATE_DESIGNATE_DRIVER" == "bind9" ]; then
echo "DESIGNATE_BACKEND_DRIVER=bind9_pool" >> $BASE/new/devstack/localrc
fi
popd popd

View File

@@ -1,5 +1,5 @@
# lib/designate_plugins/backend-bind9 # lib/designate_plugins/backend-bind9
# Configure the bind9 backend # Configure the bind9 pool backend
# Enable with: # Enable with:
# DESIGNATE_BACKEND_DRIVER=bind9 # DESIGNATE_BACKEND_DRIVER=bind9
@@ -75,11 +75,18 @@ EOF
# configure_designate_backend - make configuration changes, including those to other services # configure_designate_backend - make configuration changes, including those to other services
function configure_designate_backend { function configure_designate_backend {
iniset $DESIGNATE_CONF service:pool_manager backends bind9
iniset $DESIGNATE_CONF service:mdns slave_nameserver_ips_and_ports "$DESIGNATE_SERVICE_HOST:$DESIGNATE_SERVICE_PORT_DNS"
iniset $DESIGNATE_CONF backend:bind9 masters $DESIGNATE_SERVICE_HOST:$DESIGNATE_SERVICE_PORT_MDNS
iniset $DESIGNATE_CONF backend:bind9 server_ids $DESIGNATE_SERVER_ID
iniset $DESIGNATE_CONF backend:bind9 rndc_port $DESIGNATE_SERVICE_PORT_RNDC iniset $DESIGNATE_CONF backend:bind9 rndc_port $DESIGNATE_SERVICE_PORT_RNDC
iniset $DESIGNATE_CONF backend:bind9 rndc_host $DESIGNATE_SERVICE_HOST iniset $DESIGNATE_CONF backend:bind9 rndc_host $DESIGNATE_SERVICE_HOST
iniset $DESIGNATE_CONF backend:bind9 rndc_config_file "$BIND_CFG_DIR/rndc.conf" iniset $DESIGNATE_CONF backend:bind9 rndc_config_file "$BIND_CFG_DIR/rndc.conf"
iniset $DESIGNATE_CONF backend:bind9 rndc_key_file "$BIND_CFG_DIR/rndc.key" iniset $DESIGNATE_CONF backend:bind9 rndc_key_file "$BIND_CFG_DIR/rndc.key"
iniset $DESIGNATE_CONF backend:bind9 nzf_path "$BIND_VAR_DIR"
iniset $DESIGNATE_CONF backend:bind9:$DESIGNATE_SERVER_ID host $DESIGNATE_SERVICE_HOST
iniset $DESIGNATE_CONF backend:bind9:$DESIGNATE_SERVER_ID port $DESIGNATE_SERVICE_PORT_DNS
sudo chown $STACK_USER $BIND_CFG_DIR sudo chown $STACK_USER $BIND_CFG_DIR
@@ -140,7 +147,7 @@ function stop_designate_backend {
# cleanup_designate_backend - remove transient data and cache # cleanup_designate_backend - remove transient data and cache
function cleanup_designate_backend { function cleanup_designate_backend {
sudo sh -c "rm -rf $BIND_VAR_DIR/*.nzf" sudo sh -c "rm -rf $BIND_VAR_DIR/*.nzf"
sudo sh -c "rm -rf $DESIGNATE_STATE_PATH/*.zone" sudo sh -c "rm -rf $BIND_VAR_DIR/slave.*"
sudo rm -f $BIND_CFG_DIR/rndc.key sudo rm -f $BIND_CFG_DIR/rndc.key
} }

View File

@@ -1,155 +0,0 @@
# lib/designate_plugins/backend-bind9_pool
# Configure the bind9 pool backend
# Enable with:
# DESIGNATE_BACKEND_DRIVER=bind9_pool
# Dependencies:
# ``functions`` file
# ``designate`` configuration
# install_designate_backend - install any external requirements
# configure_designate_backend - make configuration changes, including those to other services
# init_designate_backend - initialize databases, etc.
# start_designate_backend - start any external services
# stop_designate_backend - stop any external services
# cleanup_designate_backend - remove transient data and cache
# Save trace setting
DP_BIND9_XTRACE=$(set +o | grep xtrace)
set +o xtrace
# Defaults
# --------
BIND_SERVICE_NAME=bind9
BIND_CFG_DIR=/etc/bind
BIND_VAR_DIR=/var/cache/bind
BIND_CFG_FILE=$BIND_CFG_DIR/named.conf.options
BIND_USER=bind
BIND_GROUP=bind
DESIGNATE_SERVICE_PORT_RNDC=${DESIGNATE_SERVICE_PORT_RNDC:-953}
if is_fedora; then
BIND_SERVICE_NAME=named
BIND_CFG_DIR=/etc/named
BIND_CFG_FILE=/etc/named.conf
BIND_VAR_DIR=/var/named
BIND_USER=named
BIND_GROUP=named
fi
# Entry Points
# ------------
# install_designate_backend - install any external requirements
function install_designate_backend {
if is_ubuntu; then
install_package bind9
elif is_fedora; then
install_package named
fi
# The user that designate runs as needs to be member of **$BIND_GROUP** group.
# The designate bind9 backend needs read/write access to $BIND_VAR_DIR
if ! getent group $BIND_GROUP >/dev/null; then
sudo groupadd $BIND_GROUP
fi
add_user_to_group $STACK_USER $BIND_GROUP
if [[ ! -d $BIND_CFG_DIR ]]; then
sudo mkdir -p $BIND_CFG_DIR
sudo chown $BIND_USER:$BIND_GROUP $BIND_CFG_DIR
fi
sudo chown -R $BIND_USER:$BIND_GROUP $BIND_CFG_DIR $BIND_VAR_DIR
sudo chmod -R g+r $BIND_CFG_DIR
sudo chmod -R g+rw $BIND_VAR_DIR
# Customize Bind9 apparmor profile if installed
if [[ -d /etc/apparmor.d ]]; then
sudo tee /etc/apparmor.d/local/usr.sbin.named > /dev/null << EOF
$DESIGNATE_STATE_PATH/bind9/** rw,
EOF
restart_service apparmor
fi
}
# configure_designate_backend - make configuration changes, including those to other services
function configure_designate_backend {
iniset $DESIGNATE_CONF service:pool_manager backends bind9_pool
iniset $DESIGNATE_CONF service:mdns slave_nameserver_ips_and_ports "$DESIGNATE_SERVICE_HOST:$DESIGNATE_SERVICE_PORT_DNS"
iniset $DESIGNATE_CONF backend:bind9_pool masters $DESIGNATE_SERVICE_HOST:$DESIGNATE_SERVICE_PORT_MDNS
iniset $DESIGNATE_CONF backend:bind9_pool server_ids $DESIGNATE_SERVER_ID
iniset $DESIGNATE_CONF backend:bind9_pool rndc_port $DESIGNATE_SERVICE_PORT_RNDC
iniset $DESIGNATE_CONF backend:bind9_pool rndc_host $DESIGNATE_SERVICE_HOST
iniset $DESIGNATE_CONF backend:bind9_pool rndc_config_file "$BIND_CFG_DIR/rndc.conf"
iniset $DESIGNATE_CONF backend:bind9_pool rndc_key_file "$BIND_CFG_DIR/rndc.key"
iniset $DESIGNATE_CONF backend:bind9_pool:$DESIGNATE_SERVER_ID host $DESIGNATE_SERVICE_HOST
iniset $DESIGNATE_CONF backend:bind9_pool:$DESIGNATE_SERVER_ID port $DESIGNATE_SERVICE_PORT_DNS
sudo chown $STACK_USER $BIND_CFG_DIR
# create rndc key and config
sudo rndc-confgen -a -c $BIND_CFG_DIR/rndc.key
sudo chown $BIND_USER:$BIND_GROUP $BIND_CFG_DIR/rndc.key
sudo chmod g+r $BIND_CFG_DIR/rndc.key
# Configure Bind
sudo tee $BIND_CFG_FILE > /dev/null <<EOF
include "$BIND_CFG_DIR/rndc.key";
options {
directory "$BIND_VAR_DIR";
allow-new-zones yes;
dnssec-validation auto;
auth-nxdomain no; # conform to RFC1035
listen-on port $DESIGNATE_SERVICE_PORT_DNS { $DESIGNATE_SERVICE_HOST; };
};
controls {
inet $DESIGNATE_SERVICE_HOST port $DESIGNATE_SERVICE_PORT_RNDC allow { $DESIGNATE_SERVICE_HOST; } keys { "rndc-key"; };
};
EOF
# Configure RNDC
sudo tee $BIND_CFG_DIR/rndc.conf > /dev/null << EOF
include "$BIND_CFG_DIR/rndc.key";
options {
default-key "rndc-key";
default-server $DESIGNATE_SERVICE_HOST;
default-port $DESIGNATE_SERVICE_PORT_RNDC;
};
EOF
sudo chown $BIND_USER:$BIND_GROUP $BIND_CFG_FILE $BIND_CFG_DIR/rndc.conf
sudo chmod g+r $BIND_CFG_FILE $BIND_CFG_DIR/rndc.conf
restart_service $BIND_SERVICE_NAME
}
# init_designate_backend - initialize databases, etc.
function init_designate_backend {
:
}
# start_designate_backend - start any external services
function start_designate_backend {
start_service bind9
}
# stop_designate_backend - stop any external services
function stop_designate_backend {
stop_service bind9
}
# cleanup_designate_backend - remove transient data and cache
function cleanup_designate_backend {
sudo sh -c "rm -rf $BIND_VAR_DIR/*.nzf"
sudo sh -c "rm -rf $BIND_VAR_DIR/slave.*"
sudo rm -f $BIND_CFG_DIR/rndc.key
}
# Restore xtrace
$DP_BIND9_XTRACE

View File

@@ -1,6 +1,6 @@
# Copyright 2012 Managed I.T. # Copyright 2014 eBay Inc.
# #
# Author: Kiall Mac Innes <kiall@managedit.ie> # Author: Ron Rickard <rrickard@ebay.com>
# #
# Licensed under the Apache License, Version 2.0 (the "License"); you may # Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain # not use this file except in compliance with the License. You may obtain
@@ -13,214 +13,113 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
import os import socket
import glob
import shutil
import time
from oslo.config import cfg from oslo.config import cfg
from oslo_concurrency import lockutils
from designate.openstack.common import log as logging from designate.openstack.common import log as logging
from designate.i18n import _LW from designate import exceptions
from designate import utils from designate import utils
from designate.backend import base from designate.backend import base
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
CONF = cfg.CONF
CFG_GROUP = 'backend:bind9_pool'
DEFAULT_PORT = 5354
class Bind9Backend(base.Backend): class Bind9Backend(base.PoolBackend):
__plugin_name__ = 'bind9' __plugin_name__ = 'bind9'
@classmethod @classmethod
def get_cfg_opts(cls): def _get_common_cfg_opts(cls):
group = cfg.OptGroup( return [
name='backend:bind9', title="Configuration for BIND9 Backend"
)
opts = [
cfg.StrOpt('rndc-host', default='127.0.0.1', help='RNDC Host'), cfg.StrOpt('rndc-host', default='127.0.0.1', help='RNDC Host'),
cfg.IntOpt('rndc-port', default=953, help='RNDC Port'), cfg.IntOpt('rndc-port', default=953, help='RNDC Port'),
cfg.StrOpt('rndc-config-file', default=None, cfg.StrOpt('rndc-config-file', default=None,
help='RNDC Config File'), help='RNDC Config File'),
cfg.StrOpt('rndc-key-file', default=None, help='RNDC Key File'), cfg.StrOpt('rndc-key-file', default=None, help='RNDC Key File'),
cfg.StrOpt('nzf-path', default='/var/cache/bind',
help='Path where Bind9 stores the nzf files'),
] ]
return [(group, opts)] def __init__(self, backend_options):
super(Bind9Backend, self).__init__(backend_options)
def start(self): self.masters = [self._parse_master(master)
super(Bind9Backend, self).start() for master in self.get_backend_option('masters')]
self.rndc_host = self.get_backend_option('rndc_host')
domains = self.central_service.find_domains(self.admin_context) self.rndc_port = self.get_backend_option('rndc_port')
self.rndc_config_file = self.get_backend_option('rndc_config_file')
for domain in domains: self.rndc_key_file = self.get_backend_option('rndc_key_file')
rndc_op = 'reload'
rndc_call = self._rndc_base() + [rndc_op]
rndc_call.extend([domain['name']])
@staticmethod
def _parse_master(master):
try: try:
LOG.debug('Calling RNDC with: %s' % " ".join(rndc_call)) (ip_address, port) = master.split(':', 1)
utils.execute(*rndc_call) except ValueError:
except utils.processutils.ProcessExecutionError as proc_exec_err: ip_address = str(master)
stderr = proc_exec_err.stderr port = DEFAULT_PORT
if stderr.count("rndc: 'reload' failed: not found") is not 0: try:
LOG.warn(_LW("Domain %(d_name)s (%(d_id)s) " port = int(port)
"missing from backend, recreating") % except ValueError:
{'d_name': domain['name'], 'd_id': domain['id']}) raise exceptions.ConfigurationError(
self._sync_domain(domain, new_domain_flag=True) 'Invalid port "%s" in masters option.' % port)
else: if port < 0 or port > 65535:
raise proc_exec_err raise exceptions.ConfigurationError(
'Port "%s" is not between 0 and 65535 in masters option.' %
port)
try:
socket.inet_pton(socket.AF_INET, ip_address)
except socket.error:
raise exceptions.ConfigurationError(
'Invalid IP address "%s" in masters option.' % ip_address)
return {'ip-address': ip_address, 'port': port}
def create_domain(self, context, domain): def create_domain(self, context, domain):
LOG.debug('Create Domain') LOG.debug('Create Domain')
self._sync_domain(domain, new_domain_flag=True) masters = []
for master in self.masters:
def update_domain(self, context, domain): ip_address = master['ip-address']
LOG.debug('Update Domain') port = master['port']
self._sync_domain(domain) masters.append('%s port %s' % (ip_address, port))
rndc_op = [
'addzone',
'%s { type slave; masters { %s;}; file "slave.%s%s"; };' %
(domain['name'].rstrip('.'), '; '.join(masters), domain['name'],
domain['id']),
]
self._execute_rndc(rndc_op)
def delete_domain(self, context, domain): def delete_domain(self, context, domain):
LOG.debug('Delete Domain') LOG.debug('Delete Domain')
self._sync_delete_domain(domain) rndc_op = [
'delzone',
def create_recordset(self, context, domain, recordset): '%s' % domain['name'].rstrip('.'),
LOG.debug('Create RecordSet') ]
self._sync_domain(domain) self._execute_rndc(rndc_op)
def update_recordset(self, context, domain, recordset):
LOG.debug('Update RecordSet')
self._sync_domain(domain)
def delete_recordset(self, context, domain, recordset):
LOG.debug('Delete RecordSet')
self._sync_domain(domain)
def create_record(self, context, domain, recordset, record):
LOG.debug('Create Record')
self._sync_domain(domain)
def update_record(self, context, domain, recordset, record):
LOG.debug('Update Record')
self._sync_domain(domain)
def delete_record(self, context, domain, recordset, record):
LOG.debug('Delete Record')
self._sync_domain(domain)
def _rndc_base(self): def _rndc_base(self):
rndc_call = [ rndc_call = [
'rndc', 'rndc',
'-s', cfg.CONF[self.name].rndc_host, '-s', self.rndc_host,
'-p', str(cfg.CONF[self.name].rndc_port), '-p', str(self.rndc_port),
] ]
if cfg.CONF[self.name].rndc_config_file: if self.rndc_config_file:
rndc_call.extend(['-c', cfg.CONF[self.name].rndc_config_file]) rndc_call.extend(
['-c', self.rndc_config_file])
if cfg.CONF[self.name].rndc_key_file: if self.rndc_key_file:
rndc_call.extend(['-k', cfg.CONF[self.name].rndc_key_file]) rndc_call.extend(
['-k', self.rndc_key_file])
return rndc_call return rndc_call
def _sync_delete_domain(self, domain, new_domain_flag=False): def _execute_rndc(self, rndc_op):
"""Remove domain zone files and reload bind config""" try:
LOG.debug('Delete Domain: %s' % domain['id'])
output_folder = os.path.join(os.path.abspath(cfg.CONF.state_path),
'bind9')
output_path = os.path.join(output_folder, '%s.zone' %
"_".join([domain['name'], domain['id']]))
os.remove(output_path)
rndc_op = 'delzone'
rndc_call = self._rndc_base() + [rndc_op, domain['name']]
utils.execute(*rndc_call)
# This goes and gets the name of the .nzf file that is a mirror of the
# zones.config file we wish to maintain. The file name can change as it
# is a hash of rndc view name, we're only interested in the first file
# name this returns because there is only one .nzf file
nzf_name = glob.glob('%s/*.nzf' % cfg.CONF[self.name].nzf_path)
output_file = os.path.join(output_folder, 'zones.config')
shutil.copyfile(nzf_name[0], output_file)
def _sync_domain(self, domain, new_domain_flag=False):
"""Sync a single domain's zone file and reload bind config"""
# NOTE: Only one thread should be working with the Zonefile at a given
# time. The sleep(1) below introduces a not insignificant risk
# of more than 1 thread working with a zonefile at a given time.
with lockutils.lock('bind9-%s' % domain['id']):
LOG.debug('Synchronising Domain: %s' % domain['id'])
recordsets = self.central_service.find_recordsets(
self.admin_context, {'domain_id': domain['id']})
records = []
for recordset in recordsets:
criterion = {
'domain_id': domain['id'],
'recordset_id': recordset['id']
}
raw_records = self.central_service.find_records(
self.admin_context, criterion)
for record in raw_records:
records.append({
'name': recordset['name'],
'type': recordset['type'],
'ttl': recordset['ttl'],
'data': record['data'],
})
output_folder = os.path.join(os.path.abspath(cfg.CONF.state_path),
'bind9')
output_name = "_".join([domain['name'], domain['id']])
output_path = os.path.join(output_folder, '%s.zone' % output_name)
utils.render_template_to_file('bind9-zone.jinja2',
output_path,
domain=domain,
records=records)
rndc_call = self._rndc_base() rndc_call = self._rndc_base()
if new_domain_flag:
rndc_op = [
'addzone',
'%s { type master; file "%s"; };' % (domain['name'],
output_path),
]
rndc_call.extend(rndc_op) rndc_call.extend(rndc_op)
else: LOG.debug('Executing RNDC call: %s' % " ".join(rndc_call))
rndc_op = 'reload'
rndc_call.extend([rndc_op])
rndc_call.extend([domain['name']])
if not new_domain_flag:
# NOTE: Bind9 will only ever attempt to re-read a zonefile if
# the file's timestamp has changed since the previous
# reload. A one second sleep ensures we cross over a
# second boundary before allowing the next change.
time.sleep(1)
LOG.debug('Calling RNDC with: %s' % " ".join(rndc_call))
utils.execute(*rndc_call) utils.execute(*rndc_call)
except utils.processutils.ProcessExecutionError as e:
nzf_name = glob.glob('%s/*.nzf' % cfg.CONF[self.name].nzf_path) LOG.debug('RNDC call failure: %s' % e)
raise exceptions.Backend(e)
output_file = os.path.join(output_folder, 'zones.config')
shutil.copyfile(nzf_name[0], output_file)

View File

@@ -1,123 +0,0 @@
# Copyright 2014 eBay Inc.
#
# Author: Ron Rickard <rrickard@ebay.com>
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import socket
from oslo.config import cfg
from designate.openstack.common import log as logging
from designate import exceptions
from designate import utils
from designate.backend import base
LOG = logging.getLogger(__name__)
DEFAULT_PORT = 5354
class Bind9PoolBackend(base.PoolBackend):
__plugin_name__ = 'bind9_pool'
@classmethod
def _get_common_cfg_opts(cls):
return [
cfg.StrOpt('rndc-host', default='127.0.0.1', help='RNDC Host'),
cfg.IntOpt('rndc-port', default=953, help='RNDC Port'),
cfg.StrOpt('rndc-config-file', default=None,
help='RNDC Config File'),
cfg.StrOpt('rndc-key-file', default=None, help='RNDC Key File'),
]
def __init__(self, backend_options):
super(Bind9PoolBackend, self).__init__(backend_options)
self.masters = [self._parse_master(master)
for master in self.get_backend_option('masters')]
self.rndc_host = self.get_backend_option('rndc_host')
self.rndc_port = self.get_backend_option('rndc_port')
self.rndc_config_file = self.get_backend_option('rndc_config_file')
self.rndc_key_file = self.get_backend_option('rndc_key_file')
@staticmethod
def _parse_master(master):
try:
(ip_address, port) = master.split(':', 1)
except ValueError:
ip_address = str(master)
port = DEFAULT_PORT
try:
port = int(port)
except ValueError:
raise exceptions.ConfigurationError(
'Invalid port "%s" in masters option.' % port)
if port < 0 or port > 65535:
raise exceptions.ConfigurationError(
'Port "%s" is not between 0 and 65535 in masters option.' %
port)
try:
socket.inet_pton(socket.AF_INET, ip_address)
except socket.error:
raise exceptions.ConfigurationError(
'Invalid IP address "%s" in masters option.' % ip_address)
return {'ip-address': ip_address, 'port': port}
def create_domain(self, context, domain):
LOG.debug('Create Domain')
masters = []
for master in self.masters:
ip_address = master['ip-address']
port = master['port']
masters.append('%s port %s' % (ip_address, port))
rndc_op = [
'addzone',
'%s { type slave; masters { %s;}; file "slave.%s%s"; };' %
(domain['name'].rstrip('.'), '; '.join(masters), domain['name'],
domain['id']),
]
self._execute_rndc(rndc_op)
def delete_domain(self, context, domain):
LOG.debug('Delete Domain')
rndc_op = [
'delzone',
'%s' % domain['name'].rstrip('.'),
]
self._execute_rndc(rndc_op)
def _rndc_base(self):
rndc_call = [
'rndc',
'-s', self.rndc_host,
'-p', str(self.rndc_port),
]
if self.rndc_config_file:
rndc_call.extend(
['-c', self.rndc_config_file])
if self.rndc_key_file:
rndc_call.extend(
['-k', self.rndc_key_file])
return rndc_call
def _execute_rndc(self, rndc_op):
try:
rndc_call = self._rndc_base()
rndc_call.extend(rndc_op)
LOG.debug('Executing RNDC call: %s' % " ".join(rndc_call))
utils.execute(*rndc_call)
except utils.processutils.ProcessExecutionError as e:
LOG.debug('RNDC call failure: %s' % e)
raise exceptions.Backend(e)

View File

@@ -1,3 +0,0 @@
{% for domain in domains %}
zone "{{domain.name}}" { type master; file "{{state_path}}/bind9/{{domain.id}}.zone"; };
{%- endfor %}

View File

@@ -22,7 +22,6 @@ from designate.tests.test_backend import BackendTestMixin
class BackendTestCase(tests.TestCase, BackendTestMixin): class BackendTestCase(tests.TestCase, BackendTestMixin):
scenarios = [ scenarios = [
('bind9', dict(backend_driver='bind9', group='service:agent')),
('fake', dict(backend_driver='fake', group='service:agent')), ('fake', dict(backend_driver='fake', group='service:agent')),
('nsd4slave', dict(backend_driver='nsd4slave', group='service:agent', ('nsd4slave', dict(backend_driver='nsd4slave', group='service:agent',
server_fixture=NSD4Fixture)), server_fixture=NSD4Fixture)),

View File

@@ -26,7 +26,7 @@ from designate import utils
class TestUtils(TestCase): class TestUtils(TestCase):
def test_resource_string(self): def test_resource_string(self):
name = ['templates', 'bind9-config.jinja2'] name = ['templates', 'bind9-zone.jinja2']
resource_string = utils.resource_string(*name) resource_string = utils.resource_string(*name)
@@ -48,14 +48,14 @@ class TestUtils(TestCase):
utils.load_schema('v1', 'missing') utils.load_schema('v1', 'missing')
def test_load_template(self): def test_load_template(self):
name = 'bind9-config.jinja2' name = 'bind9-zone.jinja2'
template = utils.load_template(name) template = utils.load_template(name)
self.assertIsInstance(template, Template) self.assertIsInstance(template, Template)
def test_load_template_keep_trailing_newline(self): def test_load_template_keep_trailing_newline(self):
name = 'bind9-config.jinja2' name = 'bind9-zone.jinja2'
template = utils.load_template(name) template = utils.load_template(name)
self.assertTrue(template.environment.keep_trailing_newline) self.assertTrue(template.environment.keep_trailing_newline)

View File

@@ -109,7 +109,7 @@ debug = False
#----------------------- #-----------------------
[service:agent] [service:agent]
# Driver used for backend communication (e.g. bind9, powerdns) # Driver used for backend communication (e.g. bind9, powerdns)
#backend_driver = bind9 #backend_driver = powerdns
#----------------------- #-----------------------
# Sink Service # Sink Service
@@ -132,7 +132,7 @@ debug = False
# Pool Manager Service # Pool Manager Service
#----------------------- #-----------------------
[service:pool_manager] [service:pool_manager]
#backends = bind9_pool #backends = bind9
#workers = None #workers = None
#pool_name = default #pool_name = default
#threshold-percentage = 100 #threshold-percentage = 100
@@ -213,27 +213,6 @@ debug = False
######################## ########################
## Backend Configuration ## Backend Configuration
######################## ########################
#-----------------------
# Bind9 Backend
#-----------------------
[backend:bind9]
#rndc_host = 127.0.0.1
#rndc_port = 953
#rndc_config_file = /etc/rndc.conf
#rndc_key_file = /etc/rndc.key
#-----------------------
# Bind9+MySQL Backend
#-----------------------
[backend:mysqlbind9]
#connection = mysql://user:password@host/schema
#rndc_host = 127.0.0.1
#rndc_port = 953
#rndc_config_file = /etc/rndc.conf
#rndc_key_file = /etc/rndc.key
#write_database = True
#dns_server_type = master
#----------------------- #-----------------------
# PowerDNS Backend # PowerDNS Backend
#----------------------- #-----------------------
@@ -268,7 +247,7 @@ debug = False
#----------------------- #-----------------------
# Global Bind9 Pool Backend # Global Bind9 Pool Backend
#----------------------- #-----------------------
[backend:bind9_pool] [backend:bind9]
#server_ids = 6a5032b6-2d96-43ee-b25b-7d784e2bf3b2 #server_ids = 6a5032b6-2d96-43ee-b25b-7d784e2bf3b2
#masters = 127.0.0.1:5354 #masters = 127.0.0.1:5354
#rndc_host = 127.0.0.1 #rndc_host = 127.0.0.1
@@ -279,6 +258,6 @@ debug = False
#----------------------- #-----------------------
# Server Specific Bind9 Pool Backend # Server Specific Bind9 Pool Backend
#----------------------- #-----------------------
[backend:bind9_pool:6a5032b6-2d96-43ee-b25b-7d784e2bf3b2] [backend:bind9:6a5032b6-2d96-43ee-b25b-7d784e2bf3b2]
# host = 127.0.0.1 # host = 127.0.0.1
# port = 53 # port = 53

View File

@@ -69,7 +69,6 @@ designate.notification.handler =
designate.backend = designate.backend =
bind9 = designate.backend.impl_bind9:Bind9Backend bind9 = designate.backend.impl_bind9:Bind9Backend
bind9_pool = designate.backend.impl_bind9_pool:Bind9PoolBackend
powerdns = designate.backend.impl_powerdns:PowerDNSBackend powerdns = designate.backend.impl_powerdns:PowerDNSBackend
rpc = designate.backend.impl_rpc:RPCBackend rpc = designate.backend.impl_rpc:RPCBackend
fake = designate.backend.impl_fake:FakeBackend fake = designate.backend.impl_fake:FakeBackend