# 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 PDNS=pdns-server elif is_fedora || is_suse; then PDNS=pdns else PDNS=pdns-server fi if is_service_enabled mysql; then PDNS+=" pdns-backend-mysql" elif is_service_enabled postgresql; then PDNS+=" pdns-backend-pgsql" else die $LINENO "PowerDNS backend only supports MySQL / PostgreSQL" 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: powerdns description: PowerDNS Database Cluster masters: - host: $DESIGNATE_SERVICE_HOST port: $DESIGNATE_SERVICE_PORT_MDNS options: host: $DESIGNATE_SERVICE_HOST port: $DESIGNATE_SERVICE_PORT_DNS connection: '`database_connection_url designate_pdns`' 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 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 "PowerDNS backend only supports MySQL / PostgreSQL" 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 } # create_designate_pool_configuration_backend - Perform post-pool config tasks function create_designate_pool_configuration_backend { # Init and migrate designate_pdns database designate-manage powerdns sync $DESIGNATE_POOL_ID } # 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