Jose Luis Franco Arza f1a1c324fb Take WSGIScriptAlias into account in docker healthcheck.
Some services running as vhost, as nova_placement make
use of an  alias in which the wsgi service is mapped.
Currently, the nova_placement healthcheck has hardcoded
the alias in the curl [0] request, but if this alias
changes or other service modifies its from / to another,
then the check will start failing again.

[0] - https://github.com/openstack/tripleo-common/blob/master/healthcheck/nova-placement#L6

Change-Id: I5a325be424740e80eafd6b4abd8eb4b3111740aa
Closes-Bug: #1781623
2018-07-17 09:25:33 +02:00

76 lines
1.9 KiB
Bash

: ${HEALTHCHECK_CURL_MAX_TIME:=10}
: ${HEALTHCHECK_CURL_USER_AGENT:=curl-healthcheck}
: ${HEALTHCHECK_CURL_WRITE_OUT:='\n%{http_code} %{remote_ip}:%{remote_port} %{time_total} seconds\n'}
healthcheck_curl () {
curl -g -k -q --fail \
--max-time "${HEALTHCHECK_CURL_MAX_TIME}" \
--user-agent "${HEALTHCHECK_CURL_USER_AGENT}" \
--write-out "${HEALTHCHECK_CURL_WRITE_OUT}" \
"$@" || return 1
}
healthcheck_port () {
process=$1
# ss truncate command name to 15 characters and this behaviour
# cannot be disabled
if [ ${#process} -gt 15 ] ; then
process=${process:0:15}
fi
shift 1
args=$@
ports=${args// /|}
ss -ntp | awk '{print $5,"-",$6}' | egrep ":($ports)" | grep "$process"
}
healthcheck_listen () {
process=$1
# ss truncate command name to 15 characters and this behaviour
# cannot be disabled
if [ ${#process} -gt 15 ] ; then
process=${process:0:15}
fi
shift 1
args=$@
ports=${args// /|}
ss -lnp | awk '{print $5,"-",$7}' | egrep ":($ports)" | grep "$process"
}
healthcheck_socket () {
process=$1
socket=$2
# lsof truncate command name to 15 characters and this behaviour
# cannot be disabled
if [ ${#process} -gt 15 ] ; then
process=${process:0:15}
fi
lsof -Fc -Ua $socket | grep "c$process"
}
get_config_val () {
crudini --get "$1" "$2" "$3" 2> /dev/null || echo "$4"
}
# apachectl -S is slightly harder to parse and doesn't say if the vhost is serving SSL
get_url_from_vhost () {
vhost_file=$1
server_name=$(awk '/ServerName/ {print $2}' $vhost_file)
ssl_enabled=$(awk '/SSLEngine/ {print $2}' $vhost_file)
bind_port=$(grep -h "<VirtualHost .*>" $vhost_file | sed 's/<VirtualHost .*:\(.*\)>/\1/')
wsgi_alias=$(awk '/WSGIScriptAlias/ {print $2}' $vhost_file)
proto=http
if [[ $ssl_enabled == "on" ]]; then
proto=https
fi
if [[ $wsgi_alias != "/" ]]; then
wsgi_alias="${wsgi_alias}/"
fi
echo ${proto}://${server_name}:${bind_port}${wsgi_alias}
}