From 2ae3bff9d79a24b25b1ebb63f42d0858b69e7d57 Mon Sep 17 00:00:00 2001 From: Kevin Baensch Date: Fri, 11 Nov 2022 15:39:33 +0100 Subject: [PATCH] Update hostman script. --- hostman.sh | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/hostman.sh b/hostman.sh index 85d0722..634b22f 100755 --- a/hostman.sh +++ b/hostman.sh @@ -1,31 +1,43 @@ #!/usr/bin/env sh # Configurable Variables -DOCKER_SOCK_PATH="/tmp/docker.sock" -HOST_CONF_PATH="/tmp/hosts" -NETWORK_NAME="proxy" +[ -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" query_docker () { echo $(curl --unix-socket $DOCKER_SOCK_PATH --silent -g http://v1.41/$1/json$2) } -while true -do +get_host_list() { PROXY_HOST_CONF="" CONTAINER_LIST=$(query_docker "containers" "?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 Env variables + # Query individual container to access relevant data + CONTAINER_DATA=$(query_docker "containers/${id}") + if $RESOLVE_LOCALHOST + 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=$(query_docker "containers/${id}" | jq -cr '.Config.Env[] | select(contains("VIRTUAL_HOST=")) | split("=")[1]') + HOST_NAMES=$(echo $CONTAINER_DATA | jq -cr ".Config.Env[] | select(contains(\"$DOCKER_HOSTNAME_VAR=\")) | split(\"=\")[1]") for hostname in $HOST_NAMES do - PROXY_HOST_CONF="$PROXY_HOST_CONF\n127.0.0.1 $hostname # Added by hostman" + PROXY_HOST_CONF="$PROXY_HOST_CONF\n$HOST_IP $hostname # Added by hostman" done done + echo $PROXY_HOST_CONF +} +while true +do FILTERED_HOSTS=$(grep -ve "# Added by hostman$" $HOST_CONF_PATH) - echo -e "$FILTERED_HOSTS$PROXY_HOST_CONF" > $HOST_CONF_PATH + echo -e "$FILTERED_HOSTS$(get_host_list)" > $HOST_CONF_PATH sleep 10 done