import code
сохранён для истории
This commit is contained in:
117
scripts/scripts.d/20-backup.sh
Normal file
117
scripts/scripts.d/20-backup.sh
Normal file
@@ -0,0 +1,117 @@
|
||||
#!/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 " * - Создание полной резервной копии."
|
||||
}
|
||||
Reference in New Issue
Block a user