feat: use internal wrapper for consul registration
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 41s
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 41s
This commit is contained in:
68
register.sh
Normal file
68
register.sh
Normal file
@@ -0,0 +1,68 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 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}..."
|
||||
curl -s -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}..."
|
||||
curl -s -X PUT "${CONSUL_HTTP_ADDR}/v1/agent/service/deregister/${id}"
|
||||
}
|
||||
|
||||
echo "Starting Consul registration loop..."
|
||||
|
||||
LAST_STATE="unknown"
|
||||
|
||||
while true; do
|
||||
if /usr/local/bin/litefs is-primary > /dev/null 2>&1; then
|
||||
CURRENT_STATE="primary"
|
||||
else
|
||||
CURRENT_STATE="replica"
|
||||
fi
|
||||
|
||||
if [ "$CURRENT_STATE" != "$LAST_STATE" ]; then
|
||||
echo "State changed from ${LAST_STATE} to ${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
|
||||
Reference in New Issue
Block a user