updates on the script
This commit is contained in:
parent
800206d4d9
commit
0457c68ccf
1
.gitignore
vendored
1
.gitignore
vendored
@ -1 +1,2 @@
|
||||
*config
|
||||
metadata/*
|
||||
|
1
.shellcheckrc
Normal file
1
.shellcheckrc
Normal file
@ -0,0 +1 @@
|
||||
disable=SC2086,SC2046,SC2034,SC2162,SC2196,SC2317,SC2164,SC2316,SC1090,SC2035
|
@ -78,17 +78,36 @@ RESET="\033[0;00m"
|
||||
#
|
||||
########################################################################
|
||||
|
||||
printmsg()
|
||||
{
|
||||
echo -e "$*"
|
||||
}
|
||||
|
||||
abort_message()
|
||||
{
|
||||
local ABORTCODE=1
|
||||
[[ ${EXITCODE} -ne 0 ]] && ABORTCODE=${EXITCODE}
|
||||
printmsg "${LIGHTRED}ERROR${RESET}: $*"
|
||||
exit ${ABORTCODE}
|
||||
}
|
||||
|
||||
# debug_me uses variable ${DEBUG}
|
||||
debug_me()
|
||||
{
|
||||
if [[ ${DEBUG} -eq 0 ]] ; then
|
||||
[[ "$*" ]] && echo -e "$*"
|
||||
echo -e "${BLUE}DEBUGMODE${RESET} Press enter to continue"
|
||||
read -t ${WAITSEC}
|
||||
if [[ "${DEBUG}" && ${DEBUG} -eq 0 ]] ; then
|
||||
printmsg "${LIGHTBLUE}[DEBUG]${RESET}: $*"
|
||||
fi
|
||||
}
|
||||
|
||||
warning_message()
|
||||
{
|
||||
printmsg "${LIGHTYELLOW}[WARNING]${RESET}: $*"
|
||||
}
|
||||
|
||||
ok_message()
|
||||
{
|
||||
printmsg "${LIGHTGREEN}[OK]${RESET}: $*"
|
||||
}
|
||||
|
||||
usage()
|
||||
{
|
||||
@ -100,14 +119,42 @@ usage()
|
||||
# VERY INITIAL CHECKS
|
||||
}
|
||||
|
||||
nice_countdown()
|
||||
{
|
||||
local WAIT_TIME=$1
|
||||
local DEFAULT_WAIT_TIME=10
|
||||
if [[ ! ${WAIT_TIME} ]] ; then
|
||||
WAIT_TIME=${DEFAULT_WAIT_TIME}
|
||||
fi
|
||||
local WARNING=$((WAIT_TIME*2/3))
|
||||
local CRITICAL=$((WAIT_TIME/3))
|
||||
for ((x=WAIT_TIME; x>0; x--)) ; do
|
||||
if [[ ${x} -gt ${WARNING} ]] ; then
|
||||
MSG_COLOR=${LIGHTGREEN}
|
||||
elif [[ ${x} -gt ${CRITICAL} ]] ; then
|
||||
MSG_COLOR=${LIGHTYELLOW}
|
||||
else
|
||||
MSG_COLOR=${LIGHTRED}
|
||||
fi
|
||||
printf "\r${MSG_COLOR}%s${RESET} .." "${x}"
|
||||
#sleep 1
|
||||
read -r -t1
|
||||
done
|
||||
echo
|
||||
}
|
||||
|
||||
|
||||
get_dbname()
|
||||
{
|
||||
DATABASES="$(echo "select datname from pg_database where datname not in ('postgres', 'template0', 'template1');" | ${PSQL} -q | egrep -v "^($|\(.*\)$|\-{1,}$)|datname"| awk '{print $1}')"
|
||||
DATABASES="$(echo "select datname from pg_database where datname not in ('postgres', 'template0', 'template1', 'rdsadmin');" | ${PSQL} -q | grep -Ev "^($|\(.*\)$|-{1,}$)|datname"| awk '{print $1}')"
|
||||
#echo "select datname from pg_database where datname not in ('postgres', 'template0', 'template1');" | ${PSQL} -q | grep -Ev "^($|\(.*\)$|-{1,}$)|datname"| awk '{print $1}'
|
||||
debug_me "DATABASES=${DATABASES}"
|
||||
}
|
||||
|
||||
|
||||
generate_full_metadata()
|
||||
{
|
||||
#debug_me "${PGDUMP} -s ${DBNAME} > ${FULLMETADATA}"
|
||||
${PGDUMP} -s ${DBNAME} > ${FULLMETADATA}
|
||||
}
|
||||
|
||||
@ -131,20 +178,22 @@ generate_split_metadata()
|
||||
SCHEMA="postgres"
|
||||
fi
|
||||
OUTPUTDIR="${BACKUPDIR}/${DBNAME}/${SCHEMA// /_}/${TYPE// /_}"
|
||||
#debug_me "OUTPUTDIR=${OUTPUTDIR}"
|
||||
# PATCH for very long file names
|
||||
OUTPUTFILE="${OBJECT::240}"
|
||||
OUTPUTFILE="${OUTPUTFILE// /_}"
|
||||
if [[ -f ${OUTPUTDIR}/${OUTPUTFILE}.sql ]] ; then
|
||||
for ((x=1; x<1000 ;x++)) ; do
|
||||
for ((x=1; x<20 ;x++)) ; do
|
||||
if [[ ! -f ${OUTPUTDIR}/${OUTPUTFILE}_${x}.sql ]] ; then
|
||||
OUTPUTFILE="${OUTPUTFILE}_${x}"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
OUTPUTFILE="${OUTPUTFILE}.sql"
|
||||
#debug_me "OUTPUTFILE=${OUTPUTFILE}"
|
||||
|
||||
mkdir -p "${OUTPUTDIR}"
|
||||
echo -e "${OUTPUTDIR}/${OUTPUTFILE}"
|
||||
#echo -e "${OUTPUTDIR}/${OUTPUTFILE}"
|
||||
echo -e "${LINE}" > "${OUTPUTDIR}/${OUTPUTFILE}"
|
||||
fi
|
||||
fi
|
||||
@ -160,11 +209,10 @@ generate_split_metadata()
|
||||
|
||||
dump_all_roles()
|
||||
{
|
||||
debug_me
|
||||
if [[ ${DUMP_ROLE_PASSWORDS} -eq 0 ]] ; then
|
||||
${PGDUMPALL} --roles-only > ${OUTPUTDIR}/dump_roles.sql
|
||||
${PGDUMPALL} --roles-only > ${BACKUPDIR}/dump_roles.sql
|
||||
else
|
||||
${PGDUMPALL} --roles-only --no-role-passwords > ${OUTPUTDIR}/dump_roles.sql
|
||||
${PGDUMPALL} --roles-only --no-role-passwords > ${BACKUPDIR}/dump_roles.sql
|
||||
fi
|
||||
}
|
||||
|
||||
@ -176,22 +224,15 @@ init_staff()
|
||||
|
||||
upload_to_git()
|
||||
{
|
||||
[[ ${DEBUG} -eq 0 ]] && set -x
|
||||
#[[ ${DEBUG} -eq 0 ]] && set -x
|
||||
|
||||
local let RES=0
|
||||
local RES
|
||||
RES=0
|
||||
|
||||
debug_me
|
||||
debug_me "upload_to_git()"
|
||||
|
||||
cd ${BACKUPDIR}
|
||||
|
||||
GITVERSION=$(git --version | awk '{print $3}')
|
||||
if [[ ${GITVERSION} =~ ^1.*$ ]] ; then
|
||||
NOEDIT=""
|
||||
else
|
||||
NOEDIT="--no-edit"
|
||||
fi
|
||||
|
||||
|
||||
# git version patch
|
||||
git pull ${NOEDIT} -q -f
|
||||
git add *
|
||||
@ -200,8 +241,6 @@ upload_to_git()
|
||||
# Updating repo
|
||||
[[ ${RES} -eq 0 ]] && git push && RES=$?
|
||||
|
||||
debug_me
|
||||
|
||||
return ${RES}
|
||||
}
|
||||
|
||||
@ -222,40 +261,42 @@ upload_to_git()
|
||||
[[ ! -f ${CONFIGFILE} ]] && echo -e "${LIGHTRED} CONFIGFILE ${CONFIGFILE} NOT FOUND${RESET}" && exit 1
|
||||
. ${CONFIGFILE}
|
||||
|
||||
# DETECTING if the script is run by cron
|
||||
if [[ "$(tty)" = "not a tty" ]] ; then
|
||||
[[ ${DEBUG} -eq 0 ]] && set -x
|
||||
exec > ${SCRIPTLOG}
|
||||
exec 2> ${SCRIPTLOGERR}
|
||||
elif [[ ${DEBUG} -eq 0 ]] ; then
|
||||
echo -e "${BLUE}DEBUGMODE${RESET} is on"
|
||||
#echo -e "\t SCRIPTLOG will be ${SCRIPTLOG}"
|
||||
#echo -e "\t SCRIPTLOGERR will be ${SCRIPTLOGERR}"
|
||||
#set -x
|
||||
#exec > ${SCRIPTLOG}
|
||||
#exec 2> ${SCRIPTLOGERR}
|
||||
fi
|
||||
## DETECTING if the script is run by cron
|
||||
#if [[ "$(tty)" = "not a tty" ]] ; then
|
||||
# [[ ${DEBUG} -eq 0 ]] && set -x
|
||||
# exec > ${SCRIPTLOG}
|
||||
# exec 2> ${SCRIPTLOGERR}
|
||||
#elif [[ ${DEBUG} -eq 0 ]] ; then
|
||||
# echo -e "${BLUE}DEBUGMODE${RESET} is on"
|
||||
# #echo -e "\t SCRIPTLOG will be ${SCRIPTLOG}"
|
||||
# #echo -e "\t SCRIPTLOGERR will be ${SCRIPTLOGERR}"
|
||||
# #set -x
|
||||
# #exec > ${SCRIPTLOG}
|
||||
# #exec 2> ${SCRIPTLOGERR}
|
||||
#fi
|
||||
|
||||
[[ ${DEBUG} -eq 0 ]] && DEBUGME="bash -x"
|
||||
|
||||
debug_me "init_staff"
|
||||
init_staff
|
||||
debug_me
|
||||
debug_me "get_dbname"
|
||||
get_dbname
|
||||
debug_me
|
||||
debug_me "main loop over dbs"
|
||||
# multi-database support (auto mode)
|
||||
for DBNAME in ${DATABASES} ; do
|
||||
FULLMETADATA="${BACKUPDIR}/FULL_${DBNAME}_METADATA.sql"
|
||||
|
||||
debug_me "generate_full_metadata"
|
||||
debug_me "Database=${YELLOW}${DBNAME}${RESET}"
|
||||
generate_full_metadata
|
||||
if [[ ${SPLIPT_METADATA} -eq 0 ]] ; then
|
||||
debug_me "generate_split_metadata"
|
||||
generate_split_metadata
|
||||
fi
|
||||
debug_me "dump_all_roles"
|
||||
dump_all_roles
|
||||
#nice_countdown 6
|
||||
done
|
||||
|
||||
#debug_me "dump_all_roles"
|
||||
#dump_all_roles
|
||||
|
||||
if [[ ${ISGITREPO} -eq 0 ]] ; then
|
||||
debug_me "upload_to_git"
|
||||
upload_to_git
|
||||
|
Loading…
Reference in New Issue
Block a user