From c886a07362dc834455e650fce408cf70e922deb3 Mon Sep 17 00:00:00 2001 From: Andrew Hurley Date: Thu, 2 Mar 2023 15:50:41 +0800 Subject: [PATCH] Seventh Commit --- podmanctl | 92 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 81 insertions(+), 11 deletions(-) diff --git a/podmanctl b/podmanctl index 976f5f1..b9677c7 100755 --- a/podmanctl +++ b/podmanctl @@ -19,7 +19,7 @@ usage () { } # --------------------------------------------------------- command -COMMANDS="create|run|stop|start|restart|clean|backup|restore" +COMMANDS="ps|create|run|stop|start|restart|clean|backup|restore" if [[ $# -lt 1 ]]; then printf "Arguments missing\n" usage @@ -37,6 +37,7 @@ fi # ADD PULL OPTION ARGS_ENV="" PULL="" +DOWN="false" while getopts ':pe:' OPT; do case $OPT in e) @@ -55,6 +56,15 @@ while getopts ':pe:' OPT; do exit 1 fi ;; + d) + if [[ "${COMMAND}" =~ ^(backup)$ ]]; then + DOWN="true" + else + printf "option 'd' does not apply to command '${COMMAND}'\n" + exit 1 + fi + ;; + \?) usage exit 1 @@ -137,6 +147,68 @@ clean-pod () { remove-services } +# sub ----------------------------------------------------- backup volumes +backup-volumes () { + VOLUMES="$(podman volume ls --filter="name=${PROJECT}-" -q |grep -v ".backup")" + if [[ -z $VOLUMES ]]; then + printf ":: ${COMMAND} ${PROJECT} - no volumes found to backup\n" + return + fi + for VOL in $VOLUMES; do + SOURCE="${VOL}" + TARGET="${VOL}.backup" + TARGET_VOLUME="$(docker volume ls -q --filter name="^${TARGET}$")" + if [[ -z $TARGET_VOLUME ]]; then + if docker volume create "${TARGET}"; then + printf ":: ${COMMAND} ${PROJECT} - target volume '${TARGET}' created.\n" + else + printf ":: ${COMMAND} ${PROJECT} - target volume ${TARGET} could not be created.\n" + return 1 + fi + fi + printf ":: ${COMMAND} ${PROJECT} - backup of source: ${SOURCE} to target ${TARGET} commencing\n" + if "${RUNTIME}" run --rm \ + --env "SOURCE_DIR=/source" \ + --env "TARGET_DIR=/target" \ + --volume "${SOURCE}:/source:ro" \ + --volume "${TARGET}:/target" \ + cor.cherished.me/system/helper-rsync; then + printf ":: ${COMMAND} ${PROJECT} - backup successful.\n" + else + printf ":: ${COMMAND} ${PROJECT} - backup error.\n"; return 2 + fi + done +} + +# --------------------------------------------------------- save backup volumes +save-backups () { + echo "doit" +} + +# --------------------------------------------------------- save images +save-images () { + echo "doit" +} + + + + + +# --------------------------------------------------------- main +# --------------------------------------------------------- starts +# --------------------------------------------------------- here +RUNTIME="podman" +ROOTDIR="$(realpath /root)" +REGADDR="cor.cherished.me/cherished.me" +SYSTEMD="/etc/systemd/system" + +# --------------------------------------------------------- rsync build +podman build \ + -t cor.cherished.me/system/helper-rsync \ + - < "proxy-subnet" case $COMMAND in + + (ps) + # --------------------------------------------------------- ps + ${RUNTIME} ps -a --watch=1 --filter "pod=${PODNAME}" --format '{{.Names}}\t\t{{.Image}}\t\t{{.ExitCode}}\t\t{{.Status}}' (create|run) @@ -274,10 +346,10 @@ for PROJECT in $*; do (backup) - if stop-pod; then - - # start backup here ,,, - + if stop-pod && backup-volumes; then + if [[ $DOWN == "false" ]]; then + start-pod + fi printf ":: ${COMMAND} ${PROJECT} - success\n" else printf ":: ${COMMAND} ${PROJECT} - failure\n" @@ -291,6 +363,4 @@ for PROJECT in $*; do esac - ${RUNTIME} ps -a --filter "pod=${PODNAME}" --format '{{.Names}}\t\t{{.Image}}\t\t{{.ExitCode}}\t\t{{.Status}}' - done