Archived
1
This repository has been archived on 2025-08-09. You can view files and clone it, but cannot push or open issues or pull requests.
Files
playbookctl/scripts/scripts.d/20-backup.sh
Voomra c584648913 import code
сохранён для истории
2024-04-23 07:41:00 +03:00

118 lines
3.8 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# vi: set tabstop=2 shiftwidth=2 noexpandtab :
MAP_COMMAND["backup"]=fn_command_backup
MAP_COMMAND_DESC["backup"]="создание резервной копии."
MAP_COMMAND_HELP["backup"]=fn_command_backup_help
ARRAY_BACKUP_PARTS=()
ARRAY_BACKUP_FLAGS=()
function fn_command_backup() {
local __parts=($@)
if [[ "list" == "${__parts[0]}" ]]; then
echo "Части playbook'а:"
for __ansible_part in "${ANSIBLE_PARTS_RESTORE[@]}"; do
echo -e " - ${CY}${__ansible_part}${NC}"
done
exit 0
fi
if [[ ${#__parts[@]} -gt 0 ]]; then
# Разеляем флаги и ansible части
for __part in "${__parts[@]}"; do
if [[ "$__part" = '-'* ]]; then
ARRAY_BACKUP_FLAGS+=($__part)
else
ARRAY_BACKUP_PARTS+=($__part)
fi
done
fi
if [[ ${#ARRAY_BACKUP_PARTS[@]} -gt 0 ]]; then
# Проверяем указанные части
for __part in "${ARRAY_BACKUP_PARTS[@]}"; do
if [[ ! "${ANSIBLE_PARTS_RESTORE[*]}" =~ "${__part}" ]]; then
LogError "Unknown part: ${CY}${__part}${NC}"
exit 1
fi
done
fi
fn_command_backup_run
}
function fn_command_backup_run() {
local __ansible_extra_vars
__ansible_extra_vars="--extra-vars \"dd_vars=$ANSIBLE_TARGET_HOST\""
if [[ ${#ARRAY_BACKUP_PARTS[@]} -eq 0 ]]; then
__ansible_extra_vars="$__ansible_extra_vars --extra-vars \"dd_backup=true\""
else
for __part in "${ARRAY_BACKUP_PARTS[@]}"; do
__ansible_extra_vars="$__ansible_extra_vars --extra-vars \"dd_backup_$__part=true\""
done
fi
local __flag_remote_only=0
for __flag in "${ARRAY_BACKUP_FLAGS[@]}"; do
if [[ $__flag = "-r" ]] || [[ $__flag = "--remote" ]] || [[ $__flag = "--remote-only" ]]; then
__flag_remote_only=1
break
fi
done
local __postbackup_file=""
if [[ $__flag_remote_only -eq 0 ]]; then
__postbackup_file="/tmp/$(date +%s)"
__ansible_extra_vars="$__ansible_extra_vars --extra-vars \"dd_postbackup=true\""
__ansible_extra_vars="$__ansible_extra_vars --extra-vars \"dd_postbackup_file=${__postbackup_file}\""
fi
local __ansible_become=""
if [[ $ANSIBLE_BECOME == 1 ]]; then
__ansible_become="--become --become-user=$ANSIBLE_BECOME_USER"
fi
local __ansible_vvv=""
if [[ $DD_DEBUG -gt 1 ]]; then
__ansible_vvv="-vvv"
fi
local __ansible_eval="ansible-playbook \
$__ansible_vvv \
$__ansible_become \
-i "$BASE_DIR"/hosts.yml \
-l "$ANSIBLE_TARGET_HOST" \
"$BASE_DIR"/"$ANSIBLE_PLAYBOOK" \
$__ansible_extra_vars"
Title "Start Annsible Playbook"
LogDebug $__ansible_eval
eval $__ansible_eval
if [[ $__flag_remote_only -eq 0 ]]; then
Title "Download files"
chmod +x "$__postbackup_file"
bash -c "$__postbackup_file"
rm -f "$__postbackup_file"
Title "Remove files"
chmod +x "${__postbackup_file}_clean"
bash -c "${__postbackup_file}_clean"
rm -f "${__postbackup_file}_clean"
fi
}
function fn_command_backup_help() {
echo "Использование:"
echo -e " ${CW}$(basename $0) ${CY}backup ${CC}[list|<PARTS>]${NC}"
echo -e "\nКоманды:"
echo -e " ${CY}list${NC} - показать список известных частей playbook'а с возможностью создания резервной копии."
echo -e " ${CY}<PARTS>${NC} - (опционально) установить только часть playbook'а. Можно указать несколько частей, разделяя их запятой(,)."
echo -e " * - Создание полной резервной копии."
}