[WIP] Docker templater mostly working (to be squashed)

This commit is contained in:
Kevin Baensch 2022-12-16 14:17:11 +01:00
parent d1c6d54a22
commit ed71970153
7 changed files with 77 additions and 56 deletions

View file

@ -55,7 +55,7 @@ fi
for row in $(jq -r '.[] | @base64' <<< "${DOCKER_DATA}")
do
CONTAINER_DATA=$(base64 --decode <<< "${row}");
CONTAINER_DATA=$(base64 -d <<< "${row}");
# Set non Label values
if [ -z "${LOCAL_IP}" ]
then
@ -91,7 +91,7 @@ do
if template_hook
then
# FIX with printf
RESULT+="${PARTIAL_RESULT}"
RESULT=$(printf '%s' "${RESULT}" "${RESULT:+$SEPARATOR}" "${PARTIAL_RESULT}")
fi
else
RESULT=$(printf '%s' "${RESULT}" "${RESULT:+$SEPARATOR}" "${PARTIAL_RESULT}")
@ -100,23 +100,19 @@ do
# Unset label-environment variables for next container
for var in $(envsubst -v "${TEMPLATE}")
do
if [ "${var}" != "LOCAL_IP" ]
then
unset "${!var}"
fi
unset "${var}"
done
done
RESULT="${WRAP_START}${RESULT}${WRAP_END}"
RESULT="$(printf "%b" "${WRAP_START}" "${RESULT}" "${WRAP_END}")"
if [ -z "${OUT}" ]
then
printf "%b\n" "${RESULT}";
printf "%b" "${RESULT}";
else
if ! diff --brief "${OUT}" - > /dev/null 2>&1 <<< "${RESULT}"
if [ "$(cat "${OUT}")" != "${RESULT}" ]
then
printf "Template Task: '%s' has been written to: '%s'\n" "${TEMPLATE_SRC}" "${OUT}"
printf "%b\n" "${RESULT}" > "${OUT}";
printf "%s | Template Task: '%s' has been written to: '%s'\n" "$(date --iso-8601)" "${TEMPLATE_SRC}" "${OUT}"
printf "%b" "${RESULT}" > "${OUT}";
fi
fi

View file

@ -1,46 +1,33 @@
#!/usr/bin/env sh
# Configurable Variables
[ -z $DOCKER_SOCK_PATH ] && DOCKER_SOCK_PATH="/tmp/docker.sock"
[ -z $NETWORK_NAME ] && NETWORK_NAME="proxy"
[ -z $RESOLVE_DOCKERHOST ] && RESOLVE_DOCKERHOST=false
[ -z $HOST_CONF_PATH ] && HOST_CONF_PATH="/tmp/hosts"
[ -z $DOCKER_HOSTNAME_VAR ] && DOCKER_HOSTNAME_VAR="VIRTUAL_HOST"
DOCKER_SOCK_PATH="${DOCKER_SOCK_PATH:-/tmp/docker.sock}"
NETWORK_NAME="${NETWORK_NAME:-proxy}"
TEMPLATER_PATH="${TEMPLATER_PATH:-/docker-templater.sh}"
TEMPLATE_FOLDER_PATH="${TEMPLATE_FOLDER_PATH:-/templates}"
query_docker () {
curl --unix-socket $DOCKER_SOCK_PATH --silent -g http://v1.41/$1$2
}
get_host_list() {
PROXY_HOST_CONF=""
CONTAINER_LIST=$(query_docker "containers/json" "?filters={%22network%22:[%22${NETWORK_NAME}%22],%22status%22:[%22running%22]}" | jq -cr '.[].Id')
for id in $CONTAINER_LIST
do
# Query individual container to access relevant data
CONTAINER_DATA=$(query_docker "containers/${id}/json")
if $RESOLVE_DOCKERHOST
then
HOST_IP=$(echo $CONTAINER_DATA | jq -cr '.NetworkSettings.Networks.proxy.IPAddress')
else
HOST_IP="127.0.0.1"
fi
# Filter Env for HOSTNAME, remove list parenthesis and split/only keep values
HOST_NAMES=$(echo $CONTAINER_DATA | jq -cr ".Config.Env[] | select(contains(\"$DOCKER_HOSTNAME_VAR=\")) | split(\"=\")[1]")
for hostname in $HOST_NAMES
update_templates() {
CONTAINER_LIST=$(query_docker "containers/json" "?filters={%22network%22:[%22${NETWORK_NAME}%22],%22status%22:[%22running%22]}")
if [ "${CONTAINER_LIST}" != "${OLD_CONTAINER_LIST}" ]
then
for template in "${TEMPLATE_FOLDER_PATH}"/*
do
PROXY_HOST_CONF="$PROXY_HOST_CONF\n$HOST_IP $hostname # Added by hostman"
if ! "${TEMPLATER_PATH}" "${template}" "${CONTAINER_LIST}"
then
echo "Error Processing Template: ${template}"
fi
done
done
echo $PROXY_HOST_CONF
OLD_CONTAINER_LIST="${CONTAINER_LIST}"
fi
}
update_host_list() {
FILTERED_HOSTS=$(grep -ve "# Added by hostman$" $HOST_CONF_PATH)
echo -e "$FILTERED_HOSTS$(get_host_list)" > $HOST_CONF_PATH
}
# Initial Generation
update_templates
update_host_list
# cannot filter because reailine no longer recognized lines otherwise (check how IFS changes)
query_docker "events" | while true
do
@ -48,7 +35,7 @@ do
# wait for related events to finish
while [ $? -eq 0 ]
do
read -t 5 -r;
read -t 8 -r
done
update_host_list
update_templates
done

View file

@ -5,4 +5,4 @@ chown -R sqlproxy:sqlproxy /etc/ssh/.ssh
chmod 0700 /etc/ssh/.ssh
chmod 0600 /etc/ssh/.ssh/authorized_keys
source ./hostman.sh
sleep infinity