All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 50s
74 lines
2.3 KiB
Bash
74 lines
2.3 KiB
Bash
#!/bin/bash
|
|
set -x
|
|
|
|
# Configuration
|
|
SERVICE_NAME="navidrome"
|
|
REPLICA_SERVICE_NAME="replica-navidrome"
|
|
PORT=4533
|
|
CONSUL_HTTP_ADDR="${CONSUL_URL:-http://localhost:8500}"
|
|
NODE_IP="${ADVERTISE_IP}"
|
|
CHECK_INTERVAL="10s"
|
|
|
|
# Tags for the Primary service (Traefik enabled)
|
|
PRIMARY_TAGS='["navidrome","web","traefik.enable=true","urlprefix-/navidrome","tools","traefik.http.routers.navidromelan.rule=Host(`navidrome.service.dc1.consul`)","traefik.http.routers.navidromewan.rule=Host(`m.fbleagh.duckdns.org`)","traefik.http.routers.navidromewan.middlewares=dex@consulcatalog","traefik.http.routers.navidromewan.tls=true"]'
|
|
|
|
# Tags for the Replica service
|
|
REPLICA_TAGS='["navidrome-replica"]'
|
|
|
|
register_service() {
|
|
local name=$1
|
|
local tags=$2
|
|
local id="navidrome-${NODE_IP}-${name}"
|
|
|
|
echo "Registering as ${name} with ID ${id} at ${NODE_IP}:${PORT}..."
|
|
curl -v -X PUT -d "{
|
|
\"ID\": \"${id}\",
|
|
\"Name\": \"${name}\",
|
|
\"Tags\": ${tags},
|
|
\"Address\": \"${NODE_IP}\",
|
|
\"Port\": ${PORT},
|
|
\"Check\": {
|
|
\"HTTP\": \"http://${NODE_IP}:${PORT}/app\",
|
|
\"Interval\": \"${CHECK_INTERVAL}\",
|
|
\"Timeout\": \"2s\"
|
|
}
|
|
}" "${CONSUL_HTTP_ADDR}/v1/agent/service/register"
|
|
}
|
|
|
|
deregister_service() {
|
|
local name=$1
|
|
local id="navidrome-${NODE_IP}-${name}"
|
|
echo "Deregistering ${name} with ID ${id}..."
|
|
curl -v -X PUT "${CONSUL_HTTP_ADDR}/v1/agent/service/deregister/${id}"
|
|
}
|
|
|
|
echo "Starting Consul registration loop..."
|
|
|
|
LAST_STATE="unknown"
|
|
|
|
while true; do
|
|
# In LiteFS 0.5, .primary file exists ONLY on replicas.
|
|
# We check /data/.primary because /data is our mount point.
|
|
if [ ! -f /data/.primary ]; then
|
|
CURRENT_STATE="primary"
|
|
else
|
|
CURRENT_STATE="replica"
|
|
fi
|
|
|
|
echo "Current node state: ${CURRENT_STATE}"
|
|
|
|
if [ "$CURRENT_STATE" != "$LAST_STATE" ]; then
|
|
echo "State change detected: ${LAST_STATE} -> ${CURRENT_STATE}"
|
|
if [ "$CURRENT_STATE" == "primary" ]; then
|
|
deregister_service "$REPLICA_SERVICE_NAME"
|
|
register_service "$SERVICE_NAME" "$PRIMARY_TAGS"
|
|
else
|
|
deregister_service "$SERVICE_NAME"
|
|
register_service "$REPLICA_SERVICE_NAME" "$REPLICA_TAGS"
|
|
fi
|
|
LAST_STATE="$CURRENT_STATE"
|
|
fi
|
|
|
|
sleep 15
|
|
done
|