#!/sbin/openrc-run # credits: # https://gist.github.com/itzwam/2069e935385193207f7e5bea7156e21d # https://github.com/0x17de/dockerservice-openrc : ${MODULENAME:=${RC_SVCNAME##*.}} : ${SRCDIR:=/usr/local/lib/joeac.net} DOCKER_COMPOSE_UP_ARGS=${DOCKER_COMPOSE_UP_ARGS-"--no-build --no-recreate --no-deps"} [ -z "${MODULENAME}" ] && exit 1 : ${COMPOSEFILE:="${SRCDIR}/compose.yml"} : ${MAKEFILE:="${SRCDIR}/Makefile"} COMPOSECMD="/usr/bin/podman-compose" export COMPOSE_HTTP_TIMEOUT=300 description="Manage dockerservices defined in ${COMPOSEFILE}" extra_commands="configtest" description_configtest="Check configuration via \"podman-compose -f ${COMPOSEFILE} config\"" configtest() { if ! [ -f "${COMPOSEFILE}" ]; then eerror "The docker-compose file ${COMPOSEFILE} does not exist!" return 1 fi if "${COMPOSECMD}" -f "${COMPOSEFILE}" config >&/dev/null; then einfo "config: ok" else eerror "config: error" return 1 fi } start() { configtest || return 1 ebegin "Starting ${MODULENAME}" "${COMPOSECMD}" -f "${COMPOSEFILE}" up -d ${DOCKER_COMPOSE_UP_ARGS} ${MODULENAME} eend $? } stop() { ebegin "Stopping ${MODULENAME}" "${COMPOSECMD}" -f "${COMPOSEFILE}" down --timeout=5 ${MODULENAME} eend $? } status() { pods=0 started=0 while read pod; do pod_service="$(podman inspect $pod | jq .[0].Config.Labels.[\"com.docker.compose.service\"])" if ! [ "$pod_service" = "\"${MODULENAME}\"" ]; then continue fi pods=$(($pods+1)) if podman top $pod &>/dev/null; then einfo "status: [$pod] started" exit 0 else einfo "status: [$pod] stopped" exit 3 fi done < <("${COMPOSECMD}" -f "${COMPOSEFILE}" ps --quiet) einfo "status: no container found for ${MODULENAME}" exit 3 }