test/lib/dashboard.sh

117 lines
3.2 KiB
Bash

#!/bin/bash
#
# Dashboard Service
PATH=$HOME/.docker/cli-plugins:/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
get_appvars
config_dashboard() {
echo -ne "* Configuring dashboard container.."
if [ ! -d "/federated/apps/dashboard" ]; then
mkdir -p /federated/apps/dashboard/data
fi
cat > /federated/apps/dashboard/docker-compose.yml <<EOF
services:
dashboard:
image: federatedcomputer/dashboard:\${IMAGE_VERSION}
container_name: dashboard
hostname: dashboard.$DOMAIN
restart: always
networks:
core:
ipv4_address: 192.168.0.41
env_file:
- ./.env
labels:
- "traefik.enable=true"
- "traefik.http.routers.dashboard.rule=Host(\`dashboard.$DOMAIN\`)"
- "traefik.http.routers.dashboard.entrypoints=websecure"
- "traefik.http.routers.dashboard.tls.certresolver=letsencrypt"
networks:
core:
external: true
EOF
cat > /federated/apps/dashboard/.env <<EOF
IMAGE_VERSION="latest"
DOMAIN="$DOMAIN"
TIER="$TIER"
EOF
chmod 600 /federated/apps/dashboard/.env
if [[ ! -f "/root/.docker/config.json" ]]; then
[[ ! -d "/root/.docker" ]] && mkdir /root/.docker
cat > /root/.docker/config.json <<EOF
{
"auths": {
"https://index.docker.io/v1/": {
"auth": "ZGF2aWRwYXVseW91bmc6VkdBN2F6ajR5ZXQ1bW5oQGV0eA=="
}
}
}
EOF
chmod 600 /root/.docker/config.json
fi
echo -ne "done."
}
start_dashboard() {
# Start service with command to make sure it's up before proceeding
start_service "dashboard" "nc -z 192.168.0.41 8080 &> /dev/null" "7"
docker exec pdns pdnsutil add-record $DOMAIN dashboard A 86400 $EXTERNALIP &> /dev/null
[ $? -ne 0 ] && fail "Couldn't add dns record for dashboard"
echo -ne "done."
}
uninstall_dashboard() {
echo -ne "* Uninstalling dashboard container.."
# First stop the service
cd /federated/apps/dashboard && docker compose -f docker-compose.yml -p dashboard down &> /dev/null
# Delete the app directory
rm -rf /federated/apps/dashboard
# Delete the image
docker image rm federatedcomputer/dashboard:$IMAGE_VERSION &> /dev/null
# Delete the DNS record
docker exec pdns pdnsutil delete-rrset $DOMAIN dashboard A
echo -ne "done.\n"
}
email_dashboard() {
echo -ne "* Sending email to customer.."
cat > /federated/apps/mail/data/root/certs/mailfile <<EOF
<html>
<img src="https://www.federated.computer/wp-content/uploads/2023/11/logo.png" alt="" /><br>
<p>
<h4>Dashboard is now installed on $DOMAIN</h4>
<p>
Dear Customer,<br>
<br>
We'd like to introduce you to "Dashboard", a simple application listing all the applications installed on your Federated Core. You can find "Dashboard" at <a href="https://dashboard.$DOMAIN">https://dashboard.$DOMAIN</a>
<br>
<br>
This is the first step in a number of big changes you'll be seeing from Federated Computer in the coming months to improve and enhance your Federated Core. Thank you for being a customer!
<br>
<br>
Best,
<br>
Federated Computer
<p>
</html>
EOF
# Send out e-mail from mail container with details
docker exec mail bash -c "mail -r admin@$DOMAIN -a \"Content-type: text/html\" -s \"Application installed on $DOMAIN\" $EMAIL < /root/certs/mailfile"
rm /federated/apps/mail/data/root/certs/mailfile
echo -ne "done.\n"
}