Second Commit
This commit is contained in:
parent
e5b04002a1
commit
e58c78bae3
203
podmanctl
203
podmanctl
|
|
@ -6,20 +6,28 @@ set -u
|
|||
set -e
|
||||
|
||||
# --------------------------------------------------------- usage
|
||||
COMMANDS="restore|backup|create|run|stop|remove|clean|start"
|
||||
usage () {
|
||||
printf "Usage: podmanctl [${COMMANDS}] [<options>] <project> [<project>...]\n"
|
||||
printf "Usage:\n"
|
||||
printf " podmanctl [<options>] <project> [<project>...]\n"
|
||||
printf " - command is assumed to be 'run'\n"
|
||||
printf " podmanctl [${COMMANDS}] [<options>] <project> [<project>...]\n"
|
||||
printf " Options:\n"
|
||||
printf " -e <additional_environment_vars>\n"
|
||||
}
|
||||
|
||||
# --------------------------------------------------------- command
|
||||
COMMANDS="restore|backup|create|run|stop|remove|clean|start"
|
||||
if [[ $# -lt 1 ]]; then
|
||||
printf "Arguments missing\n"
|
||||
usage
|
||||
exit 2
|
||||
fi
|
||||
|
||||
if [[ "$1" =~ ^(${COMMANDS})$ ]]; then
|
||||
COMMAND="${1}"
|
||||
shift
|
||||
else
|
||||
COMMAND="project"
|
||||
COMMAND="run"
|
||||
fi
|
||||
|
||||
# --------------------------------------------------------- args
|
||||
|
|
@ -38,104 +46,107 @@ if [[ $# -lt 1 ]]; then
|
|||
usage
|
||||
exit 2
|
||||
fi
|
||||
|
||||
# --------------------------------------------------------- project loop
|
||||
for PROJECT in $*; do
|
||||
echo $PROJECT
|
||||
|
||||
if [[ ! -r ${PROJECT} ]]; then
|
||||
printf "Project spec file '${PROJECT}' missing or not readable. Skipping\n"
|
||||
continue
|
||||
fi
|
||||
|
||||
exit
|
||||
|
||||
# --------------------------------------------------------- project vars
|
||||
RUNTIME="podman"
|
||||
ROOTDIR="$(realpath /root)"
|
||||
NETWORK="${PROJECT}-net"
|
||||
ENVFILE="${ROOTDIR}/${PROJECT}-env.conf"
|
||||
PODNAME="${PROJECT}-pod"
|
||||
REGADDR="cor.cherished.me/cherished.me"
|
||||
|
||||
# project check
|
||||
if [[ ! -r $ENVFILE ]] then
|
||||
printf "Environment file ${ENVFILE} not found or readable.\n"
|
||||
usage
|
||||
exit 2;
|
||||
fi
|
||||
if [[ ! "$(stat -L -c "%A" "${ROOTDIR}" |cut -c8-10 )" = "---" ]] then
|
||||
printf "Error: ${ROOTDIR} is world readable\n"
|
||||
usage
|
||||
exit 3;
|
||||
fi
|
||||
|
||||
# --------------------------------------------------------- stop pod service
|
||||
systemctl list-units --full -all \
|
||||
|grep -Fq "podman-${PODNAME}.service" \
|
||||
&& systemctl stop podman-${PODNAME}.service
|
||||
|
||||
# --------------------------------------------------------- network
|
||||
podman network exists ${NETWORK} \
|
||||
|| podman network create ${NETWORK}
|
||||
SUBNET="$(podman network inspect ${NETWORK} \
|
||||
|grep -w "\"subnet\":" |sed 's/[\":,a-z,A-Z ]//g')"
|
||||
SUBNET_PREFIX="${SUBNET%\.0/24}"
|
||||
#printf "${SUBNET_PREFIX}" > "${PROJECT}-subnet"
|
||||
|
||||
# --------------------------------------------------------- proxy network
|
||||
podman network exists proxy-net \
|
||||
|| podman network create proxy-net
|
||||
PROXY_SUBNET="$(podman network inspect proxy-net \
|
||||
|grep -w "\"subnet\":" |sed 's/[\":,a-z,A-Z ]//g')"
|
||||
PROXY_SUBNET_PREFIX="${PROXY_SUBNET%\.0/24}"
|
||||
#printf "${PROXY_SUBNET_PREFIX}" > "proxy-subnet"
|
||||
|
||||
# --------------------------------------------------------- spec var runtime
|
||||
if [[ $COMMAND = "run" ]]; then
|
||||
SPEC_RUN="${RUNTIME} run -d"
|
||||
else
|
||||
SPEC_RUN="${RUNTIME} create"
|
||||
fi
|
||||
|
||||
# --------------------------------------------------------- spec vars
|
||||
SPEC_IP="--ip ${SUBNET_PREFIX}"
|
||||
SPEC_POD="--pod ${PODNAME}"
|
||||
SPEC_DNS="--dns ${SUBNET_PREFIX}.254"
|
||||
SPEC_ENV="--env-file ${ENVFILE}"
|
||||
SPEC_ENV="${SPEC_ENV} --env SUBNET=${SUBNET}"
|
||||
SPEC_ENV="${SPEC_ENV} ${ARGS_ENV}"
|
||||
SPEC_NAME="--name ${PROJECT}"
|
||||
SPEC_INFRA_NAME="--infra-name ${PROJECT}-infra"
|
||||
SPEC_IMAGE="${REGADDR}/${PROJECT}"
|
||||
SPEC_CONFIG="--volume ${ROOTDIR}"
|
||||
SPEC_SUBNET="--subnet ${SUBNET}"
|
||||
SPEC_LABELS="--label io.containers.autoupdate=registry"
|
||||
SPEC_VOLUME="--volume ${PROJECT}"
|
||||
SPEC_NETWORK="--network ${NETWORK}"
|
||||
SPEC_NETWORK_PREFIX="${SPEC_NETWORK}:ip=${SUBNET_PREFIX}"
|
||||
SPEC_PROXY_NET="--network proxy-net"
|
||||
SPEC_PROXY_NET_PREFIX="${SPEC_PROXY_NET}:ip=${PROXY_SUBNET_PREFIX}"
|
||||
SPEC_HOSTS=""
|
||||
SPEC_PUBLISH=""
|
||||
SPEC_ALIAS="--network-alias "
|
||||
|
||||
# --------------------------------------------------------- create pod
|
||||
podman pod create --replace \
|
||||
${SPEC_NAME}-pod \
|
||||
${SPEC_INFRA_NAME}
|
||||
|
||||
# --------------------------------------------------------- run containers
|
||||
source ${PROJECT}
|
||||
|
||||
# --------------------------------------------------------- services create and start
|
||||
(cd /etc/systemd/system && \
|
||||
podman generate systemd \
|
||||
--name \
|
||||
--stop-timeout=70 \
|
||||
--pod-prefix=podman \
|
||||
--restart-sec=5 \
|
||||
--container-prefix=podman \
|
||||
--files ${PODNAME} \
|
||||
) && systemctl daemon-reload \
|
||||
&& systemctl enable podman-${PODNAME}
|
||||
|
||||
# --------------------------------------------------------- project vars
|
||||
RUNTIME="podman"
|
||||
ROOTDIR="$(realpath /root)"
|
||||
NETWORK="${PROJECT}-net"
|
||||
ENVFILE="${ROOTDIR}/${PROJECT}-env.conf"
|
||||
PODNAME="${PROJECT}-pod"
|
||||
REGADDR="cor.cherished.me/cherished.me"
|
||||
|
||||
# project check
|
||||
if [[ ! -r $ENVFILE ]] then
|
||||
printf "Environment file ${ENVFILE} not found or readable.\n"
|
||||
usage
|
||||
exit 2;
|
||||
fi
|
||||
if [[ ! "$(stat -L -c "%A" "${ROOTDIR}" |cut -c8-10 )" = "---" ]] then
|
||||
printf "Error: ${ROOTDIR} is world readable\n"
|
||||
usage
|
||||
exit 3;
|
||||
fi
|
||||
|
||||
printf -- \
|
||||
"--------------------------------------------------------- \
|
||||
${PROJECT} ${COMMAND}\n"
|
||||
|
||||
# --------------------------------------------------------- stop pod service
|
||||
systemctl list-units --full -all \
|
||||
|grep -Fq "podman-${PODNAME}.service" \
|
||||
&& systemctl stop podman-${PODNAME}.service
|
||||
|
||||
# --------------------------------------------------------- network
|
||||
podman network exists ${NETWORK} \
|
||||
|| podman network create ${NETWORK}
|
||||
SUBNET="$(podman network inspect ${NETWORK} \
|
||||
|grep -w "\"subnet\":" |sed 's/[\":,a-z,A-Z ]//g')"
|
||||
SUBNET_PREFIX="${SUBNET%\.0/24}"
|
||||
#printf "${SUBNET_PREFIX}" > "${PROJECT}-subnet"
|
||||
|
||||
# --------------------------------------------------------- proxy network
|
||||
podman network exists proxy-net \
|
||||
|| podman network create proxy-net
|
||||
PROXY_SUBNET="$(podman network inspect proxy-net \
|
||||
|grep -w "\"subnet\":" |sed 's/[\":,a-z,A-Z ]//g')"
|
||||
PROXY_SUBNET_PREFIX="${PROXY_SUBNET%\.0/24}"
|
||||
#printf "${PROXY_SUBNET_PREFIX}" > "proxy-subnet"
|
||||
|
||||
# --------------------------------------------------------- spec var runtime
|
||||
if [[ $COMMAND = "run" ]]; then
|
||||
SPEC_RUN="${RUNTIME} run -d"
|
||||
else
|
||||
SPEC_RUN="${RUNTIME} create"
|
||||
fi
|
||||
|
||||
# --------------------------------------------------------- spec vars
|
||||
SPEC_IP="--ip ${SUBNET_PREFIX}"
|
||||
SPEC_POD="--pod ${PODNAME}"
|
||||
SPEC_DNS="--dns ${SUBNET_PREFIX}.254"
|
||||
SPEC_ENV="--env-file ${ENVFILE}"
|
||||
SPEC_ENV="${SPEC_ENV} --env SUBNET=${SUBNET}"
|
||||
SPEC_ENV="${SPEC_ENV} ${ARGS_ENV}"
|
||||
SPEC_NAME="--name ${PROJECT}"
|
||||
SPEC_INFRA_NAME="--infra-name ${PROJECT}-infra"
|
||||
SPEC_IMAGE="${REGADDR}/${PROJECT}"
|
||||
SPEC_CONFIG="--volume ${ROOTDIR}"
|
||||
SPEC_SUBNET="--subnet ${SUBNET}"
|
||||
SPEC_LABELS="--label io.containers.autoupdate=registry"
|
||||
SPEC_VOLUME="--volume ${PROJECT}"
|
||||
SPEC_NETWORK="--network ${NETWORK}"
|
||||
SPEC_NETWORK_PREFIX="${SPEC_NETWORK}:ip=${SUBNET_PREFIX}"
|
||||
SPEC_PROXY_NET="--network proxy-net"
|
||||
SPEC_PROXY_NET_PREFIX="${SPEC_PROXY_NET}:ip=${PROXY_SUBNET_PREFIX}"
|
||||
SPEC_HOSTS=""
|
||||
SPEC_PUBLISH=""
|
||||
SPEC_ALIAS="--network-alias "
|
||||
|
||||
# --------------------------------------------------------- create pod
|
||||
podman pod create --replace \
|
||||
${SPEC_NAME}-pod \
|
||||
${SPEC_INFRA_NAME}
|
||||
|
||||
# --------------------------------------------------------- run containers
|
||||
source ${PROJECT}
|
||||
|
||||
# --------------------------------------------------------- services create and start
|
||||
(cd /etc/systemd/system && \
|
||||
podman generate systemd \
|
||||
--name \
|
||||
--stop-timeout=70 \
|
||||
--pod-prefix=podman \
|
||||
--restart-sec=5 \
|
||||
--container-prefix=podman \
|
||||
--files ${PODNAME} \
|
||||
) && systemctl daemon-reload \
|
||||
&& systemctl enable podman-${PODNAME}
|
||||
|
||||
done
|
||||
|
|
|
|||
Loading…
Reference in New Issue