Third Commit
This commit is contained in:
parent
e58c78bae3
commit
3ef215a4e1
191
podmanctl
191
podmanctl
|
|
@ -6,17 +6,20 @@ set -u
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# --------------------------------------------------------- usage
|
# --------------------------------------------------------- usage
|
||||||
COMMANDS="restore|backup|create|run|stop|remove|clean|start"
|
|
||||||
usage () {
|
usage () {
|
||||||
printf "Usage:\n"
|
printf "Usage:\n"
|
||||||
printf " podmanctl [<options>] <project> [<project>...]\n"
|
printf " podmanctl [<options>] <project> [<project>...]\n"
|
||||||
printf " - command is assumed to be 'run'\n"
|
printf " - command is assumed to be 'run'\n"
|
||||||
printf " podmanctl [${COMMANDS}] [<options>] <project> [<project>...]\n"
|
printf " podmanctl [${COMMANDS}] [<options>] <project> [<project>...]\n"
|
||||||
printf " Options:\n"
|
printf " Options:\n"
|
||||||
printf " -e <additional_environment_vars>\n"
|
printf " For run|create:\n"
|
||||||
|
printf " -e <additional_environment_vars>\n"
|
||||||
|
printf " For backup:\n"
|
||||||
|
printf " -d (keep containers down)\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
# --------------------------------------------------------- command
|
# --------------------------------------------------------- command
|
||||||
|
COMMANDS="create|run|stop|start|clean|backup|restore"
|
||||||
if [[ $# -lt 1 ]]; then
|
if [[ $# -lt 1 ]]; then
|
||||||
printf "Arguments missing\n"
|
printf "Arguments missing\n"
|
||||||
usage
|
usage
|
||||||
|
|
@ -51,8 +54,8 @@ fi
|
||||||
for PROJECT in $*; do
|
for PROJECT in $*; do
|
||||||
|
|
||||||
if [[ ! -r ${PROJECT} ]]; then
|
if [[ ! -r ${PROJECT} ]]; then
|
||||||
printf "Project spec file '${PROJECT}' missing or not readable. Skipping\n"
|
printf "Project spec file '${PROJECT}' missing or not readable\n"
|
||||||
continue
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# --------------------------------------------------------- project vars
|
# --------------------------------------------------------- project vars
|
||||||
|
|
@ -75,15 +78,8 @@ for PROJECT in $*; do
|
||||||
exit 3;
|
exit 3;
|
||||||
fi
|
fi
|
||||||
|
|
||||||
printf -- \
|
printf ":: ${COMMAND} ${PROJECT}\n"
|
||||||
"--------------------------------------------------------- \
|
|
||||||
${PROJECT} ${COMMAND}\n"
|
|
||||||
|
|
||||||
# --------------------------------------------------------- stop pod service
|
|
||||||
systemctl list-units --full -all \
|
|
||||||
|grep -Fq "podman-${PODNAME}.service" \
|
|
||||||
&& systemctl stop podman-${PODNAME}.service
|
|
||||||
|
|
||||||
# --------------------------------------------------------- network
|
# --------------------------------------------------------- network
|
||||||
podman network exists ${NETWORK} \
|
podman network exists ${NETWORK} \
|
||||||
|| podman network create ${NETWORK}
|
|| podman network create ${NETWORK}
|
||||||
|
|
@ -100,53 +96,134 @@ for PROJECT in $*; do
|
||||||
PROXY_SUBNET_PREFIX="${PROXY_SUBNET%\.0/24}"
|
PROXY_SUBNET_PREFIX="${PROXY_SUBNET%\.0/24}"
|
||||||
#printf "${PROXY_SUBNET_PREFIX}" > "proxy-subnet"
|
#printf "${PROXY_SUBNET_PREFIX}" > "proxy-subnet"
|
||||||
|
|
||||||
# --------------------------------------------------------- spec var runtime
|
case $COMMAND in
|
||||||
if [[ $COMMAND = "run" ]]; then
|
|
||||||
SPEC_RUN="${RUNTIME} run -d"
|
(create|run)
|
||||||
else
|
|
||||||
SPEC_RUN="${RUNTIME} create"
|
# --------------------------------------------------------- spec vars
|
||||||
fi
|
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 "
|
||||||
|
|
||||||
# --------------------------------------------------------- spec vars
|
# --------------------------------------------------------- spec var runtime
|
||||||
SPEC_IP="--ip ${SUBNET_PREFIX}"
|
if [[ $COMMAND = "run" ]]; then
|
||||||
SPEC_POD="--pod ${PODNAME}"
|
SPEC_RUN="${RUNTIME} run -d"
|
||||||
SPEC_DNS="--dns ${SUBNET_PREFIX}.254"
|
else
|
||||||
SPEC_ENV="--env-file ${ENVFILE}"
|
SPEC_RUN="${RUNTIME} create"
|
||||||
SPEC_ENV="${SPEC_ENV} --env SUBNET=${SUBNET}"
|
fi
|
||||||
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
|
# --------------------------------------------------------- remove pod
|
||||||
podman pod create --replace \
|
if [[ "$(systemctl is-active podman-${PODNAME}.service)" == "active" ]]; then
|
||||||
${SPEC_NAME}-pod \
|
if systemctl list-units --full -all \
|
||||||
${SPEC_INFRA_NAME}
|
|grep -Fq "podman-${PODNAME}.service" then
|
||||||
|
systemctl stop podman-${PODNAME}.service
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if podman pod exists "${PODNAME}"; then
|
||||||
|
podman pod rm -f -t 70 "${PODNAME}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --------------------------------------------------------- create pod
|
||||||
|
podman pod create \
|
||||||
|
${SPEC_NAME}-pod \
|
||||||
|
${SPEC_INFRA_NAME}
|
||||||
|
|
||||||
|
# --------------------------------------------------------- create|run containers
|
||||||
|
source ${PROJECT}
|
||||||
|
|
||||||
|
# --------------------------------------------------------- create services
|
||||||
|
(cd /etc/systemd/system && \
|
||||||
|
podman generate systemd \
|
||||||
|
--name \
|
||||||
|
--new \
|
||||||
|
--stop-timeout=70 \
|
||||||
|
--pod-prefix=podman \
|
||||||
|
--restart-sec=10 \
|
||||||
|
--container-prefix=podman \
|
||||||
|
--files ${PODNAME} \
|
||||||
|
) && systemctl daemon-reload \
|
||||||
|
&& systemctl enable podman-${PODNAME}
|
||||||
|
|
||||||
|
printf " ${COMMAND} ${PROJECT} - success\n"
|
||||||
|
;;
|
||||||
|
|
||||||
|
(stop|start)
|
||||||
|
|
||||||
|
# --------------------------------------------------------- start pod service
|
||||||
|
if [[ "$(systemctl is-active podman-${PODNAME}.service)" == "active" ]]; then
|
||||||
|
if systemctl list-units --full -all \
|
||||||
|
|grep -Fq "podman-${PODNAME}.service"; then
|
||||||
|
systemctl "${COMMAND}" podman-${PODNAME}.service
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if podman pod exists "${PODNAME}"; then
|
||||||
|
if [[ $COMMAND = "stop" ]]; then
|
||||||
|
podman pod stop -t 70 "${PODNAME}"
|
||||||
|
else
|
||||||
|
podman pod start "${PODNAME}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
printf " ${COMMAND} ${PROJECT} - pod not found!\n"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf " ${COMMAND} ${PROJECT} - success\n"
|
||||||
|
;;
|
||||||
|
|
||||||
# --------------------------------------------------------- run containers
|
(clean)
|
||||||
source ${PROJECT}
|
|
||||||
|
# --------------------------------------------------------- clean
|
||||||
|
if [[ "$(systemctl is-active podman-${PODNAME}.service)" == "active" ]]; then
|
||||||
|
if systemctl list-units --full -all \
|
||||||
|
|grep -Fq "podman-${PODNAME}.service"; then
|
||||||
|
systemctl stop podman-${PODNAME}.service
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if podman pod exists "${PODNAME}"; then
|
||||||
|
podman pod rm -f -t 70 "${PODNAME}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ -f /etc/systemd/system/podman-${PODNAME}.service ]]; then
|
||||||
|
systemctl disable podman-${PODNAME}.service
|
||||||
|
fi
|
||||||
|
find /etc/systemd/system \
|
||||||
|
-maxdepth 1 \
|
||||||
|
-name "podman-${PROJECT}-*.service" \
|
||||||
|
-exec rm {} +
|
||||||
|
systemctl daemon-reload
|
||||||
|
|
||||||
|
printf " ${COMMAND} ${PROJECT} - success\n"
|
||||||
|
;;
|
||||||
|
|
||||||
# --------------------------------------------------------- services create and start
|
(backup)
|
||||||
(cd /etc/systemd/system && \
|
|
||||||
podman generate systemd \
|
echo " ${COMMAND} ${PROJECT} - not implemented\n"; continue
|
||||||
--name \
|
;;
|
||||||
--stop-timeout=70 \
|
|
||||||
--pod-prefix=podman \
|
(restore)
|
||||||
--restart-sec=5 \
|
|
||||||
--container-prefix=podman \
|
echo " ${COMMAND} ${PROJECT} - not implemented\n"; continue
|
||||||
--files ${PODNAME} \
|
;;
|
||||||
) && systemctl daemon-reload \
|
|
||||||
&& systemctl enable podman-${PODNAME}
|
esac
|
||||||
|
|
||||||
done
|
done
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue