#!/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|]${NC}" echo -e "\nКоманды:" echo -e " ${CY}list${NC} - показать список известных частей playbook'а с возможностью создания резервной копии." echo -e " ${CY}${NC} - (опционально) установить только часть playbook'а. Можно указать несколько частей, разделяя их запятой(,)." echo -e " * - Создание полной резервной копии." }