designate/devstack/designate_plugins/backend-pdns4
Graham Hayes f5a9fbe617 Add pGSQL support for pdns4 driver in devstack
Change-Id: Iae8c8cd2d599aa3e5756786f5844231ea0e366ae
2016-12-07 16:20:34 +00:00

198 lines
5.2 KiB
Plaintext

# Configure the powerdns backend
# Enable with:
# DESIGNATE_BACKEND_DRIVER=powerdns
# 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_PDNS_XTRACE=$(set +o | grep xtrace)
set +o xtrace
# Defaults
# --------
if is_fedora; then
POWERDNS_CFG_DIR=/etc/pdns
else
POWERDNS_CFG_DIR=/etc/powerdns
fi
# Entry Points
# ------------
# install_designate_backend - install any external requirements
function install_designate_backend {
if is_ubuntu; then
GetOSVersion
if [ "$os_CODENAME" = "trusty" ]; then
sudo tee /etc/apt/sources.list.d/pdns.list > /dev/null <<EOF
deb [arch=amd64] http://repo.powerdns.com/ubuntu trusty-auth-40 main
EOF
sudo tee /etc/apt/preferences.d/pdns > /dev/null <<EOF
Package: pdns-*
Pin: origin repo.powerdns.com
Pin-Priority: 600
EOF
curl https://repo.powerdns.com/FD380FBB-pub.asc | sudo apt-key add - &&
sudo apt-get update
elif [ "$os_CODENAME" = "xenial" ]; then
echo "Use PDNS4 from apt repo"
else
die $LINENO "PDNS4 backend only supports trusty or xenial"
fi
PDNS=pdns-server
else
die $LINENO "PDNS4 Backend plugin backend only supports Ubuntu"
fi
if is_service_enabled mysql; then
PDNS+=" pdns-backend-mysql"
elif is_service_enabled postgresql; then
PDNS+=" pdns-backend-pgsql"
else
die $LINENO "PDNS4 backend only supports MySQL / pgSQL"
fi
install_package $PDNS
sudo rm -rf $POWERDNS_CFG_DIR/pdns.d
}
# configure_designate_backend - make configuration changes, including those to other services
function configure_designate_backend {
# Generate Designate pool.yaml file
sudo tee $DESIGNATE_CONF_DIR/pools.yaml > /dev/null <<EOF
---
- name: default
description: DevStack PowerDNS Pool
attributes: {}
ns_records:
- hostname: $DESIGNATE_DEFAULT_NS_RECORD
priority: 1
nameservers:
- host: $DESIGNATE_SERVICE_HOST
port: $DESIGNATE_SERVICE_PORT_DNS
targets:
- type: pdns4
description: PowerDNS Database Cluster
masters:
- host: $DESIGNATE_SERVICE_HOST
port: $DESIGNATE_SERVICE_PORT_MDNS
options:
host: $DESIGNATE_SERVICE_HOST
port: $DESIGNATE_SERVICE_PORT_DNS
api_endpoint: http://$DESIGNATE_SERVICE_HOST:8081
api_token: changeme
EOF
# Generate PowerDNS pdns.conf file
sudo tee $POWERDNS_CFG_DIR/pdns.conf > /dev/null <<EOF
# General Config
setgid=pdns
setuid=pdns
config-dir=$POWERDNS_CFG_DIR
socket-dir=/var/run
guardian=yes
daemon=yes
disable-axfr=no
local-address=$DESIGNATE_SERVICE_HOST
local-port=$DESIGNATE_SERVICE_PORT_DNS
master=no
slave=yes
cache-ttl=0
query-cache-ttl=0
negquery-cache-ttl=0
out-of-zone-additional-processing=no
webserver=yes
webserver-address=$DESIGNATE_SERVICE_HOST
api=yes
api-key=changeme
EOF
if is_service_enabled mysql; then
sudo tee -a $POWERDNS_CFG_DIR/pdns.conf > /dev/null <<EOF
# Launch gmysql backend
launch=gmysql
# gmysql parameters
gmysql-host=$DATABASE_HOST
gmysql-user=$DATABASE_USER
gmysql-password=$DATABASE_PASSWORD
gmysql-dbname=designate_pdns
gmysql-dnssec=yes
EOF
elif is_service_enabled postgresql; then
sudo tee -a $POWERDNS_CFG_DIR/pdns.conf > /dev/null <<EOF
# Launch gpgsql backend
launch=gpgsql
# gmysql parameters
gpgsql-host=$DATABASE_HOST
gpgsql-user=$DATABASE_USER
gpgsql-password=$DATABASE_PASSWORD
gpgsql-dbname=designate_pdns
gpgsql-dnssec=yes
EOF
else
die $LINENO "PDNS4 backend only supports MySQL / pgSQL"
fi
restart_service pdns
}
# init_designate_backend - initialize databases, etc.
function init_designate_backend {
# Stop pdns so that the migration succeeds, if not you get a error
# that the schema is still in use.
if is_service_enabled postgresql; then
stop_designate_backend
fi
# (Re)create designate_pdns database
recreate_database designate_pdns utf8
if is_service_enabled mysql; then
sudo mysql -u root designate_pdns < $DESIGNATE_PLUGINS/backend-pdns4-mysql-db.sql
elif is_service_enabled postgresql; then
sudo psql -U root -d designate_pdns -f $DESIGNATE_PLUGINS/backend-pdns4-pgsql-db.sql
else
die $LINENO "PDNS4 backend only supports MySQL"
fi
}
# create_designate_pool_configuration_backend - Perform post-pool config tasks
function create_designate_pool_configuration_backend {
# Init and migrate designate_pdns database
:
}
# start_designate_backend - start any external services
function start_designate_backend {
start_service pdns
}
# stop_designate_backend - stop any external services
function stop_designate_backend {
stop_service pdns
}
# cleanup_designate_backend - remove transient data and cache
function cleanup_designate_backend {
:
}
# Restore xtrace
$DP_PDNS_XTRACE