test/lib/pdnsadmin.sh

100 lines
2.8 KiB
Bash

#!/bin/bash
#
# PowerDNS Admin Service
PATH=$HOME/.docker/cli-plugins:/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
config_pdnsadmin() {
echo -ne "* Configuring pdnsadmin container.."
if [ ! -d "/federated/apps/pdnsadmin" ]; then
mkdir -p /federated/apps/pdnsadmin/data/etc
fi
cat > /federated/apps/pdnsadmin/docker-compose.yml <<EOF
services:
pdnsadmin:
image: pschiffe/pdns-admin:\${IMAGE_VERSION}
container_name: pdnsadmin
hostname: pdnsadmin.$DOMAIN
restart: always
networks:
core:
ipv4_address: 192.168.0.12
env_file:
- ./.env
volumes:
- ./data/etc/uwsgi.ini:/etc/uwsgi.ini
labels:
- "traefik.enable=true"
- "traefik.http.routers.pdnsadmin.rule=Host(\`powerdns.$DOMAIN\`)"
- "traefik.http.routers.pdnsadmin.entrypoints=websecure"
- "traefik.http.routers.pdnsadmin.tls.certresolver=letsencrypt"
networks:
core:
external: true
EOF
MYSQL_PASSWORD=`grep MYSQL_PASSWORD /federated/apps/pdnsmysql/.env | awk -F= '{ print $2 }'`
PDNS_APIKEY=`grep PDNS_api_key /federated/apps/pdns/.env | awk -F= '{ print $2 }'`
PDNS_ADMIN_WEBSERVER_PASSWORD_SALT=`htpasswd -bnBC 10 "" $ADMINPASS | tr -d ':\n' | sed 's/$2y/$2b/'`
PDNS_MYSQL_COMMAND="insert into user (id, username, password, firstname, lastname, email, otp_secret, role_id, confirmed) values (\"1\", \"admin@$DOMAIN\", \"$PDNS_ADMIN_WEBSERVER_PASSWORD_SALT\", \"Admin\", \"Federated\", \"admin@$DOMAIN\", \"\", \"1\", \"0\");"
cat > /federated/apps/pdnsadmin/.env <<EOF
IMAGE_VERSION="$(current_version pdnsadmin)"
PDNS_ADMIN_SQLA_DB_HOST="'mysql'"
PDNS_ADMIN_SQLA_DB_PORT="'3306'"
PDNS_ADMIN_SQLA_DB_USER="'pdns'"
PDNS_ADMIN_SQLA_DB_PASSWORD="'$MYSQL_PASSWORD'"
PDNS_ADMIN_SQLA_DB_NAME="'pdns'"
PDNS_ADMIN_SERVER_EXTERNAL_SSL=True
PDNS_API_URL="http://pdns.$DOMAIN:8081/"
PDNS_API_KEY="$PDNS_APIKEY"
PDNS_VERSION="4.9.0"
EOF
chmod 600 /federated/apps/pdnsadmin/.env
cat > /federated/apps/pdnsadmin/data/etc/uwsgi.ini <<'EOF'
[uwsgi]
strict = true
master = true
die-on-term = true
need-app = true
plugins = python3
uid = uwsgi
gid = uwsgi
chdir = /opt/powerdns-admin
pythonpath = /opt/powerdns-admin
mount = /=run.py
manage-script-name = true
callable = app
vacuum = true
harakiri = 20
buffer-size = 32768
post-buffering = 8192
protocol = http
http-socket = 0.0.0.0:9494
pidfile = /run/uwsgi/%n.pid
enable-threads = true
EOF
echo -ne "done.\n"
}
start_pdnsadmin() {
# Start service with command to make sure it's up before proceeding
start_service "pdnsadmin" "nc -z 192.168.0.12 9494 &> /dev/null" "8"
# Run MySQL command to create admin user for pdns admin interface
# Allowed to fail because the user may already be there from a previous start.
docker exec pdnsmysql bash -c "mariadb -updns -p$MYSQL_PASSWORD pdns -e '$PDNS_MYSQL_COMMAND;'" || :
echo -ne "done.\n"
}