mirror of
https://github.com/m8tin/cis.git
synced 2026-08-01 11:47:31 +02:00
script snapshot was revised using the functionality of module print and composition
This commit is contained in:
+47
-70
@@ -1,31 +1,22 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
source /cis/core/base.module.sh
|
source /cis/core/base.module.sh
|
||||||
|
base.loadModule composition
|
||||||
|
base.loadModule print
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function cleanup() {
|
function cleanup() {
|
||||||
local _MIN_MIN _HOUR_MIN _DAY_MIN _MONTH_MIN
|
local _KEEP_MINUTELY _KEEP_HOURLY _KEEP_DAILY _KEEP_MONTHLY
|
||||||
_MINUTELY_MIN=5
|
_KEEP_MINUTELY=5
|
||||||
_HOURLY_MIN=24
|
_KEEP_HOURLY=24
|
||||||
_DAILY_MIN=7
|
_KEEP_DAILY=7
|
||||||
_MONTHLY_MIN=36
|
_KEEP_MONTHLY=36
|
||||||
readonly _MIN_MIN _HOUR_MIN _DAY_MIN _MONTH_MIN
|
readonly _KEEP_MINUTELY _KEEP_HOURLY _KEEP_DAILY _KEEP_MONTHLY
|
||||||
|
|
||||||
local _COMPOSITION _CURRENT_HOST _ZFS_BRANCH _ZFS
|
local _COMPOSITION _ZFS
|
||||||
ls -d "${CIS[COMPOSITIONS]:?"Missing CIS_COMPOSITIONS"}"*/ | while read -r _COMPOSITION
|
composition.printAll | while read -r _COMPOSITION; do
|
||||||
do
|
|
||||||
_COMPOSITION="${_COMPOSITION%/}" #Remove tailing '/' if exists
|
|
||||||
_COMPOSITION="${_COMPOSITION##*/}" #Remove leading parts
|
|
||||||
_CURRENT_HOST="$(cat "${CIS[COMPOSITIONS]}${_COMPOSITION}/current-host" 2> /dev/null)"
|
|
||||||
_ZFS_BRANCH="$(cat "${CIS[COMPOSITIONS]}${_COMPOSITION}/zfs-branch" 2> /dev/null)"
|
|
||||||
_ZFS_BRANCH="${_ZFS_BRANCH%/}" #Remove tailing '/' if exists
|
|
||||||
|
|
||||||
if [ "${_CURRENT_HOST}" == "${CIS[HOST]:?"Missing CIS_HOST"}" ]; then
|
|
||||||
_ZFS="$(zfs list -H -o name "${_ZFS_BRANCH:-"zpool1/persistent"}/${_COMPOSITION}" 2> /dev/null)"
|
|
||||||
else
|
|
||||||
_ZFS="$(zfs list -H -o name "${_ZFS_BRANCH:-"zpool1/persistent"}/${_COMPOSITION}-BACKUP" 2> /dev/null)"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
_ZFS="$(composition.printZFS "${_COMPOSITION}")"
|
||||||
[ -n "${_ZFS}" ] \
|
[ -n "${_ZFS}" ] \
|
||||||
&& printf -- "Cleaning snapshots of: '%b'\n" "${_ZFS}" \
|
&& printf -- "Cleaning snapshots of: '%b'\n" "${_ZFS}" \
|
||||||
&& local _LIST=( $(zfs list -t snap -H -o name -S creation "${_ZFS}" | grep -F '@SNAP' ) )
|
&& local _LIST=( $(zfs list -t snap -H -o name -S creation "${_ZFS}" | grep -F '@SNAP' ) )
|
||||||
@@ -42,38 +33,38 @@ function cleanup() {
|
|||||||
case "${_SNAPSHOT}" in
|
case "${_SNAPSHOT}" in
|
||||||
*"@SNAPMINUTELY_"*)
|
*"@SNAPMINUTELY_"*)
|
||||||
((_COUNT_MINUTELY++))
|
((_COUNT_MINUTELY++))
|
||||||
if [ ${_COUNT_MINUTELY} -gt ${_MINUTELY_MIN} ]; then
|
if [ ${_COUNT_MINUTELY} -gt ${_KEEP_MINUTELY} ]; then
|
||||||
printf -- " - remove snapshot (%s): '@%s' ... " "${_COUNT_MINUTELY}" "${_SNAPSHOT#*@}" >&2
|
print.message " - remove snapshot (${_COUNT_MINUTELY}): '@${_SNAPSHOT#*@}' ... "
|
||||||
zfs destroy "${_SNAPSHOT}" \
|
zfs destroy "${_SNAPSHOT}" \
|
||||||
&& printf -- '(done)\n' \
|
&& print.done \
|
||||||
|| printf -- '(FAIL)\n'
|
|| print.fail
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*"@SNAPHOURLY_"*)
|
*"@SNAPHOURLY_"*)
|
||||||
((_COUNT_HOURLY++))
|
((_COUNT_HOURLY++))
|
||||||
if [ ${_COUNT_HOURLY} -gt ${_HOURLY_MIN} ]; then
|
if [ ${_COUNT_HOURLY} -gt ${_KEEP_HOURLY} ]; then
|
||||||
printf -- " - remove snapshot (%s): '@%s' ... " "${_COUNT_HOURLY}" "${_SNAPSHOT#*@}" >&2
|
print.message " - remove snapshot (${_COUNT_HOURLY}): '@${_SNAPSHOT#*@}' ... "
|
||||||
zfs destroy "${_SNAPSHOT}" \
|
zfs destroy "${_SNAPSHOT}" \
|
||||||
&& printf -- '(done)\n' \
|
&& print.done \
|
||||||
|| printf -- '(FAIL)\n'
|
|| print.fail
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*"@SNAPDAILY_"*)
|
*"@SNAPDAILY_"*)
|
||||||
((_COUNT_DAILY++))
|
((_COUNT_DAILY++))
|
||||||
if [ ${_COUNT_DAILY} -gt ${_DAILY_MIN} ]; then
|
if [ ${_COUNT_DAILY} -gt ${_KEEP_DAILY} ]; then
|
||||||
printf -- " - remove snapshot (%s): '@%s' ... " "${_COUNT_DAILY}" "${_SNAPSHOT#*@}" >&2
|
print.message " - remove snapshot (${_COUNT_DAILY}): '@${_SNAPSHOT#*@}' ... "
|
||||||
zfs destroy "${_SNAPSHOT}" \
|
zfs destroy "${_SNAPSHOT}" \
|
||||||
&& printf -- '(done)\n' \
|
&& print.done \
|
||||||
|| printf -- '(FAIL)\n'
|
|| print.fail
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*"@SNAPMONTHLY_"*)
|
*"@SNAPMONTHLY_"*)
|
||||||
((_COUNT_MONTHLY++))
|
((_COUNT_MONTHLY++))
|
||||||
if [ ${_COUNT_MONTHLY} -gt ${_MONTHLY_MIN} ]; then
|
if [ ${_COUNT_MONTHLY} -gt ${_KEEP_MONTHLY} ]; then
|
||||||
printf -- " - remove snapshot ($s): '@%s' ... " "${_COUNT_MONTHLY}" "${_SNAPSHOT#*@}" >&2
|
print.message " - remove snapshot (${_COUNT_MONTHLY}): '@${_SNAPSHOT#*@}' ... "
|
||||||
zfs destroy "${_SNAPSHOT}" \
|
zfs destroy "${_SNAPSHOT}" \
|
||||||
&& printf -- '(done)\n' \
|
&& print.done \
|
||||||
|| printf -- '(FAIL)\n'
|
|| print.fail
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -91,45 +82,31 @@ function snapshot() {
|
|||||||
|
|
||||||
[ ! -d /tmp/locks ] && mkdir /tmp/locks
|
[ ! -d /tmp/locks ] && mkdir /tmp/locks
|
||||||
|
|
||||||
local _COMPOSITION _CURRENT_HOST _MODE _ZFS_BRANCH _ZFS
|
local _COMPOSITION _MODE _ZFS
|
||||||
ls -d "${CIS[COMPOSITIONS]:?"Missing CIS_COMPOSITIONS"}"*/ | while read -r _COMPOSITION
|
composition.printAllRunningOnThisHost | while read -r _COMPOSITION; do
|
||||||
do
|
|
||||||
_COMPOSITION="${_COMPOSITION%/}" #Remove tailing '/' if exists
|
|
||||||
_COMPOSITION="${_COMPOSITION##*/}" #Remove leading parts
|
|
||||||
_CURRENT_HOST="$(cat "${CIS[COMPOSITIONS]}${_COMPOSITION}/current-host" 2> /dev/null)"
|
|
||||||
_MODE="${1:-"$(cat "${CIS[COMPOSITIONS]}${_COMPOSITION}/snapshot-mode" 2> /dev/null)"}"
|
_MODE="${1:-"$(cat "${CIS[COMPOSITIONS]}${_COMPOSITION}/snapshot-mode" 2> /dev/null)"}"
|
||||||
_MODE="${_MODE:-"HOURLY"}"
|
_MODE="${_MODE:-"HOURLY"}"
|
||||||
_ZFS_BRANCH="$(cat "${CIS[COMPOSITIONS]}${_COMPOSITION}/zfs-branch" 2> /dev/null)"
|
|
||||||
_ZFS_BRANCH="${_ZFS_BRANCH%/}" #Remove tailing '/' if exists
|
|
||||||
|
|
||||||
[ "${_CURRENT_HOST}" != "${CIS[HOST]:?"Missing CIS_HOST"}" ] \
|
_ZFS="$(composition.printZFS "${_COMPOSITION}")"
|
||||||
&& printf -- "ZFS will be skipped, because this host '%b' is not running the composition:\n" "${CIS[HOST]}" >&2 \
|
if [ -n "${_ZFS}" ]; then
|
||||||
&& printf -- " - Composition : %b\n" "${_COMPOSITION}" >&2 \
|
(
|
||||||
&& printf -- " - Current host: %b\n" "${_CURRENT_HOST}" >&2 \
|
flock -n 9 || return 1
|
||||||
&& continue
|
|
||||||
|
|
||||||
_ZFS="$(zfs list -H -o name "${_ZFS_BRANCH:-"zpool1/persistent"}/${_COMPOSITION}" 2> /dev/null)"
|
case "${_MODE:?"Missing MODE"}" in
|
||||||
[ -z "${_ZFS}" ] \
|
MINUTELY) zfs snapshot "${_ZFS}@SNAPMINUTELY_${_MINUTE}" 2> /dev/null \
|
||||||
&& printf -- "FAILURE - ZFS not found: %b/%b\n" "${_ZFS_BRANCH:-"zpool1/persistent"}" "${_COMPOSITION}" >&2 \
|
&& print.success "Snapshot created: '${_ZFS}@SNAPMINUTELY_${_MINUTE}'" ;& # Forces execution to continue in the next block
|
||||||
&& continue
|
HOURLY) zfs snapshot "${_ZFS}@SNAPHOURLY_${_HOUR}" 2> /dev/null \
|
||||||
|
&& print.success "Snapshot created: '${_ZFS}@SNAPHOURLY_${_HOUR}'" ;&
|
||||||
|
DAILY) zfs snapshot "${_ZFS}@SNAPDAILY_${_DAY}" 2> /dev/null \
|
||||||
|
&& print.success "Snapshot created: '${_ZFS}@SNAPDAILY_${_DAY}'" ;&
|
||||||
|
MONTHLY) zfs snapshot "${_ZFS}@SNAPMONTHLY_${_MONTH}" 2> /dev/null \
|
||||||
|
&& print.success "Snapshot created: '${_ZFS}@SNAPMONTHLY_${_MONTH}'" ;;
|
||||||
|
NONE) ;;
|
||||||
|
*) print.warn "No valid mode to create snapshots: '${_MODE}'" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
(
|
) 9>>/tmp/locks/snapshot.${_COMPOSITION}.lock
|
||||||
flock -n 9 || return 1
|
fi
|
||||||
|
|
||||||
case "${_MODE:?"Missing MODE"}" in
|
|
||||||
MINUTELY) zfs snapshot "${_ZFS}@SNAPMINUTELY_${_MINUTE}" 2> /dev/null \
|
|
||||||
&& echo "Snapshot created: '${_ZFS}@SNAPMINUTELY_${_MINUTE}'" >&2 ;& # Forces execution to continue in the next block
|
|
||||||
HOURLY) zfs snapshot "${_ZFS}@SNAPHOURLY_${_HOUR}" 2> /dev/null \
|
|
||||||
&& echo "Snapshot created: '${_ZFS}@SNAPHOURLY_${_HOUR}'" >&2 ;&
|
|
||||||
DAILY) zfs snapshot "${_ZFS}@SNAPDAILY_${_DAY}" 2> /dev/null \
|
|
||||||
&& echo "Snapshot created: '${_ZFS}@SNAPDAILY_${_DAY}'" >&2 ;&
|
|
||||||
MONTHLY) zfs snapshot "${_ZFS}@SNAPMONTHLY_${_MONTH}" 2> /dev/null \
|
|
||||||
&& echo "Snapshot created: '${_ZFS}@SNAPMONTHLY_${_MONTH}'" >&2 ;;
|
|
||||||
NONE) ;;
|
|
||||||
*) echo "No valid mode to create snapshots: '${_MODE}'" >&2 ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
) 9>>/tmp/locks/snapshot.${_COMPOSITION}.lock
|
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user