AutoDevReverseProxy/script/hostman.sh
2023-01-18 10:12:23 +01:00

54 lines
1.8 KiB
Bash
Executable file

#!/usr/bin/env sh
# Configurable Variables
DOCKER_SOCK_PATH="${DOCKER_SOCK_PATH:-/tmp/docker.sock}"
NETWORK_NAME="${NETWORK_NAME:-proxy}"
# Path to Docker Templater and Templates
TEMPLATER_PATH="/docker-templater.sh"
TEMPLATE_FOLDER_PATH="/templates"
get_date() {
printf '%s' "$(date +'%Y.%m.%d_%H:%M:%S')"
}
query_docker () {
curl --unix-socket $DOCKER_SOCK_PATH --silent -g http://v1.41/$1$2
}
update_templates() {
CONTAINER_LIST=$(query_docker "containers/json" "?filters={%22network%22:[%22${NETWORK_NAME}%22],%22status%22:[%22running%22]}")
LABELS_NEW="$(echo "${CONTAINER_LIST}" | jq '.[].Labels | to_entries | map(select(.key | startswith("local.")) | .key + .value) | sort | .[] | @base64')"
if [ "${LABELS_NEW}" != "${LABELS_OLD}" ]
then
if [ -n "${LABELS_OLD}" ]
then
printf '%s | Container label list change detected.\n' "$(get_date)"
fi
LABELS_OLD="${LABELS_NEW}"
for template in "${TEMPLATE_FOLDER_PATH}"/*
do
if ! "${TEMPLATER_PATH}" "${template}" "${CONTAINER_LIST}"
then
printf '%s | Error Processing Template: %s\n' "$(get_date)" "${template}"
fi
done
fi
}
# Initial Generation
update_templates
LAST_CHECK="$(date +%s)"
while true
do
EVENTS=""
printf '%s | Listening for docker events\n' "$(get_date)"
while [ -z "${EVENTS}" ]
do
NEXT_CHECK="$(($(date +%s) + 5))"
EVENTS=$(query_docker 'events' "?since=${LAST_CHECK}&until=${NEXT_CHECK}&filters={%22event%22:[%22die%22,%22kill%22,%22oom%22,%22pause%22,%22restart%22,%22start%22,%22stop%22,%22unpause%22,%22update%22]}")
LAST_CHECK="${NEXT_CHECK}"
done
printf '%s | Checking for changes in container label list.\n' "$(get_date)"
update_templates
done