-
Hahn Axel (hahn) authoredHahn Axel (hahn) authored
inc_dockerfunctions.sh 2.60 KiB
#!/bin/bash
# ======================================================================
#
# Shared functions for DOCKER checks
#
# requirements:
# - docker
# - jq
#
# ----------------------------------------------------------------------
# Cli docs:
# https://docs.docker.com/engine/reference/commandline/docker/
# ----------------------------------------------------------------------
# 2024-01-19 v1.0 <axel.hahn@unibe.ch> init
# ======================================================================
. $(dirname $0)/inc_pluginfunctions
_is_docker_rootless=0
_is_docker_detected=0
# ----------------------------------------------------------------------
# FUNCTIONS
# ----------------------------------------------------------------------
# filter json data with jq
# param string json data
# param string jq filter
function _filterJson(){
echo "$1" | jq -r "$2"
}
# filter json data with jq (by expecting a single result) and remove quotes
# param string json data
# param string jq filter
function _getString(){
_filterJson "$1" "$2" | sed "s#^null\$##g"
}
# if DOCKER_HOST is not set we try to detect the user running "containerd"
# create an env var DOCKER_HOST="unix:///run/user/<ID>/docker.sock"
function _detectDockerenv(){
local dockeruid=
if [ -z "$DOCKER_HOST" ]; then
_is_docker_detected=1
dockeruid=$( ps -ef | grep containerd | grep -Eo "/run/user/([0-9]*)/" | head -1 | cut -f 4 -d '/' )
test -n "$dockeruid" && export DOCKER_HOST="unix:///run/user/$dockeruid/docker.sock"
# Don't abort - it is allowed that the variable DOCKER_HOST is missing
fi
if grep "/run/user/[0-9]*" <<< "$DOCKER_HOST" >/dev/null; then
_is_docker_rootless=1
fi
}
# show some debug infos to be shown if needed.
function _debugInfos(){
echo
echo "DEBUG INFOS:"
echo "DOCKER_HOST = $DOCKER_HOST"
test "$_is_docker_detected" -eq 0 && echo "It was set in the environment."
test "$_is_docker_detected" -eq 1 && echo "It was detected from process list."
echo
}
# detect error after dicker command. It stops if
# - no content was fetched
# - content contains key "ServerErrors"
function _detectDockererror(){
local data="$1"
if [ -z "$data" ] ; then
ph.setStatus unknown
ph.status "No data. Unable to fetch Docker information."
ph.exit
fi
if grep '"ServerErrors"' <<<"$data" >/dev/null; then
ph.setStatus unknown
ph.status "Unable to connect to Docker:"
_filterJson "$data" ".ServerErrors" | grep "^ "
ph.exit
fi
}
# ----------------------------------------------------------------------