1183 lines
45 KiB
Bash
Executable File
1183 lines
45 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# NodeMgmt - Node Management Scripts
|
|
|
|
NMG_ACTION="${1}"
|
|
|
|
source /opt/idssys/defaults/colors.inc
|
|
source /opt/idssys/defaults/default.inc
|
|
|
|
source /opt/idssys/nodemgmt/conf/settings.conf
|
|
source /opt/idssys/nodemgmt/defaults.inc
|
|
|
|
source /opt/idssys/nodemgmt/inc/status.inc
|
|
source /opt/idssys/nodemgmt/inc/certs.inc
|
|
source /opt/idssys/nodemgmt/inc/sites.inc
|
|
source /opt/idssys/nodemgmt/inc/services.inc
|
|
|
|
if [ "${1}" == "report" ] || [ "${2}" == "report" ] || [ "${3}" == "report" ]; then
|
|
unset idsCL idsBG idsST
|
|
idsCL=('')
|
|
idsBG=('')
|
|
idsST=('')
|
|
fi
|
|
|
|
|
|
BACKUP(){
|
|
BACKUP_FOLDER=${NM_BACKUP_FOLDER}/node-backup/$(date +%m-%d-%y)/$(date +%H-%M-%S)
|
|
[ ! -d ${BACKUP_FOLDER} ] && mkdir -p ${BACKUP_FOLDER}
|
|
echo -e "\n"
|
|
echo -e "Configured Backup Folder: ${idsCL[Yellow]}${NM_BACKUP_FOLDER}${idsCL[Default]}"
|
|
echo
|
|
echo -e "Backup path to use: ${idsCL[Yellow]}${BACKUP_FOLDER}${idsCL[Default]}"
|
|
echo
|
|
echo -e "${idsCL[Green]}Backing up Node Settings and Files...${idsCL[Default]}"
|
|
DIVIDER true
|
|
for item in "${!NM_BACKUP_ITEMS[@]}"; do
|
|
c=0; spc=''; spc1=`expr 20 - ${#item}`; until [ $c = ${spc1} ]; do spc="${spc} "; c=`expr $c + 1`; done
|
|
echo -en "Backing up '${idsCL[LightCyan]}${item}${idsCL[Default]}'${spc}"
|
|
if [ -d ${NM_BACKUP_ITEMS[$item]} ]; then
|
|
tar -czPf ${BACKUP_FOLDER}/${item}.tar.gz -C ${NM_BACKUP_ITEMS[$item]} . --exclude='./data/repository' --exclude='*/.stfolder' --exclude='*/.stversions' --exclude='*/.git' --exclude='*.example.*' >/dev/null 2>&1
|
|
echo -e "${idsCL[Green]}Done${idsCL[Default]}"
|
|
else
|
|
echo -e "${idsCL[Yellow]}Not found${idsCL[Default]}"
|
|
fi
|
|
done
|
|
touch ${NM_LOGFOLDER}/backup.lastrun
|
|
echo
|
|
DIVIDER
|
|
echo -e "${idsCL[Green]}Backups are completed\n\n"
|
|
if [ -z ${NMG_ACTION} ] || [ "${NMG_ACTION}" = "gui" ]; then
|
|
ENTER2CONTINUE
|
|
fi
|
|
}
|
|
|
|
|
|
|
|
SET-PERMISSIONS(){
|
|
if [ "${1}" = "gitea" ]; then
|
|
for nip in "${NM_HOSTS['WEB'][@]}"; do
|
|
if [[ ${RUN_NODE_IP} == *"${nip}"* ]]; then
|
|
NCMD=''
|
|
else
|
|
NCMD="ssh -o ConnectTimeout=3 root@${nip}"
|
|
fi
|
|
if [ "${2}" != "q" ]; then
|
|
echo -en "${idsCL[Yellow]}Resetting folder permissions for Gitea on ${NM_HOSTNAMES[${nip}]} (${nip})... ${idsCL[Default]}"
|
|
fi
|
|
checkhost=$(CHECK_HOST ${nip})
|
|
if [ "${checkhost}" != "false" ]; then
|
|
${NCMD} chown -R git:git ${NM_REPL_CHECK_LOC['gitea']}
|
|
${NCMD} chmod -R 750 ${NM_REPL_CHECK_LOC['gitea']}
|
|
${NCMD} chown -R git:git /home/git
|
|
${NCMD} chmod -R 750 /home/git
|
|
if [ "${2}" != "q" ]; then
|
|
echo -e "${idsCL[Green]}Complete${idsCL[Default]}"
|
|
fi
|
|
elif [ "${2}" != "q" ]; then
|
|
echo -e "${idsCL[Red]}Node is down${idsCL[Default]}"
|
|
fi
|
|
done
|
|
elif [ "${1}" = "pdnsadmin" ]; then
|
|
for nip in "${NM_HOSTS['WEB'][@]}"; do
|
|
if [[ ${RUN_NODE_IP} == *"${nip}"* ]]; then
|
|
NCMD=''
|
|
else
|
|
NCMD="ssh -o ConnectTimeout=3 root@${nip}"
|
|
fi
|
|
if [ "${2}" != "q" ]; then
|
|
echo -en "${idsCL[Yellow]}Resetting folder permissions for PowerDNS-Admin on ${NM_HOSTNAMES[${nip}]} (${nip})... ${idsCL[Default]}"
|
|
fi
|
|
checkhost=$(CHECK_HOST ${nip})
|
|
if [ "${checkhost}" != "false" ]; then
|
|
${NCMD} chown -R www-data:www-data ${NM_REPL_CHECK_LOC['pdnsadmin']}
|
|
${NCMD} chmod -R 775 ${NM_REPL_CHECK_LOC['pdnsadmin']}
|
|
if [ "${2}" != "q" ]; then
|
|
echo -e "${idsCL[Green]}Complete${idsCL[Default]}"
|
|
fi
|
|
elif [ "${2}" != "q" ]; then
|
|
echo -e "${idsCL[Red]}Node is down${idsCL[Default]}"
|
|
fi
|
|
done
|
|
elif [ "${1}" = "nextcloud" ]; then
|
|
nip=${NC_HOSTS[0]}
|
|
if [[ ${RUN_NODE_IP} == *"${nip}"* ]]; then
|
|
NCMD=''
|
|
else
|
|
NCMD="ssh -o ConnectTimeout=3 root@${nip}"
|
|
fi
|
|
if [ "${2}" != "q" ]; then
|
|
echo -en "${idsCL[Yellow]}Resetting folder permissions for Nextcloud on ${NM_HOSTNAMES[${nip}]} (${nip})... ${idsCL[Default]}"
|
|
fi
|
|
checkhost=$(CHECK_HOST ${nip})
|
|
if [ "${checkhost}" != "false" ]; then
|
|
${NCMD} chown -R www-data:www-data /mnt/Nextcloud-Data
|
|
${NCMD} find /mnt/Nextcloud-Data/ -type d -exec chmod 770 {} \;
|
|
${NCMD} find /mnt/Nextcloud-Data/ -type f -exec chmod 660 {} \;
|
|
if [ "${2}" != "q" ]; then
|
|
echo -e "${idsCL[Green]}Complete${idsCL[Default]}"
|
|
fi
|
|
elif [ "${2}" != "q" ]; then
|
|
echo -e "${idsCL[Red]}Node is down${idsCL[Default]}"
|
|
fi
|
|
else
|
|
DIVIDER
|
|
if [ "${1}" != "" ]; then
|
|
NEW_SITE=${1}
|
|
echo -e "${idsCL[Yellow]}Setting new site folder permissions for (${NM_WWWPATH}/${NEW_SITE})${idsCL[Default]}"
|
|
fi
|
|
if [ "${NEW_SITE}" = "xxx" ]; then
|
|
for nip in "${MYSQL_HOSTS[@]}"; do
|
|
checkhost=$(CHECK_HOST ${nip})
|
|
if [ "${checkhost}" != "false" ]; then
|
|
if [[ ${RUN_NODE_IP} == *"${nip}"* ]]; then
|
|
nip='localhost '
|
|
NCMD=''
|
|
else
|
|
NCMD="ssh -o ConnectTimeout=3 root@${nip}"
|
|
fi
|
|
echo -e "${idsCL[Yellow]}Setting folder permissions for ${NM_HOSTNAMES[${nip}]} (${nip})${idsCL[Default]}"
|
|
echo -en "${idsCL[Cyan]}LetsEncrypt Certs ${idsCL[Default]}"
|
|
${NCMD} chown -R root:le ${NM_CERTPATH}
|
|
${NCMD} chmod -R 6775 ${NM_CERTPATH}
|
|
echo -e "${idsCL[Green]}Complete${idsCL[Default]}"
|
|
echo
|
|
fi
|
|
done
|
|
fi
|
|
[ "${NM_WWWPATHS['WEB']}" != "" ] && WWWPATH=${NM_WWWPATHS['WEB']} || WWWPATH=/var/www
|
|
for nip in "${NM_HOSTS['WEB'][@]}"; do
|
|
checkhost=$(CHECK_HOST ${nip})
|
|
if [ "${checkhost}" != "false" ]; then
|
|
if [[ ${RUN_NODE_IP} == *"${nip}"* ]]; then
|
|
nip='localhost '
|
|
NCMD=''
|
|
else
|
|
NCMD="ssh -o ConnectTimeout=3 root@${nip}"
|
|
fi
|
|
if [ "${NEW_SITE}" != "" ]; then
|
|
echo -en "${idsCL[Cyan]}${NM_HOSTNAMES[${nip}]} (${nip}) ${idsCL[Default]}"
|
|
${NCMD} chown -R www-data:www-data ${WWWPATH}/$NEW_SITE
|
|
${NCMD} chmod -R 7775 ${WWWPATH}/$NEW_SITE
|
|
${NCMD} chown -R www-data:www-data /var/lib/php/sessions
|
|
${NCMD} chmod -R 7777 /var/lib/php/sessions
|
|
echo -e "${idsCL[Green]}Complete${idsCL[Default]}"
|
|
else
|
|
echo -e "${idsCL[Yellow]}Setting folder permissions for ${NM_HOSTNAMES[${nip}]} (${nip})${idsCL[Default]}"
|
|
echo -en "${idsCL[Cyan]}Webserver folders ${idsCL[Default]}"
|
|
${NCMD} chown -R www-data:www-data ${WWWPATH}
|
|
${NCMD} chmod -R 7775 ${WWWPATH}
|
|
${NCMD} chown -R www-data:www-data /var/lib/php/sessions
|
|
${NCMD} chmod -R 7777 /var/lib/php/sessions
|
|
echo -e "${idsCL[Green]}Complete${idsCL[Default]}"
|
|
echo -en "${idsCL[Cyan]}Gitea Folder ${idsCL[Default]}"
|
|
${NCMD} chown -R git:git ${NM_REPL_CHECK_LOC['gitea']}
|
|
${NCMD} chmod -R 750 ${NM_REPL_CHECK_LOC['gitea']}
|
|
${NCMD} chown -R git:git /home/git
|
|
${NCMD} chmod -R 750 /home/git
|
|
echo -e "${idsCL[Green]}Complete${idsCL[Def ault]}"
|
|
echo
|
|
fi
|
|
fi
|
|
done
|
|
if [ "${NEW_SITE}" != "" ]; then echo ; fi
|
|
if [ -z ${NMG_ACTION} ] || [ "${NMG_ACTION}" = "gui" ]; then
|
|
ENTER2CONTINUE
|
|
fi
|
|
fi
|
|
}
|
|
|
|
HAPROXY-CONFIG() {
|
|
echo -e "${idsCL[Yellow]}Creating HAProxy Config Files${idsCL[Default]}"
|
|
DIVIDER false yellow
|
|
# if [[ "${MYSQLSERVICES_CHECK}" = *"haproxy"* ]]; then
|
|
if [[ " ${MYSQL_SERVICES_CHECK[*]} " =~ " haproxy " ]]; then
|
|
for nip in "${MYSQL_HOSTS[@]}"; do
|
|
if [[ ${RUN_NODE_IP} == *"${nip}"* ]]; then
|
|
nip='localhost '
|
|
NCMD=''
|
|
else
|
|
NCMD="ssh -o ConnectTimeout=3 root@${nip}"
|
|
fi
|
|
echo -en "Creating File on ${NM_HOSTNAMES[${nip}]} ($nip)... ${idsCL[Default]}"
|
|
|
|
${NCMD} "nodemgmt update q"
|
|
${NCMD} "rm -f /etc/haproxy/haproxy.cfg"
|
|
${NCMD} "sed -e 's;%NIP%;${nip};g' ${NM_FOLDER}/templates/haproxy.config > /etc/haproxy/haproxy.cfg"
|
|
|
|
echo -e "${idsCL[Green]}COMPLETE${idsCL[Default]}"
|
|
done
|
|
echo
|
|
fi
|
|
# if [[ "${WEBSERVICES_CHECK}" = *"haproxy"* ]]; then
|
|
if [[ " ${WEB_SERVICES_CHECK[*]} " =~ " haproxy " ]]; then
|
|
for nip in "${NM_HOSTS['WEB'][@]}"; do
|
|
if [[ ${RUN_NODE_IP} == *"${nip}"* ]]; then
|
|
nip='localhost '
|
|
NCMD=''
|
|
else
|
|
NCMD="ssh -o ConnectTimeout=3 root@${nip}"
|
|
fi
|
|
echo -en "Creating File on ${NM_HOSTNAMES[${nip}]} ($nip)... ${idsCL[Default]}"
|
|
|
|
${NCMD} "nodemgmt update q"
|
|
${NCMD} "rm -f /etc/haproxy/haproxy.cfg"
|
|
${NCMD} "sed -e 's;%NIP%;${nip};g' ${NM_FOLDER}/templates/haproxy.config > /etc/haproxy/haproxy.cfg"
|
|
|
|
echo -e "${idsCL[Green]}COMPLETE${idsCL[Default]}"
|
|
done
|
|
fi
|
|
# if [[ "${LBSERVICES_CHECK}" = *"haproxy"* ]]; then
|
|
if [[ " ${LB_SERVICES_CHECK[*]} " =~ " haproxy " ]]; then
|
|
for nip in "${LB_HOSTS[@]}"; do
|
|
if [[ ${RUN_NODE_IP} == *"${nip}"* ]]; then
|
|
nip='localhost '
|
|
NCMD=''
|
|
else
|
|
NCMD="ssh -o ConnectTimeout=3 root@${nip}"
|
|
fi
|
|
echo -en "Creating File on ${NM_HOSTNAMES[${nip}]} ($nip)... ${idsCL[Default]}"
|
|
|
|
${NCMD} "nodemgmt update q"
|
|
${NCMD} "rm -f /etc/haproxy/haproxy.cfg"
|
|
${NCMD} "sed -e 's;%NIP%;${nip};g' ${NM_FOLDER}/templates/haproxy.config > /etc/haproxy/haproxy.cfg"
|
|
|
|
echo -e "${idsCL[Green]}COMPLETE${idsCL[Default]}"
|
|
done
|
|
fi
|
|
SERVICE_MGMT haproxy reload
|
|
echo
|
|
echo -e "${idsCL[Green]}HAProxy Config Files have been created.${idsCL[Default]}"
|
|
echo
|
|
}
|
|
|
|
|
|
KEEPALIVE-CONFIG() {
|
|
echo -e "${idsCL[Yellow]}Creating Keepalive Config Files${idsCL[Default]}"
|
|
DIVIDER false yellow
|
|
# if [[ "${MYSQLSERVICES_CHECK}" = *"keepalive"* ]]; then
|
|
if [[ " ${MYSQL_SERVICES_CHECK[*]} " =~ " keepalived " ]]; then
|
|
for nip in "${MYSQL_HOSTS[@]}"; do
|
|
if [[ ${RUN_NODE_IP} == *"${nip}"* ]]; then
|
|
nip='localhost '
|
|
NCMD=''
|
|
else
|
|
NCMD="ssh -o ConnectTimeout=3 root@${nip}"
|
|
fi
|
|
echo -en "Creating File on ${NM_HOSTNAMES[${nip}]} ($nip)... ${idsCL[Default]}"
|
|
|
|
${NCMD} "nodemgmt update q"
|
|
${NCMD} "rm -f /etc/keepalived/keepalived.conf"
|
|
${NCMD} "sed -e 's;%NIP%;${nip};g' ${NM_FOLDER}/templates/keepalived.config > /etc/keepalived/keepalived.conf"
|
|
|
|
echo -e "${idsCL[Green]}COMPLETE${idsCL[Default]}"
|
|
done
|
|
echo
|
|
fi
|
|
# if [[ "${WEBSERVICES_CHECK}" = *"keepalive"* ]]; then
|
|
if [[ " ${WEB_SERVICES_CHECK[*]} " =~ " keepalived " ]]; then
|
|
for nip in "${NM_HOSTS['WEB'][@]}"; do
|
|
if [[ ${RUN_NODE_IP} == *"${nip}"* ]]; then
|
|
nip='localhost '
|
|
NCMD=''
|
|
else
|
|
NCMD="ssh -o ConnectTimeout=3 root@${nip}"
|
|
fi
|
|
echo -en "Creating File on ${NM_HOSTNAMES[${nip}]} ($nip)... ${idsCL[Default]}"
|
|
|
|
${NCMD} "nodemgmt update q"
|
|
${NCMD} "rm -f /etc/keepalived/keepalived.conf"
|
|
${NCMD} "sed -e 's;%NIP%;${nip};g' ${NM_FOLDER}/templates/keepalived.config > /etc/keepalived/keepalived.conf"
|
|
|
|
echo -e "${idsCL[Green]}COMPLETE${idsCL[Default]}"
|
|
done
|
|
fi
|
|
SERVICE_MGMT keepalived reload
|
|
echo
|
|
echo -e "${idsCL[Green]}Keepalive Config Files have been created.${idsCL[Default]}"
|
|
echo
|
|
}
|
|
|
|
NODEUPDATES() {
|
|
start=`date +%s`
|
|
cw=40;
|
|
if [ "${1}" = "report" ]; then
|
|
unset idsCL idsBG idsST
|
|
idsCL=('')
|
|
idsBG=('')
|
|
idsST=('')
|
|
else
|
|
echo
|
|
fi
|
|
declare -i spc1; declare -i c
|
|
echo -e "${idsCL[LightGreen]}Updating All Nodes${idsCL[Default]}"
|
|
echo -e "${idsCL[LightGreen]}-------------------------------------------${idsCL[Default]}"
|
|
|
|
[ "${RUN_NODE_TYPE}" == "nm" ] && NMCMD="" || NMCMD="ssh -tq root@${NM_NODEMANAGER}"
|
|
betacheck=$(BETACHECK)
|
|
|
|
if [ "${2}" != "sync" ]; then
|
|
c=0; spca=''; spc1=${cw}-25; until [ $c = ${spc1} ]; do spca="${spca} "; c=`expr $c + 1`; done
|
|
echo -en "Updating Node-Manager[${NM_NODEMANAGER}]${spca} ~ ${idsCL[LightCyan]}NodeMGMT${idsCL[Default]} : "
|
|
[ "${betacheck}" == "true" ] && echo -e "Skipping BETA Update" || ${NMCMD} "nodemgmt update q"
|
|
echo
|
|
fi
|
|
|
|
echo
|
|
|
|
for NTYPE in "${NM_NODE_TYPES[@]}"; do
|
|
var=${NTYPE}_HOSTS[@]
|
|
for nip in "${!var}"; do
|
|
if [[ ${RUN_NODE_IP} == *"${nip}"* ]]; then
|
|
nip='localhost '
|
|
fi
|
|
NODEUPDATE "${nip}" "${2}" "${NMCMD}"
|
|
|
|
done
|
|
echo
|
|
done
|
|
|
|
echo -e "${idsCL[Green]}All Nodes have been Updated.${idsCL[Default]}"
|
|
echo
|
|
end=`date +%s`
|
|
runtime=$((end-start))
|
|
echo "runtime: ${runtime}"
|
|
echo
|
|
}
|
|
|
|
NODEUPDATE(){
|
|
nip="${1}"
|
|
NMCMD="${3}"
|
|
if [ "${NMCMD}" == "ssh" ]; then
|
|
noup=1
|
|
NMCMD=''
|
|
else
|
|
noup=0
|
|
fi
|
|
NCMD="ssh -tq root@${nip}"
|
|
NODE="${NM_HOSTNAMES[${nip}]} [${nip}]"
|
|
|
|
if [ ${noup} -eq 0 ]; then
|
|
c=0; spca=''; spc1=`expr ${cw} - ${#NODE}`; until [ $c = ${spc1} ]; do spca="${spca} "; c=`expr $c + 1`; done
|
|
echo -en "Updating ${NODE}${spca}"
|
|
fi
|
|
betacheck=$(BETACHECK)
|
|
|
|
if [ "${nip}" != "100.100.2.1" ] && [ "${nip}" != "10.2.1.1" ] && [ ! -f ${NM_TMPFOLDER}/${nip}.down ]; then
|
|
if [ "${betacheck}" == "false" ]; then
|
|
if [ "${2}" != "sync" ]; then
|
|
[ ${noup} -eq 0 ] && echo -en " ~ ${idsCL[LightCyan]}NodeMGMT${idsCL[Default]} : "
|
|
if ! ${NCMD} command -v nodemgmt > /dev/null; then
|
|
${NCMD} "bash <(curl -sL https://go.scity.us/install-nodemgmt)" >/dev/null 2>&1
|
|
${NMCMD} rsync -az ${NM_FOLDER}/conf/defaults.local.inc ${NM_FOLDER}/conf/ssl-domain-checks.conf root@${nip}:${NM_FOLDER}/conf/ & >/dev/null 2>&1
|
|
[ "${NM_GITPASS}" != "" ] && [ "${NM_GITUSER}" == "voltron" ] && ${NMCMD} "bash <(curl -sL https://go.scity.us/add-linux-pass)" >/dev/null 2>&1
|
|
echo -e "${idsCL[Green]}Installed & Synced${idsCL[Default]}"
|
|
elif [ ${noup} -eq 1 ]; then
|
|
echo -e "${idsCL[Green]}Already Installed${idsCL[Default]}"
|
|
else
|
|
${NCMD} "nodemgmt update q"
|
|
fi
|
|
else
|
|
echo -en " ~ ${idsCL[LightCyan]}Sync Shared Nodemgmt Defaults${idsCL[Default]} : "
|
|
${NMCMD} rsync -az ${NM_FOLDER}/conf/defaults.local.inc ${NM_FOLDER}/conf/ssl-domain-checks.conf root@${nip}:${NM_FOLDER}/conf/ & >/dev/null 2>&1
|
|
echo -e "${idsCL[Green]}Files Synced${idsCL[Default]}"
|
|
fi
|
|
else
|
|
echo -e " ~ ${idsCL[LightCyan]}NodeMGMT${idsCL[Default]} : Skipping BETA Update"
|
|
fi
|
|
elif [ -f ${NM_TMPFOLDER}/${nip}.down ]; then
|
|
echo -e " ~ ${idsCL[LightCyan]}Skipping, host is offline${idsCL[Default]}"
|
|
fi
|
|
}
|
|
|
|
ADD_LOGROTATE_CRONTAB(){
|
|
if ! crontab -l | grep -q "${NM_FOLDER}/tmp-logrotate"; then
|
|
(crontab -l ; echo "0 */1 * * * logrotate -f ${NM_FOLDER}/tmp-logrotate") >/dev/null 2>&1 | crontab -
|
|
fi
|
|
/bin/chmod 0644 ${NM_FOLDER}/tmp-logrotate
|
|
echo
|
|
echo -e "${idsCL[Green]}The crontab entry has been made${idsCL[Default]}"
|
|
echo
|
|
read -n 1 -s -p "Press any key to continue"
|
|
echo
|
|
}
|
|
|
|
UPDATE_DYNDNS(){
|
|
[ "${NM_PDNS_HOST}" != "" ] && PDNS_SERVER=${NM_PDNS_HOST} || PDNS_SERVER=${NM_PDNS_WANDNS}
|
|
TESTMODE=0; FORCE=0;
|
|
while [ $# -gt 0 ]; do
|
|
case "${1}" in
|
|
-s|-site) FORCE=1;;
|
|
-f|-force) FORCE=1;;
|
|
-t|-test) TESTMODE=1;;
|
|
-h | -help | --help)
|
|
echo
|
|
echo -e "Usage: ${idsCL[LightYellow]}[nodemgmt or nmg] update-dyndns ${idsCL[Yellow]}{location}${idsCL[Default]} {"
|
|
width=35
|
|
printf "%-${width}s- %s\n" " {location}" "(site location name to update for)"
|
|
printf "%-${width}s- %s\n" " -s|-site" "(configured site to run for [NM_DYNDNS_SITES variable])"
|
|
printf "%-${width}s- %s\n" " -f|-force" "(will force a record update without IP changing)"
|
|
printf "%-${width}s- %s\n" " -t|-test" "(tests but does not update records)"
|
|
echo "}"
|
|
exit 0;;
|
|
*) [ "${1}" != "q" ] && LOCATION=${1};;
|
|
esac
|
|
shift
|
|
done
|
|
if [ "${NM_DYNDNS_SITES[${LOCATION,,}]}" != "" ]; then
|
|
arr DYNDNS_HOSTS
|
|
IFS=,; hosts=(${NM_DYNDNS_SITES[${LOCATION,,}]}); unset IFS
|
|
for host in "${hosts[@]}"; do
|
|
arr_insert DYNDNS_HOSTS ${host}
|
|
done
|
|
domain=${DYNDNS_HOSTS[0]#*.}
|
|
echo
|
|
cw_spc=10
|
|
echo -e "Checking for DYNDNS update at '${idsCL[Green]}${LOCATION^^}${idsCL[Default]}'"
|
|
echo
|
|
echo -en "${idsCL[White]}Previous WAN IP : "; OLDIP=`dig +short ${DYNDNS_HOSTS[0]} @${PDNS_SERVER} +time=2`; echo -e "${idsCL[Cyan]}${OLDIP}"
|
|
echo -en "${idsCL[White]}Current WAN IP : "; NEWIP=`dig +short myip.opendns.com @resolver1.opendns.com +time=2`; echo -e "${idsCL[LightGreen]}${NEWIP}"
|
|
echo
|
|
|
|
if ([ "${OLDIP}" != "" ] && [ "${NEWIP}" != "" ] && [[ "${OLDIP}" != *";"* ]] && [[ "${NEWIP}" != *";"* ]]) && ([ "${OLDIP}" != "${NEWIP}" ] || [ ${FORCE} -eq 1 ]); then
|
|
if [ ${TESTMODE} -eq 1 ]; then
|
|
echo -e "${idsCL[Green]}'${idsCL[LightCyan]}${LOCATION^^}${idsCL[Green]}' WAN IP has changed: ${idsCL[Yellow]}testmode active and will not update records${idsCL[Default]}"
|
|
else
|
|
if [ ${FORCE} -eq 1 ]; then
|
|
echo -en "${idsCL[Yellow]}'${idsCL[LightCyan]}${LOCATION^^}${idsCL[Yellow]}' WAN IP has not changed...\n${idsCL[Green]}but what the heck, lets update the records anyway ehh ... "
|
|
else
|
|
SENDNOTICE "${LOCATION^^} WAN IP Changed" "Updated '${LOCATION^}' WAN IP from '${OLDIP}' to '${NEWIP}'"
|
|
echo -en "${idsCL[Green]}'${idsCL[LightCyan]}${LOCATION^^}${idsCL[Green]}' WAN IP has changed, updating all pre-defined 'A' records ... "
|
|
fi
|
|
if [ "${NM_PDNS_USER}" != "" ] && [ "${NM_PDNS_PASS}" != "" ]; then
|
|
if [ "$(curl -m 3 -sL "https://${NM_PDNS_USER}df:${NM_PDNS_PASS}@${PDNS_SERVER}/domain/${domain}" | grep "HTTP 403 Error")" == "" ]; then
|
|
for host in ${DYNDNS_HOSTS[@]}; do
|
|
/usr/bin/curl -s "https://${NM_PDNS_USER}:${NM_PDNS_PASS}@${PDNS_SERVER}/nic/update?hostname=${host}&myip=${NEWIP}" > /dev/null 2>&1
|
|
done
|
|
if [ "${NM_PDNS_USER}" == "systems" ]; then
|
|
[ "${LOCATION,,}" == "mainsite" ] && /usr/bin/curl -s "https://${NM_PDNS_USER}:${NM_PDNS_PASS}@${NM_PDNS_LANDNS}/nic/update?hostname=sc1.scity.us&myip=${NEWIP}" > /dev/null 2>&1
|
|
[ "${LOCATION,,}" == "offsite" ] && /usr/bin/curl -s "https://${NM_PDNS_USER}:${NM_PDNS_PASS}@${NM_PDNS_LANDNS}/nic/update?hostname=wan.offsite.scity.us&myip=${NEWIP}" > /dev/null 2>&1
|
|
fi
|
|
echo -e "${idsCL[Green]}Done${idsCL[Default]}"
|
|
else
|
|
echo -e "\n\n${idsCL[LightRed]}INVALID DYNDNS username and/or password (NM_PDNS_USER=${NM_PDNS_USER}) (NM_PDNS_PASS=${NM_PDNS_PASS})\n"
|
|
# SENDNOTICE "${LOCATION^^} DYNDNS ERROR" "INVALID DYNDNS username or password (NM_PDNS_USER=${NM_PDNS_USER}) (NM_PDNS_PASS=${NM_PDNS_PASS})" 1
|
|
exit 1
|
|
fi
|
|
else
|
|
echo -e "\n\n${idsCL[LightYellow]}Missing DYNDNS username and/or password (NM_PDNS_USER=${NM_PDNS_USER}) (NM_PDNS_PASS=${NM_PDNS_PASS})\n"
|
|
# SENDNOTICE "${LOCATION^^} DYNDNS ERROR" "MISSING DYNDNS username or password (NM_PDNS_USER=${NM_PDNS_USER}) (NM_PDNS_PASS=${NM_PDNS_PASS})" 1
|
|
exit 1
|
|
fi
|
|
|
|
fi
|
|
|
|
elif [[ "${NEWIP}" == *";"* ]] || [[ "${OLDIP}" == *";"* ]]; then
|
|
echo -e "${idsCL[LightRed]}Could not perform DNS Lookups${idsCL[Default]}"
|
|
# SENDNOTICE "${LOCATION^^} DYNDNS Could not Update" "Connection error, could reach any servers"
|
|
elif [ "${OLDIP}" == "" ]; then
|
|
echo -e "${idsCL[LightRed]}Could not get Previous WAN IP${idsCL[Default]}"
|
|
elif [ "${NEWIP}" == "" ]; then
|
|
echo -e "${idsCL[LightRed]}Could not get Current WAN IP${idsCL[Default]}"
|
|
else
|
|
echo -e "${idsCL[Yellow]}'${idsCL[Green]}${LOCATION^^}${idsCL[Yellow]}' WAN IP has not changed${idsCL[Default]}"
|
|
fi
|
|
if [ ${TESTMODE} -eq 1 ]; then
|
|
echo -en "\nDYNDNS Credential Test: "
|
|
if [ "$(curl -m 3 -sL "https://${NM_PDNS_USER}df:${NM_PDNS_PASS}@${PDNS_SERVER}/domain/${domain}" | grep "HTTP 403 Error")" == "" ]; then
|
|
echo -e "${idsCL[Green]}Pass${idsCL[Default]}"
|
|
else
|
|
echo -e "${idsCL[LightRed]}Fail${idsCL[Default]}"
|
|
fi
|
|
fi
|
|
|
|
else
|
|
[ "${LOCATION}" == "" ] && echo -e "\n${idsCL[LightYellow]}No DYNDNS location specified" || echo -e "\n${idsCL[Red]}DYNDNS location '${LOCATION}' not recognized"
|
|
fi
|
|
echo
|
|
}
|
|
|
|
BACKUP_OFFSITEPFSENSE(){
|
|
BAKFOLDER=/mnt/Veeam-pfSense-Backups
|
|
OFFSITE_PFSENSE_IP='10.2.1.1'
|
|
|
|
if [ "$(CHECK_HOST ${OFFSITE_PFSENSE_IP})" != "false" ]; then
|
|
if [ ! -f ${BAKFOLDER}/mounted ]; then
|
|
mount -a
|
|
sleep 2s
|
|
if [ ! -f ${BAKFOLDER}/mounted ]; then
|
|
echo "Can't mount backup folder"
|
|
SENDNOTICE "Offsite pfSense Backup Failed" "Could not mount backup folder" 1
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
newBAKFOLDER=$(date +%Y%m%d-%H%M%S)
|
|
mkdir ${BAKFOLDER}/${newBAKFOLDER}
|
|
DOM='01'
|
|
DOW='1'
|
|
DailyBackupsToKeep=14
|
|
WeeklyBackupsToKeep=8
|
|
MonthlyBackupsToKeep=3
|
|
|
|
ssh root@${OFFSITE_PFSENSE_IP} tar -c -f /cf/conf/conf_backup.tar.gz /cf/conf
|
|
scp root@${OFFSITE_PFSENSE_IP}:/cf/conf/conf* ${BAKFOLDER}/${newBAKFOLDER}/
|
|
ssh root@${OFFSITE_PFSENSE_IP} rm -f /cf/conf/conf_backup.tar.gz
|
|
|
|
cd ${BAKFOLDER}
|
|
if [ "$(date +%d)" == "${DOM}" ] && [ "$(date +%u)" == "${DOW}" ]; then
|
|
mv ${newBAKFOLDER} "${newBAKFOLDER}-M"
|
|
ln -s "${newBAKFOLDER}-M" "${newBAKFOLDER}-W"
|
|
ln -s "${newBAKFOLDER}-M" "${newBAKFOLDER}-D"
|
|
elif [ "$(date +%d)" == "${DOM}" ]; then
|
|
mv ${newBAKFOLDER} "${newBAKFOLDER}-M"
|
|
ln -s "${newBAKFOLDER}-M" "${newBAKFOLDER}-D"
|
|
elif [ "$(date +%u)" == "${DOW}" ]; then
|
|
mv ${newBAKFOLDER} "${newBAKFOLDER}-W"
|
|
ln -s "${newBAKFOLDER}-W" "${newBAKFOLDER}-D"
|
|
else
|
|
mv ${newBAKFOLDER} "${newBAKFOLDER}-D"
|
|
fi
|
|
|
|
dailyfilestokeep=(`ls -d ${BAKFOLDER}/*-D 2> /dev/null | tail -${DailyBackupsToKeep}`)
|
|
weeklyfilestokeep=(`ls -d ${BAKFOLDER}/*-W 2> /dev/null | tail -${WeeklyBackupsToKeep}`)
|
|
monthlyfilestokeep=(`ls -d ${BAKFOLDER}/*-M 2> /dev/null | tail -${MonthlyBackupsToKeep}`)
|
|
for folder in $(ls -d ${BAKFOLDER}/*); do
|
|
if [ "${folder}" != "${BAKFOLDER}/mounted" ]; then
|
|
if [[ "${folder}" == *"-D"* ]]; then
|
|
filestokeep=${dailyfilestokeep[@]}
|
|
elif [[ "${folder}" == *"-W"* ]]; then
|
|
filestokeep=${weeklyfilestokeep[@]}
|
|
elif [[ "${folder}" == *"-M"* ]]; then
|
|
filestokeep=${monthlyfilestokeep[@]}
|
|
fi
|
|
keep=0
|
|
for file in ${filestokeep}; do
|
|
if [ "${folder}" == "${file}" ]; then
|
|
keep=1; break
|
|
fi
|
|
done;
|
|
[ $keep == 0 ] && delFolder="D:\\Offsite-pfSense_Backups\\${folder##*/}" && ssh backup@10.10.1.60 rmdir "${delFolder}"
|
|
fi
|
|
done
|
|
else
|
|
SENDNOTICE "Offsite pfSense Backup Failed" "Could not contact 'pfSense @ ${OFFSITE_PFSENSE_IP}' for backup" 1
|
|
fi
|
|
}
|
|
|
|
RUN_COMMAND(){
|
|
echo "${1} ${2} ${3} ${4} ${5} ${6} ${7} ${8} ${9} ${10} ${11} ${12} ${13} ${14}"
|
|
for NTYPE in "${NM_NODE_TYPES[@]}"; do
|
|
echo -e "${idsST[Bold]}"; DIVIDER
|
|
RUNCMD=''
|
|
for i in {1..14}; do
|
|
[ "${i}" != "1" ] && [ "${!i}" != "" ] && RUNCMD="${RUNCMD} "
|
|
[ "${!i}" != "" ] && RUNCMD="${RUNCMD}${!i}"
|
|
done
|
|
echo -e "${idsCL[Yellow]} ${NM_NODETYPES[$NTYPE]}-Nodes to run command { \`${RUNCMD}\` }${idsCL[Default]}"
|
|
DIVIDER; echo -e "${idsST[Reset]}"
|
|
|
|
var=${NTYPE}_HOSTS[@]
|
|
for nip in "${!var}"; do
|
|
if [[ ${RUN_NODE_IP} == *"${nip}"* ]]; then NCMD=''; LH='- localhost'
|
|
else NCMD="ssh -o ConnectTimeout=3 root@${nip}"; LH=''
|
|
fi
|
|
echo -e " ${idsST[Bold]}${idsCL[LightCyan]}${NM_HOSTNAMES[${nip}]}[${nip}]${idsST[Reset]}${idsCL[LightCyan]} ${idsCL[LightYellow]}${LH}${idsCL[Default]}"
|
|
DIVIDER false green
|
|
#echo "Running command: ${NCMD} ${RUNCMD}"
|
|
${NCMD} "${RUNCMD}"
|
|
DIVIDER false green
|
|
echo
|
|
done
|
|
echo
|
|
done
|
|
}
|
|
|
|
DOWNLIST(){
|
|
declare -i cw; declare -i spc1; declare -i c
|
|
DOWN_LIST=`find ${NM_TMPFOLDER}/ -iname "*.down"`
|
|
IFS=$'\n'
|
|
read -rd '' -a DOWN_LIST <<<"${DOWN_LIST}"
|
|
unset IFS
|
|
if [ "${1}" == "report" ]; then
|
|
unset idsCL idsBG idsST
|
|
idsCL=('')
|
|
idsBG=('')
|
|
idsST=('')
|
|
DOWNLIST=()
|
|
for dli in "${DOWN_LIST[@]}"; do
|
|
[ ! -f ${dli//.down/.disable} ] && DOWNLIST+=(${dli})
|
|
done
|
|
else
|
|
DOWNLIST=(${DOWN_LIST[@]})
|
|
fi
|
|
|
|
if [ -z ${NMG_ACTION} ] || [ "${NMG_ACTION}" = "gui" ]; then
|
|
DIVIDER true
|
|
fi
|
|
echo
|
|
|
|
if [ "${DOWNLIST}" == "" ]; then
|
|
[ "${1}" == "report" ] && exit 0
|
|
echo -e "${idsCL[LightCyan]}Nothing is down. Hooray for you!!${idsCL[Default]}"
|
|
|
|
echo -en "\nWanna see something great for being so awesome? (y/N) "
|
|
read -n1 great
|
|
if [ "${great^^}" == "Y" ]; then
|
|
function nicetry {
|
|
echo -e " LOL nice try... you can't stop this shit! DESTROY DESTROY DESTROY"
|
|
echo -en "Continue formatting local volumes faster."
|
|
for i in {1..5000}; do
|
|
sleep 0.2
|
|
echo -en "."
|
|
done
|
|
echo -e "\n\nAwww, were you expecting some big ending :*("
|
|
}
|
|
trap nicetry EXIT
|
|
echo -en "\n\nDiscovering local storage volumes ."
|
|
sleep 1s; echo -en " ."
|
|
sleep 2s; echo -en " ."
|
|
sleep 1s; echo -en " ."
|
|
sleep 2s; echo -e " Done\n"
|
|
sleep 1s; echo -en "Formatting local volumes."
|
|
for i in {1..5000}; do
|
|
sleep 2s; echo -en "."
|
|
done
|
|
fi
|
|
|
|
else
|
|
[ "${1}" == "report" ] && dlen=100 || dlen=110
|
|
echo -e "${idsCL[LightGreen]}Current List of Items Down...${idsCL[Default]}"
|
|
DIVIDER false yellow ${dlen}
|
|
if [ "${1}" == "report" ]; then
|
|
echo -e "${idsCL[Yellow]}[Type] [Host/Service/Docker Name] [Host] [Down_Time]${idsCL[Default]}"
|
|
else
|
|
echo -e "${idsCL[Yellow]} [Type] [Host/Service/Docker Name] [Host] [Down_Time] [Notifications]${idsCL[Default]}"
|
|
fi
|
|
DIVIDER false yellow ${dlen}
|
|
|
|
until [ "${choice^^}" = "E" ]; do
|
|
cw=35; cw1=11; cw2=20; is=1;
|
|
for downitem in ${DOWNLIST[@]}; do
|
|
ditem=${downitem##*/}
|
|
ditem=${ditem//.down}
|
|
host=${ditem%%~*}
|
|
item=${ditem#*~}; item=${item/.repl/}
|
|
# echo "HERE: ${ditem} - ${host} - ${item}"
|
|
|
|
if [[ ${ditem} == *"~"* ]] && [[ ${ditem} == *".repl"* ]] && [ "${NM_REPL_DESC[${item}]}" != "" ]; then
|
|
itemname=${NM_REPL_DESC[${item}]}
|
|
itemtype=SYNC
|
|
|
|
elif [[ ${ditem} == *"~"* ]] && [ "${NM_SERVICE_DESC[${item}]}" != "" ]; then
|
|
itemname=${NM_SERVICE_DESC[${item}]}
|
|
itemtype=SERVICE
|
|
|
|
elif [[ ${ditem} == *"~"* ]] && [ "${NM_DOCKER_DESC[${item}]}" != "" ]; then
|
|
itemname=${NM_DOCKER_DESC[${item}]}
|
|
itemtype=DOCKER
|
|
|
|
elif [ "${NM_HOSTNAMES[${host}]}" != "" ]; then
|
|
itemname=${NM_HOSTNAMES[${host}]}
|
|
itemtype=HOST
|
|
|
|
else
|
|
itemname="${item} DOWN";
|
|
itemtype=""
|
|
[ "${NM_HOSTNAMES[${host}]}" != "" ] && itemname="${itemname}: ${NM_HOSTNAMES[${host}]}"
|
|
fi
|
|
|
|
if [ -f ${NM_TMPFOLDER}/${ditem}.errtime ]; then
|
|
toterrtime=$(expr $(date +%s) - $(stat -c %Y ${NM_TMPFOLDER}/${ditem}.errtime))
|
|
else
|
|
toterrtime=$(expr $(date +%s) - $(stat -c %Y ${NM_TMPFOLDER}/${ditem}.down))
|
|
fi
|
|
|
|
c=0; spc=''; spc1=`expr ${cw} - ${#itemname}`; until [ $c = ${spc1} ]; do spc="${spc} "; c=`expr $c + 1`; done
|
|
c=0; spca=''; spc1=`expr ${cw1} - ${#itemtype}`; until [ $c = ${spc1} ]; do spca="${spca} "; c=`expr $c + 1`; done
|
|
c=0; spc2=''; spc1=`expr ${cw2} - ${#host}`; until [ $c = ${spc1} ]; do spc2="${spc2} "; c=`expr $c + 1`; done
|
|
time=$(SHOW_TIME ${toterrtime})
|
|
if [ "${1}" == "report" ]; then
|
|
echo -e "${idsCL[LightRed]}${itemtype}${spca}${itemname}${spc}${host}${spc2}${time}${idsCL[Default]}"
|
|
else
|
|
if [ "${choice}" -gt 0 ] 2>/dev/null && [ ${is} -eq ${choice} ]; then
|
|
[ ! -f ${NM_TMPFOLDER}/${ditem}.disable ] && touch ${NM_TMPFOLDER}/${ditem}.disable || rm -f ${NM_TMPFOLDER}/${ditem}.disable
|
|
fi
|
|
|
|
[ ${is} -lt 10 ] && ignsel=" ${is}) " || ignsel="${is}) "
|
|
[ -f ${NM_TMPFOLDER}/${ditem}.disable ] && dstatus="OFF" || dstatus="${idsCL[Green]}ON"
|
|
c=0; spc3=''; until [ $c = `expr 26 - ${#time}` ]; do spc3="${spc3} "; ((c++)); done
|
|
echo -e "\033[K${idsCL[LightRed]}${idsST[Bold]}${ignsel}${idsST[Reset]}${idsCL[LightRed]}${itemtype}${spca}${itemname}${spc}${host}${spc2}${time}${spc3}${dstatus}${idsCL[Default]}"
|
|
fi
|
|
|
|
DIVIDER false darkGray ${dlen}
|
|
((is++))
|
|
done
|
|
|
|
if [ "${1}" != "report" ]; then
|
|
echo -en "\n\033[K${idsCL[LightCyan]}Enter # to change notifications [${idsCL[Default]}(${idsCL[LightYellow]}E${idsCL[Default]})xit${idsCL[LightCyan]}] : ${idsCL[Default]}"
|
|
read choice
|
|
else
|
|
choice=E
|
|
fi
|
|
[ "${choice^^}" == "E" ] && break
|
|
|
|
echo -e "\033[$(echo "scale=1; (${#DOWNLIST[@]}*2)+3" | bc)A"
|
|
for (( c=1; c<$(echo "scale=1; (${#DOWNLIST[@]}*2)+3" | bc); c++ )); do echo -e "\033[K"; done
|
|
echo -e "\033[$(echo "scale=1; (${#DOWNLIST[@]}*2)+3" | bc)A"
|
|
|
|
done
|
|
echo
|
|
|
|
fi
|
|
if [ -z ${NMG_ACTION} ] || [ "${NMG_ACTION}" = "gui" ]; then
|
|
DIVIDER true
|
|
ENTER2CONTINUE
|
|
fi
|
|
echo
|
|
}
|
|
|
|
MAINTENANCE_MODE(){
|
|
if [ "${1}" ] && [ "${NM_NODETYPES[${1^^}]}" != "" ]; then
|
|
ntypesel=(${1^^})
|
|
MM_ACTION=${2}
|
|
else
|
|
ntypesel=(${NM_NODE_TYPES[@]})
|
|
MM_ACTION=${1}
|
|
fi
|
|
|
|
PRI_CW=40
|
|
DV_LEN=70
|
|
declare -i cw; declare -i spc1; declare -i c
|
|
until [ "${choice^^}" = "E" ]; do
|
|
item_number=1
|
|
|
|
for NTYPE in "${ntypesel[@]}"; do
|
|
srvcs=${NTYPE}_SERVICES_CHECK[@];
|
|
dockers=${NTYPE}_DOCKERS_CHECK[@]
|
|
hosts=${NTYPE}_HOSTS[@]
|
|
repls=${NTYPE}_REPL_CHECK[@]
|
|
|
|
if ([[ ! -v ${NTYPE}_DOCKERS_CHECK ]] && [ "${MM_ACTION}" == "dockers" ]) || ([ "${NM_SERVICES_CHECK[${NTYPE}]}" == "" ] && [ "${MM_ACTION}" == "services" ]); then
|
|
GOFORCHECK=false;
|
|
else
|
|
GOFORCHECK=true;
|
|
fi
|
|
|
|
if [ ${GOFORCHECK} = true ]; then
|
|
|
|
echo -en "${idsST[Bold]}"; DIVIDER . lightYellow ${DV_LEN}
|
|
echo -e "${idsCL[LightYellow]} ${NM_NODETYPES[$NTYPE]}-Node Status Checks${idsCL[Default]}"
|
|
DIVIDER . lightYellow ${DV_LEN}; echo -en "${idsST[Reset]}"
|
|
|
|
for nip in "${!hosts}"; do
|
|
if [ ${item_number} -lt 10 ]; then isel=" ${item_number})"; elif [ ${item_number} -lt 100 ]; then isel=" ${item_number})"; else isel=" ${item_number})"; fi
|
|
MSG="${NM_HOSTNAMES[${nip}]} [${nip}]"
|
|
c=0; spc=''; spc1=`expr ${PRI_CW} + 4 - ${#MSG}`; until [ $c = ${spc1} ]; do spc="${spc} "; c=`expr $c + 1`; done
|
|
echo -en "${idsCL[LightYellow]}${isel} ${idsST[Bold]}${idsCL[LightCyan]}${MSG}${idsST[Reset]}${spc}${idsCL[Default]}: "
|
|
|
|
if [ "${choice}" -gt 0 ] 2>/dev/null && [ ${item_number} -eq ${choice} ]; then
|
|
[ ! -f ${NM_TMPFOLDER}/${nip}.disable ] && touch ${NM_TMPFOLDER}/${nip}.disable || rm -f ${NM_TMPFOLDER}/${nip}.disable
|
|
fi
|
|
[ -f ${NM_TMPFOLDER}/${nip}.disable ] && dstatus="${idsCL[LightRed]}OFF" || dstatus="${idsCL[Green]}ON"
|
|
|
|
echo -e "${dstatus}${idsCL[Default]}"
|
|
((item_number++))
|
|
DIVIDER false lightCyan ${DV_LEN}
|
|
|
|
|
|
########################
|
|
## SERVICES CHECK
|
|
########################
|
|
if [ "${MM_ACTION}" != "dockers" ] && [ "${NM_SERVICES_CHECK[${NTYPE}]}" != "" ]; then
|
|
echo -e "${idsCL[Green]} System Service(s)${idsCL[Default]}"
|
|
DIVIDER . green ${DV_LEN}
|
|
|
|
for srvc in "${!srvcs}"; do
|
|
if [ ${item_number} -lt 10 ]; then isel=" ${item_number})"; elif [ ${item_number} -lt 100 ]; then isel=" ${item_number})"; else isel=" ${item_number})"; fi
|
|
c=0; spc=''; spc1=`expr ${PRI_CW} - ${#NM_SERVICE_DESC[${srvc}]}`; until [ $c = ${spc1} ]; do spc="${spc} "; c=`expr $c + 1`; done
|
|
echo -en "${idsCL[LightYellow]}${isel} ${idsCL[White]}${NM_SERVICE_DESC[${srvc}]}${spc}${idsCL[Default]}: "
|
|
|
|
if [ "${choice}" -gt 0 ] 2>/dev/null && [ ${item_number} -eq ${choice} ]; then
|
|
[ ! -f ${NM_TMPFOLDER}/${nip}~${srvc}.disable ] && touch ${NM_TMPFOLDER}/${nip}~${srvc}.disable || rm -f ${NM_TMPFOLDER}/${nip}~${srvc}.disable
|
|
fi
|
|
[ -f ${NM_TMPFOLDER}/${nip}~${srvc}.disable ] && dstatus="${idsCL[LightRed]}OFF" || dstatus="${idsCL[Green]}ON"
|
|
|
|
echo -e "${dstatus}${idsCL[Default]}"
|
|
((item_number++))
|
|
done
|
|
|
|
fi
|
|
|
|
########################
|
|
## DOCKER CHECK
|
|
########################
|
|
if [[ -v ${NTYPE}_DOCKERS_CHECK ]] && [ "${MM_ACTION}" != "services" ]; then
|
|
[ "${MM_ACTION}" == "" ] && [ "${NM_SERVICES_CHECK[${NTYPE}]}" != "" ] && echo
|
|
echo -e "${idsCL[Green]} Docker Service(s)${idsCL[Default]}"
|
|
DIVIDER . green ${DV_LEN}
|
|
|
|
for docker in "${!dockers}"; do
|
|
if [ ${item_number} -lt 10 ]; then isel=" ${item_number})"; elif [ ${item_number} -lt 100 ]; then isel=" ${item_number})"; else isel=" ${item_number})"; fi
|
|
c=0; spc=''; spc1=`expr ${PRI_CW} - ${#NM_DOCKER_DESC[${docker}]}`; until [ $c = ${spc1} ]; do spc="${spc} "; c=`expr $c + 1`; done
|
|
echo -en "${idsCL[LightYellow]}${isel} ${idsCL[White]}${NM_DOCKER_DESC[${docker}]}$spc${idsCL[Default]}: "
|
|
|
|
if [ "${choice}" -gt 0 ] 2>/dev/null && [ ${item_number} -eq ${choice} ]; then
|
|
[ ! -f ${NM_TMPFOLDER}/${nip}~${docker}.disable ] && touch ${NM_TMPFOLDER}/${nip}~${docker}.disable || rm -f ${NM_TMPFOLDER}/${nip}~${docker}.disable
|
|
fi
|
|
[ -f ${NM_TMPFOLDER}/${nip}~${docker}.disable ] && dstatus="${idsCL[LightRed]}OFF" || dstatus="${idsCL[Green]}ON"
|
|
|
|
echo -e "${dstatus}${idsCL[Default]}"
|
|
((item_number++))
|
|
done
|
|
fi
|
|
echo
|
|
done
|
|
|
|
fi
|
|
|
|
########################
|
|
## REPLICATION CHECK
|
|
########################
|
|
|
|
if ([ "${STATUS_ACTION}" == "repl" ] || [ "${STATUS_ACTION}" == "" ]) && [ ! -z ${!repls+x} ]; then
|
|
if [ "${MM_ACTION}" != "check" ]; then
|
|
echo -e "${idsST[Bold]}${idsCL[LightCyan]} ${NM_NODETYPES[${NTYPE}]} Replication Check(s)${idsST[Reset]}${idsCL[Default]}"
|
|
DIVIDER . lightCyan ${DV_LEN}
|
|
fi
|
|
PH=${NTYPE}_HOSTS[0]
|
|
PH_CMD="ssh root@${!PH}"
|
|
var2=${NTYPE}_HOSTS[@]
|
|
for nip in "${!hosts}"; do
|
|
echo -e " ${idsCL[Green]}${NM_HOSTNAMES[${!PH}]}[${!PH}] <--> ${idsST[Bold]}${NM_HOSTNAMES[${nip}]}[${nip}]${idsST[Reset]}${idsCL[Default]}"
|
|
DIVIDER . green ${DV_LEN}
|
|
for rcheck in "${!repls}"; do
|
|
if [ ${item_number} -lt 10 ]; then isel=" ${item_number})"; elif [ ${item_number} -lt 100 ]; then isel=" ${item_number})"; else isel=" ${item_number})"; fi
|
|
c=0; spc=''; spc1=`expr ${PRI_CW} - ${#NM_REPL_DESC[${rcheck}]}`; until [ $c = ${spc1} ]; do spc="${spc} "; c=`expr $c + 1`; done
|
|
echo -en "${idsCL[LightYellow]}${isel} ${idsCL[White]}${NM_REPL_DESC[${rcheck}]}${spc}${idsCL[Default]}: "
|
|
|
|
if [ "${choice}" -gt 0 ] 2>/dev/null && [ ${item_number} -eq ${choice} ]; then
|
|
[ ! -f ${NM_TMPFOLDER}/${nip}~${rcheck}.repl.disable ] && touch ${NM_TMPFOLDER}/${nip}~${rcheck}.repl.disable || rm -f ${NM_TMPFOLDER}/${nip}~${rcheck}.repl.disable
|
|
fi
|
|
[ -f ${NM_TMPFOLDER}/${nip}~${rcheck}.repl.disable ] && dstatus="${idsCL[LightRed]}OFF" || dstatus="${idsCL[Green]}ON"
|
|
|
|
echo -e "${dstatus}${idsCL[Default]}"
|
|
((item_number++))
|
|
done
|
|
echo
|
|
done
|
|
fi
|
|
echo
|
|
done
|
|
|
|
echo -en "\n\033[K${idsCL[LightCyan]}Enter # to change notifications [${idsCL[Default]}(${idsCL[LightYellow]}E${idsCL[Default]})xit${idsCL[LightCyan]}] : ${idsCL[Default]}"
|
|
read choice
|
|
[ "${choice^^}" == "E" ] && break
|
|
|
|
done
|
|
|
|
echo
|
|
|
|
}
|
|
|
|
SETUPSSH(){
|
|
echo -e "\n${idsST[Bold]}${idsCL[LightCyan]}Beginning SSH verifiication, you may get prompted for crednetials along the way\n"
|
|
for NTYPE in "${NM_NODE_TYPES[@]}"; do
|
|
echo -e "${idsST[Bold]}"; DIVIDER
|
|
echo -e "${idsCL[Yellow]} ${NM_NODETYPES[$NTYPE]}-Nodes - Verifying SSH Connection${idsCL[Default]}"
|
|
DIVIDER; echo -e "${idsST[Reset]}"
|
|
var=${NTYPE}_HOSTS[@]
|
|
for nip in "${!var}"; do
|
|
if [[ ${RUN_NODE_IP} != *"${nip}"* ]]; then
|
|
echo -e " ${idsST[Bold]}${idsCL[LightCyan]}${NM_HOSTNAMES[${nip}]}[${nip}]${idsST[Reset]}${idsCL[Default]}"
|
|
DIVIDER . lightCyan 40
|
|
if [ ! -f ${NM_TMPFOLDER}/${nip}.down ]; then
|
|
echo -en "\n${idsCL[LightCyan]}Checking for Public SSH Key ... ${idsCL[Default]}"
|
|
if [ "$(ssh -o BatchMode=yes -o ConnectTimeout=3 root@${nip} echo ok 2>&1)" == "ok" ]; then
|
|
echo -e "${idsCL[Green]}Already Installed${idsCL[Default]}"
|
|
else
|
|
echo -e "${idsCL[Yellow]}Copying to Host ...${idsCL[Default]}"
|
|
ssh-copy-id root@${nip}
|
|
fi
|
|
|
|
echo -en "\n${idsCL[LightCyan]}Verifying NodeMgmt ... ${idsCL[Default]}"
|
|
NODEUPDATE ${nip} verify "ssh"
|
|
|
|
else
|
|
echo -e "\n${idsCL[Yellow]}Host is offline${idsCL[Default]}"
|
|
fi
|
|
echo
|
|
fi
|
|
done
|
|
echo
|
|
done
|
|
|
|
for hostid in "${!host_ip[@]}"; do
|
|
checkhost=$(CHECK_HOST ${host_ip[$hostid]})
|
|
if [ "${checkhost}" != "false" ]; then
|
|
echo -e "${idsST[Bold]}${idsCL[LightCyan]} ${host_name[$hostid]} - SSH KEY COPY${idsCL[Default]}${idsST[Reset]}"
|
|
ssh-copy-id root@${host_ip[$hostid]}
|
|
fi
|
|
done
|
|
}
|
|
|
|
BETACHECK(){
|
|
[ "$(curl -sL https://git.schroedercity.com/voltron/NodeMgmt/raw/branch/master/defaults.inc | grep NM_BETA=true)" != "" ] && echo true || echo false
|
|
}
|
|
|
|
GUI(){
|
|
DISP_HEADER true false
|
|
while :
|
|
do
|
|
echo " [1] Node Status"
|
|
echo " [2] Node Services"
|
|
echo
|
|
echo " [3] New Site"
|
|
echo " [4] Delete Site"
|
|
echo
|
|
echo " [5] New Certificate"
|
|
echo " [6] Renew Certificates"
|
|
echo " [7] List Certificates"
|
|
echo
|
|
echo " [8] Set folder permissions on nodes"
|
|
echo " [9] Backup Node Settings and Files"
|
|
echo
|
|
echo " [D] Update Primary DNS Records"
|
|
echo " [R] Add cron task to rotate wtmp & btmp log files"
|
|
echo
|
|
echo " [Q] Quit"
|
|
echo
|
|
echo
|
|
echo -e -n "${idsCL[LightYellow]}Please select an [ActionItem] from above:${idsCL[Default]} "
|
|
read -n 1 opt
|
|
echo
|
|
case $opt in
|
|
1) STATUS; GUI;;
|
|
2) SERVICES; GUI;;
|
|
3) NEWSITE; GUI;;
|
|
4) DELSITES; GUI;;
|
|
5) NEWCERT; GUI;;
|
|
6) CERTRENEW; GUI;;
|
|
7) LISTCERTS; GUI;;
|
|
8) SET-PERMISSIONS; GUI;;
|
|
9) BACKUP; GUI;;
|
|
[Dd]) UPDATE_DYNDNS; GUI;;
|
|
[Rr]) ADD_LOGROTATE_CRONTAB; GUI;;
|
|
[Qq]) EXIT1
|
|
exit 0;;
|
|
*) echo "Thats an invaild option,";
|
|
echo "please select a valid option only.";
|
|
sleep 1;;
|
|
esac
|
|
done
|
|
}
|
|
# if [ ${action-x} ]; then
|
|
if [[ "${noheader}" != *" ${1} "* ]] && [[ "${noheader}" != *" ${2} "* ]] && [[ "${noheader}" != *" ${3} "* ]] && [ "${2}" != "q" ] && [ "${3}" != "q" ]; then
|
|
DISP_HEADER
|
|
fi
|
|
case ${NMG_ACTION} in
|
|
newcert) NEWCERT ${2} ${3};;
|
|
certrenew) CERTRENEW;;
|
|
delcert) DEL-SSL ${2};;
|
|
certs) LISTCERTS ${2} ${3} ${4} ${5} ${6};;
|
|
listcerts-npm) LISTCERTS_NPM;;
|
|
copynpmcerts) COPYCERTS_NPM ${2};;
|
|
checknpmcerts) CHECK_NPMCERTS;;
|
|
checkcerts) CHECK-CERTS ${2} ${3} ${4} ${5} ${6};;
|
|
nightlyrenew)
|
|
if [ "${2}" == "q" ]; then
|
|
exec 3>&1 >>${NM_LOGFOLDER}/cert-renewal.lastrun 2>&1
|
|
echo "$(date +%Y-%m-%d-%H-%M-%S) #### Nightly Cert Renewal check Initiated ####"
|
|
mv -f ${NM_LOGFOLDER}/cert-renewal1.lastrun ${NM_LOGFOLDER}/cert-renewal2.lastrun
|
|
mv -f ${NM_LOGFOLDER}/cert-renewal.lastrun ${NM_LOGFOLDER}/cert-renewal1.lastrun
|
|
fi
|
|
${NM_SCRIPT} nightlyrenew report
|
|
echo -e "\n$(date +%Y-%m-%d-%H-%M-%S)"
|
|
;;
|
|
delsite) DELSITE ${2} ${3} ${4} ${5};;
|
|
delsites) DELSITES;;
|
|
newsite) NEWSITE ${2} ${3} ${4} ${5} ${6} ${7} ${8} ${9} ${10} ${11} ${12} ${13} ${14} ${15} ${16} ${17} ${18} ${19} ${20} ${21} ${22} ${23} ${24} ${25};;
|
|
sites) SITEINFO ${2} ${3} ${4} ${5} ${6};;
|
|
|
|
update) ;;
|
|
update-nodes)
|
|
if [ "${2}" == "report" ]; then
|
|
[ "${3}" == "sync" ] && ufile=update-nodes-sync.lastrun || ufile=update-nodes.lastrun
|
|
rm -f ${NM_LOGFOLDER}/${ufile}
|
|
NODEUPDATES ${2} ${3} > ${NM_LOGFOLDER}/${ufile}
|
|
else
|
|
NODEUPDATES ${2} ${3}
|
|
fi
|
|
;;
|
|
setupssh) SETUPSSH ${2} ${3} ${4} ${5} ${6};;
|
|
betacheck) BETACHECK;;
|
|
update-dyndns) UPDATE_DYNDNS ${2} ${3} ${4} ${5} ${6};;
|
|
backup) BACKUP;;
|
|
dl|downlist)
|
|
if [ "${2}" = "report" ]; then
|
|
if [ "$(find ${NM_FOLDER} -name '*.down')" != "" ]; then
|
|
rm -f ${NM_LOGFOLDER}/status-downlist.lastrun
|
|
DOWNLIST report >> ${NM_LOGFOLDER}/status-downlist.lastrun
|
|
STATUSLOG="$(cat ${NM_LOGFOLDER}/status-downlist.lastrun)"
|
|
SENDNOTICE "Downlist Report" "Downlist Report\n${STATUSLOG}"
|
|
fi
|
|
else
|
|
DOWNLIST ${2}
|
|
fi;;
|
|
mm) MAINTENANCE_MODE ${2} ${3};;
|
|
status)
|
|
if [ "${2}" == "freespace" ]; then
|
|
STATUS freespace ${3}
|
|
else
|
|
if [ ! -f ${NM_TMPFOLDER}/.statusclean ] || [ $(expr $(date +%s) - $(stat -c %Y ${NM_TMPFOLDER}/.statusclean)) -ge 900 ]; then
|
|
for oldstatus_check in ${NM_TMPFOLDER}/status-*; do
|
|
[ -d "${oldstatus_check}" ] && rm -Rf ${oldstatus_check}
|
|
done
|
|
touch ${NM_TMPFOLDER}/.statusclean
|
|
fi
|
|
STATUSRUNS=($(find ${NM_TMPFOLDER}/* -maxdepth 1 -type d -iname "status-*" 2>/dev/null))
|
|
if [ "${2}" == "-h" ] || [ "${2}" == "-help" ]; then
|
|
echo -e "Usage: ${idsCL[Yellow]}[nodemgmt or nmg] status {status-check}${idsCL[Default]} {"
|
|
width=25
|
|
printf "%-${width}s- %s\n" " {status-check}" "By default will check everything, otherwise specifically specify item to check:"
|
|
printf "%-${width}s- %s\n" " services" "Will verify status of all node services"
|
|
printf "%-${width}s- %s\n" " dockers" "Will verify status of all node dockers"
|
|
printf "%-${width}s- %s\n" " repl" "Will verify status of all node replications"
|
|
echo -e "}\n"
|
|
exit 0
|
|
else
|
|
if [ ${#STATUSRUNS[@]} -lt 3 ]; then
|
|
STATUS_START=$(date +%Y-%m-%d-%H-%M-%S)
|
|
STATUSRUN_TMPFOLDER="${NM_TMPFOLDER}/status-${STATUS_START}"
|
|
mkdir ${STATUSRUN_TMPFOLDER}
|
|
touch "${STATUSRUN_TMPFOLDER}/status-check.running"
|
|
rm -f ${NM_TMPFOLDER}/.overload
|
|
|
|
if [ "${2}" == "report" ]; then
|
|
echo "${STATUS_START} - LOCAL - ${NODE_HOSTNAME} - Starting Status Check" >> ${NM_LOGFILE}
|
|
echo -e "${STATUS_START} - Starting status check #############################\n" > ${STATUSRUN_TMPFOLDER}/status-check.running
|
|
STATUS report ${3} ${4} >> ${STATUSRUN_TMPFOLDER}/status-check.running
|
|
echo -e "\n\n$(date +%Y-%m-%d-%H-%M-%S) - Finished status check #############################\n" >> ${STATUSRUN_TMPFOLDER}/status-check.running
|
|
echo "$(date +%Y-%m-%d-%H-%M-%S) - LOCAL - ${NODE_HOSTNAME} - Completed Status Check" >> ${NM_LOGFILE}
|
|
|
|
rm -f ${NM_LOGFOLDER}/status-check.lastrun
|
|
mv ${STATUSRUN_TMPFOLDER}/status-check.running ${NM_LOGFOLDER}/status-check.lastrun
|
|
|
|
if [ "${3}" == "email" ]; then
|
|
echo -e "\n\n" >> ${NM_LOGFOLDER}/status-check.lastrun
|
|
DOWNLIST report >> ${NM_LOGFOLDER}/status-check.lastrun
|
|
STATUSLOG="$(cat ${NM_LOGFOLDER}/status-check.lastrun)"
|
|
SENDNOTICE "Status Report" "Status Report\n${STATUSLOG}"
|
|
fi
|
|
else
|
|
STATUS ${2} ${3} ${4}
|
|
fi
|
|
rm -Rf ${STATUSRUN_TMPFOLDER}
|
|
|
|
else
|
|
[ "${MM_ACTION}" != "report" ] && echo -e "${idsCL[LightRed]}Whooooaaaaa there cowboy, we got 3 threads running already.... easy killer!${idsCL[Default]}\n"
|
|
if [ ! -f ${NM_TMPFOLDER}/.overload ] || [ $(expr $(date +%s) - $(stat -c %Y ${NM_TMPFOLDER}/.overload)) -ge 600 ]; then
|
|
SENDNOTICE "NODEMGMT OVERLOAD" "Whooooaaaaa there cowboy, we got 3 threads running already.... easy killer!" 1
|
|
touch ${NM_TMPFOLDER}/.overload
|
|
fi
|
|
exit 1
|
|
fi
|
|
fi
|
|
fi;;
|
|
scantimes) STATUS_SCANTIMES ${2} ${3} ${4} ${5};;
|
|
set-permissions) SET-PERMISSIONS ${2};;
|
|
service)
|
|
if [[ ( "${2}" = "giteaxx" ) || ( "${2}" = "powerdns-adminxx" ) ]] && [ "${3}" = "start" ]; then
|
|
#SET-PERMISSIONS ${2}
|
|
SERVICE_MGMT ${2} start
|
|
elif [[ ( "${2}" = "giteaxx" ) || ( "${2}" = "powerdns-adminxx" ) ]] && [ "${3}" = "restart" ]; then
|
|
SERVICE_MGMT ${2} stop
|
|
#SET-PERMISSIONS ${2}
|
|
SERVICE_MGMT ${2} start
|
|
elif [ "${2}" = "web" ]; then
|
|
SERVICE_MGMT php5.6-fpm ${3} ${4} ${5} ${6} ${7} ${8}
|
|
SERVICE_MGMT php7.2-fpm ${3} ${4} ${5} ${6} ${7} ${8}
|
|
SERVICE_MGMT php7.3-fpm ${3} ${4} ${5} ${6} ${7} ${8}
|
|
SERVICE_MGMT php7.4-fpm ${3} ${4} ${5} ${6} ${7} ${8}
|
|
SERVICE_MGMT php8.2-fpm ${3} ${4} ${5} ${6} ${7} ${8}
|
|
SERVICE_MGMT nginx ${3} ${4}
|
|
elif [ "${2}" = "glusterdxx" ]; then
|
|
SERVICE_MGMT glusterd stop
|
|
else
|
|
SERVICE_MGMT ${2} ${3} ${4} ${5} ${6} ${7} ${8}
|
|
fi;;
|
|
singleservercheck) SINGLE_SERVER_SERVICE_CHECK ${2} ${3} ${4} ${5} ${6};;
|
|
haproxy-config) HAPROXY-CONFIG;;
|
|
keepalive-config) KEEPALIVE-CONFIG;;
|
|
vc-ssl)
|
|
if [ "${2,,}" == "log" ] || [ "${3,,}" == "log" ]; then
|
|
exec 3>&1 >>${NM_LOGFOLDER}/vc-ssl.log 2>&1
|
|
echo "$(date +%Y-%m-%d-%H-%M-%S) #### vCenter Update Initiated ####"
|
|
${NM_SCRIPT} vc-ssl report
|
|
echo "$(date +%Y-%m-%d-%H-%M-%S) #### vCenter Update Completed ####
|
|
"
|
|
else
|
|
VCENTER-SSL ${2,,}
|
|
fi
|
|
;;
|
|
run) RUN_COMMAND ${2} ${3} ${4} ${5} ${6} ${7} ${8} ${9} ${10} ${11} ${12} ${13} ${14} ${15};;
|
|
backup-offsitepfsense) BACKUP_OFFSITEPFSENSE;;
|
|
|
|
test)
|
|
tmp=tmp
|
|
;;
|
|
|
|
nginxupdate)
|
|
echo
|
|
for nfile in ${NM_NGINXPATH}/sites-enabled/*.conf; do
|
|
echo -en "Converting site: ${nfile##*/} ... "
|
|
mv -f ${nfile} ${NM_NGINXPATH}/sites-available/${nfile##*/}
|
|
ln -s ${NM_NGINXPATH}/sites-available/${nfile##*/} ${nfile}
|
|
echo "Done"
|
|
done
|
|
SERVICE_MGMT nginx restart
|
|
;;
|
|
|
|
gui) GUI;;
|
|
*)
|
|
echo -e "${idsCL[Yellow]}Commands followed by '-h' will show specific command help. {work-in-progress}${idsCL[Default]}"
|
|
echo
|
|
echo -e "Usage: ${idsCL[LightCyan]}[nodemgmt or nmg] ${idsCL[Yellow]}{COMMAND} ${idsCL[LightYellow]}{FLAGS}${idsCL[Default]} {"
|
|
echo
|
|
echo -e " ${idsCL[Yellow]}sites${idsCL[Default]} - Manage NGINX Sites"
|
|
echo -e " ${idsCL[Yellow]}newsite${idsCL[Default]} - Create a New Site"
|
|
echo -e " ${idsCL[Yellow]}delcert${idsCL[Default]} - Delete a Site"
|
|
echo
|
|
echo -e " ${idsCL[Yellow]}certs${idsCL[Default]} - Manage SSL Certificates"
|
|
echo -e " ${idsCL[Yellow]}newcert${idsCL[Default]} - Generate New SSL Certificate"
|
|
echo -e " ${idsCL[Yellow]}delcert${idsCL[Default]} - Delete SSL Certificate"
|
|
echo
|
|
echo -e " ${idsCL[Yellow]}certrenew${idsCL[Default]} - Renew all SSL Certificates"
|
|
echo -e " ${idsCL[Yellow]}checkcerts${idsCL[Default]} - Check SSL Expirations on Monitored Certs"
|
|
echo -e " ${idsCL[Yellow]}nightlyrenew${idsCL[Default]} - Renewal of SSL Certs, designed for cron tasks"
|
|
echo -e " ${idsCL[Yellow]}vc-ssl${idsCL[Default]} - Update vCenter SSL"
|
|
echo
|
|
echo -e " ${idsCL[Yellow]}service${idsCL[Default]} - Manage services on all nodes, or nodetypes"
|
|
echo -e " ${idsCL[Yellow]}downlist | dl${idsCL[Default]} - Displays all down services and/or hosts"
|
|
echo -e " ${idsCL[Yellow]}run${idsCL[Default]} - Run a command on all Nodes"
|
|
echo -e " ${idsCL[Yellow]}status${idsCL[Default]} - Check Status of systems"
|
|
echo
|
|
echo -e " ${idsCL[Yellow]}backup${idsCL[Default]} - Run backup of node items"
|
|
echo -e " ${idsCL[Yellow]}haproxy-config${idsCL[Default]} - Push out haproxy config"
|
|
echo -e " ${idsCL[Yellow]}set-permissions${idsCL[Default]} - Set specific permissions preset for app folders"
|
|
echo
|
|
echo -e " ${idsCL[Yellow]}update${idsCL[Default]} - Update nodemgmt"
|
|
echo -e " ${idsCL[Yellow]}update-nodes${idsCL[Default]} - Update nodemgmt on all nodes"
|
|
echo -e " ${idsCL[Yellow]}update-dyndns${idsCL[Default]} - Update DYNDNS records"
|
|
echo
|
|
echo -e "}"
|
|
echo
|
|
echo
|
|
exit 0;;
|
|
esac
|
|
# else
|
|
# GUI
|
|
# fi
|
|
|
|
exit 0
|
|
|