Third Commit

This commit is contained in:
Andrew Hurley 2023-02-26 23:12:34 +08:00
parent e58c78bae3
commit 3ef215a4e1
1 changed files with 134 additions and 57 deletions

119
podmanctl
View File

@ -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 " For run|create:\n"
printf " -e <additional_environment_vars>\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,14 +78,7 @@ 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} \
@ -100,12 +96,9 @@ 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"
fi
# --------------------------------------------------------- spec vars # --------------------------------------------------------- spec vars
SPEC_IP="--ip ${SUBNET_PREFIX}" SPEC_IP="--ip ${SUBNET_PREFIX}"
@ -129,24 +122,108 @@ for PROJECT in $*; do
SPEC_PUBLISH="" SPEC_PUBLISH=""
SPEC_ALIAS="--network-alias " SPEC_ALIAS="--network-alias "
# --------------------------------------------------------- spec var runtime
if [[ $COMMAND = "run" ]]; then
SPEC_RUN="${RUNTIME} run -d"
else
SPEC_RUN="${RUNTIME} create"
fi
# --------------------------------------------------------- remove pod
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
# --------------------------------------------------------- create pod # --------------------------------------------------------- create pod
podman pod create --replace \ podman pod create \
${SPEC_NAME}-pod \ ${SPEC_NAME}-pod \
${SPEC_INFRA_NAME} ${SPEC_INFRA_NAME}
# --------------------------------------------------------- run containers # --------------------------------------------------------- create|run containers
source ${PROJECT} source ${PROJECT}
# --------------------------------------------------------- services create and start # --------------------------------------------------------- create services
(cd /etc/systemd/system && \ (cd /etc/systemd/system && \
podman generate systemd \ podman generate systemd \
--name \ --name \
--new \
--stop-timeout=70 \ --stop-timeout=70 \
--pod-prefix=podman \ --pod-prefix=podman \
--restart-sec=5 \ --restart-sec=10 \
--container-prefix=podman \ --container-prefix=podman \
--files ${PODNAME} \ --files ${PODNAME} \
) && systemctl daemon-reload \ ) && systemctl daemon-reload \
&& systemctl enable podman-${PODNAME} && 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"
;;
(clean)
# --------------------------------------------------------- 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"
;;
(backup)
echo " ${COMMAND} ${PROJECT} - not implemented\n"; continue
;;
(restore)
echo " ${COMMAND} ${PROJECT} - not implemented\n"; continue
;;
esac
done done