1626 lines
62 KiB
Bash
Executable File
1626 lines
62 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# NodeMgmt - Node Management Scripts
|
|
|
|
NMG_ACTION="${1}"
|
|
|
|
[ "${2}" != "q" ] && 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
|
|
[ -f /opt/idssys/nodemgmt/conf/powerwall/settings.conf ] && source /opt/idssys/nodemgmt/conf/powerwall/settings.conf
|
|
|
|
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
|
|
|
|
[ -f ${NM_BACKUP_FOLDER}/templates/*.config ] && rm -f ${NM_BACKUP_FOLDER}/templates/*.config
|
|
|
|
OFFSITE_STATICROUTE_FIX(){
|
|
if [ ! -f ${NM_TMPFOLDER}/vpn-tunnel.down2 ]; then
|
|
if [ "$(CHECK_HOST_QC 10.10.0.1)" != "true" ]; then
|
|
if [ "$(CHECK_HOST_QC ${NM_OFFSITE_GW_IP})" != "false" ]; then
|
|
if [ "$(CHECK_HOST_QC 10.5.0.1)" != "false" ]; then
|
|
STSVPN_ADAPTER=$(${SSHCMD} root@${NM_OFFSITE_GW_IP} ip r | grep '10.5.0.0/20' | awk '{print $7}')
|
|
if [ "$(${SSHCMD} root@${NM_OFFSITE_GW_IP} ip r | grep 10.10.0.0)" = "" ] && [ "${STSVPN_ADAPTER}" != "" ]; then
|
|
RUN=$(${SSHCMD} root@${NM_OFFSITE_GW_IP} ip r add 10.6.1.0/24 dev ${STSVPN_ADAPTER} 2>&1 >/dev/null)
|
|
RUN=$(${SSHCMD} root@${NM_OFFSITE_GW_IP} ip r add 10.10.0.0/16 dev ${STSVPN_ADAPTER} 2>&1 >/dev/null)
|
|
if [ "${RUN}" == "" ]; then
|
|
SENDNOTICE "Static Route to Homesite Missing" "Re-added the static route onto the Offsite UniFi Gateway"
|
|
else
|
|
SENDNOTICE "ERROR: Static Route to Homesite Missing" "Cannot add the static route onto the Offsite UniFi Gateway" 1
|
|
touch ${NM_TMPFOLDER}/vpn-tunnel.down
|
|
fi
|
|
else
|
|
SENDNOTICE "ERROR: Static Route to Homesite" "The static route exists, but traffic is going nowhere homie" 1
|
|
touch ${NM_TMPFOLDER}/vpn-tunnel.down
|
|
fi
|
|
else
|
|
SENDNOTICE "VPN to Homesite Down" "VPN is down, fix your shit first, then I'll fix mine..." 1
|
|
touch ${NM_TMPFOLDER}/vpn-tunnel.down
|
|
fi
|
|
fi
|
|
if [ -f ${NM_TMPFOLDER}/vpn-tunnel.down ] && [ $(expr `date +%s` - $(stat -c %Y ${NM_TMPFOLDER}/vpn-tunnel.down)) -ge 630 ]; then
|
|
mv ${NM_TMPFOLDER}/vpn-tunnel.down ${NM_TMPFOLDER}/vpn-tunnel.down2
|
|
fi
|
|
else
|
|
if [ -f ${NM_TMPFOLDER}/vpn-tunnel.down ]; then
|
|
SENDNOTICE "VPN to Homesite is Back Up" "VPN Tunnel is up"
|
|
rm -f ${NM_TMPFOLDER}/vpn-tunnel.down*
|
|
fi
|
|
fi
|
|
elif [ $(expr `date +%s` - $(stat -c %Y ${NM_TMPFOLDER}/vpn-tunnel.down2)) -ge 3630 ]; then
|
|
rm -f ${NM_TMPFOLDER}/vpn-tunnel.down2
|
|
touch ${NM_TMPFOLDER}/vpn-tunnel.down
|
|
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="${SSHCMD} 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="${SSHCMD} 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="${SSHCMD} 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="${SSHCMD} 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="${SSHCMD} 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="${SSHCMD} 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="${SSHCMD} 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="${SSHCMD} 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="${SSHCMD} 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="${SSHCMD} 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;
|
|
rm -f /tmp/.nodeupdate.*
|
|
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]}"
|
|
|
|
ncount=0
|
|
for NTYPE in "${NM_NODE_TYPES[@]}"; do
|
|
var=${NTYPE}_HOSTS[@]
|
|
for nip in "${!var}"; do
|
|
if [ ! -f /tmp/.nodeupdate.${NM_HOSTNAMES[${nip}]// /-}.running ]; then
|
|
if [ "${RUN_NODE_IP}" != "${nip}" ]; then
|
|
touch /tmp/.nodeupdate.${NM_HOSTNAMES[${nip}]// /-}.running
|
|
NODEUPDATE "${nip}" "${2}" "${NMCMD}" </dev/null &
|
|
((ncount++))
|
|
fi
|
|
fi
|
|
done
|
|
done
|
|
|
|
nc_count=0; completed=false
|
|
until [ "${completed}" == "true" ]; do
|
|
for nodecmd in /tmp/.nodeupdate.*.done; do
|
|
if [[ "${nodecmd}" != *"*"* ]]; then
|
|
nodecmd_output=$(cat ${nodecmd})
|
|
[ "${nodecmd_output}" != "" ] && echo -e "${nodecmd_output}"
|
|
rm -f ${nodecmd}
|
|
((nc_count++))
|
|
fi
|
|
done
|
|
# if [ ${nc_count} -eq ${ncount} ] || [ ! -f /tmp/.nodeupdate.*.done ]; then
|
|
if [ ${nc_count} -eq ${ncount} ]; then
|
|
completed=true
|
|
break
|
|
fi
|
|
sleep 2s
|
|
done
|
|
|
|
echo -e "\n${idsCL[Green]}All Nodes have been Updated.${idsCL[Default]}"
|
|
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="${SSHCMD} root@${nip}"
|
|
NODE="${NM_HOSTNAMES[${nip}]} [${nip}]"
|
|
tmpfile=/tmp/.nodeupdate.${NM_HOSTNAMES[${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}" >> ${tmpfile}.running
|
|
fi
|
|
betacheck=$(BETACHECK)
|
|
|
|
if [ "${nip}" != "100.100.2.1" ] && [ "${nip}" != "${NM_OFFSITE_GW_IP}" ] && [ ! -f ${NM_TMPFOLDER}/${nip}.down ] && [ "$(CHECK_HOST ${nip})" != "false" ]; then
|
|
if [ "${betacheck}" == "false" ]; then
|
|
if [ "${2}" != "sync" ]; then
|
|
if [ "$(ssh -o BatchMode=yes -o ConnectTimeout=3 root@${nip} echo ok 2>&1)" != "ok" ]; then
|
|
echo -e "${idsCL[Yellow]}[${nip}] New server, needs SSH credentials${idsCL[Default]}"
|
|
ssh-copy-id root@${nip}
|
|
fi
|
|
if ! ${NCMD} command -v nodemgmt > /dev/null 2>&1; then
|
|
${NCMD} "bash <(curl -sL https://go.scity.us/install-nodemgmt)" </dev/null 2>&1
|
|
${NMCMD} rsync -az ${NM_FOLDER}/conf/*.inc --exclude copycerts.sh.inc ${NM_FOLDER}/conf/*.conf root@${nip}:${NM_FOLDER}/conf/ </dev/null 2>&1
|
|
${NMCMD} rsync -az ${NM_FOLDER}/conf/powerwall ${NM_FOLDER}/conf/*.conf root@${nip}:${NM_FOLDER}/conf/ </dev/null 2>&1
|
|
sleep 2s
|
|
source /opt/idssys/nodemgmt/conf/settings.conf
|
|
source /opt/idssys/nodemgmt/defaults.inc
|
|
# [ "${NM_GITPASS}" != "" ] && [ "${NM_GITUSER^^}" == "VOLTRON" ] &&
|
|
${NMCMD} "bash <(curl -sL https://go.scity.us/add-linux-pass)"
|
|
echo -e "${idsCL[Green]}Installed & Synced${idsCL[Default]}" >> ${tmpfile}.running
|
|
elif [ ${noup} -eq 1 ]; then
|
|
echo -e "${idsCL[Green]}Already Installed${idsCL[Default]}" >> ${tmpfile}.running
|
|
else
|
|
${NCMD} "nodemgmt update q" >> ${tmpfile}.running
|
|
fi
|
|
else
|
|
${NMCMD} rsync -az --exclude copycerts.sh.inc ${NM_FOLDER}/conf/*.inc ${NM_FOLDER}/conf/*.conf root@${nip}:${NM_FOLDER}/conf/ & </dev/null 2>&1
|
|
${NMCMD} rsync -az ${NM_FOLDER}/conf/powerwall ${NM_FOLDER}/conf/*.conf root@${nip}:${NM_FOLDER}/conf/ </dev/null 2>&1
|
|
echo -e "${idsCL[Green]}Files Synced${idsCL[Default]}" >> ${tmpfile}.running
|
|
fi
|
|
else
|
|
echo -e "${idsCL[LightCyan]}Skipping BETA Update${idsCL[Default]}" >> ${tmpfile}.running
|
|
fi
|
|
elif [ -f ${NM_TMPFOLDER}/${nip}.down ]; then
|
|
echo -e "${idsCL[LightCyan]}Skipping, host is offline${idsCL[Default]}" >> ${tmpfile}.running
|
|
else
|
|
echo -e "${idsCL[LightCyan]}Skipping${idsCL[Default]}" >> ${tmpfile}.running
|
|
fi
|
|
[ -f ${tmpfile}.running ] && mv ${tmpfile}.running ${tmpfile}.done || touch ${tmpfile}.done
|
|
|
|
}
|
|
|
|
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)" >/dev/null 2>&1
|
|
if [ "${NEWIP}" == "" ]; then
|
|
NEWIP="$(wget -qO- https://ipinfo.io/ip ; echo)" >/dev/null 2>&1
|
|
if [ "${NEWIP}" == "" ]; then
|
|
NEWIP="$(wget -qO- https://ipecho.net/plain ; echo)" >/dev/null 2>&1
|
|
[ "${NEWIP}" == "" ] && NEWIP="WAN IP could not be found"
|
|
fi
|
|
fi
|
|
echo -e "${idsCL[LightGreen]}${NEWIP}"
|
|
echo
|
|
|
|
if ([ "${OLDIP}" != "" ] && [ "${NEWIP}" != "" ] && [[ "${OLDIP}" != *";"* ]] && [[ "${NEWIP}" != *";"* ]] && [[ "${NEWIP}" != "WAN"* ]]) && ([ "${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
|
|
|
|
if [ "$(CHECK_HOST ${NM_OFFSITE_GW_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
|
|
|
|
${SSHCMD} root@${NM_OFFSITE_GW_IP} tar -c -f /cf/conf/conf_backup.tar.gz /cf/conf
|
|
scp root@${NM_OFFSITE_GW_IP}:/cf/conf/conf* ${BAKFOLDER}/${newBAKFOLDER}/
|
|
${SSHCMD} root@${NM_OFFSITE_GW_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;
|
|
if [ $keep == 0 ]; then
|
|
delFolder="V:\\UniFi-Backups\\Offsite-pfSense_Backups\\${folder##*/}"
|
|
${SSHCMD} backup@10.10.1.60 cmd /C rmdir /S /Q "${delFolder}"
|
|
fi
|
|
fi
|
|
done
|
|
else
|
|
SENDNOTICE "Offsite pfSense Backup Failed" "Could not contact 'pfSense @ ${NM_OFFSITE_GW_IP}' for backup" 1
|
|
fi
|
|
}
|
|
|
|
BACKUP_UNIFIUDM(){
|
|
BAKFOLDER=/mnt/Veeam-UniFi-UDM_Backups
|
|
UNIFIUDM_IP='10.5.1.1'
|
|
|
|
if [ "$(CHECK_HOST ${UNIFIUDM_IP})" != "false" ]; then
|
|
if [ ! -f ${BAKFOLDER}/mounted ]; then
|
|
mount -a
|
|
sleep 2s
|
|
if [ ! -f ${BAKFOLDER}/mounted ]; then
|
|
echo "Can't mount backup folder"
|
|
SENDNOTICE "Unifi-UDM 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=3
|
|
WeeklyBackupsToKeep=2
|
|
MonthlyBackupsToKeep=1
|
|
|
|
${SSHCMD} root@${UNIFIUDM_IP} tar -c -f /volume1/data_backup.tar.gz /data
|
|
${SSHCMD} root@${UNIFIUDM_IP} tar -c -f /volume1/root_backup.tar.gz /root
|
|
scp root@${UNIFIUDM_IP}:/volume1/*_backup.tar.gz ${BAKFOLDER}/${newBAKFOLDER}/
|
|
${SSHCMD} root@${UNIFIUDM_IP} rm -f /volume1/*_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;
|
|
if [ $keep == 0 ]; then
|
|
delFolder="D:\\BackupSync\\UniFi-Backups\\UniFi-UDM_Backups\\${folder##*/}"
|
|
${SSHCMD} backup@10.10.1.60 cmd /C rmdir /S /Q "${delFolder}"
|
|
fi
|
|
fi
|
|
done
|
|
else
|
|
SENDNOTICE "UniFi-UDM Backup Failed" "Could not contact 'UDM @ ${UNIFIUDM_IP}' for backup" 1
|
|
fi
|
|
}
|
|
|
|
BACKUP_UNIFINVR(){
|
|
BAKFOLDER=/mnt/Veeam-UniFi-NVR_Backups
|
|
UNIFINVR_IP='10.10.70.1'
|
|
|
|
if [ "$(CHECK_HOST ${UNIFINVR_IP})" != "false" ]; then
|
|
if [ ! -f ${BAKFOLDER}/mounted ]; then
|
|
mount -a
|
|
sleep 2s
|
|
if [ ! -f ${BAKFOLDER}/mounted ]; then
|
|
echo "Can't mount backup folder"
|
|
SENDNOTICE "Unifi-NVR 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=3
|
|
WeeklyBackupsToKeep=2
|
|
MonthlyBackupsToKeep=1
|
|
|
|
${SSHCMD} root@${UNIFINVR_IP} tar -c -f /volume1/data_backup.tar.gz /data
|
|
${SSHCMD} root@${UNIFINVR_IP} tar -c -f /volume1/root_backup.tar.gz /root
|
|
${SSHCMD} root@${UNIFINVR_IP} tar -c -f /volume1/unifi_backup.tar.gz /volume1/.srv/unifi-protect/backups /volume1/.srv/unifi-protect/data /volume1/.srv/unifi-protect/dbBackups
|
|
|
|
scp root@${UNIFINVR_IP}:/volume1/*_backup.tar.gz ${BAKFOLDER}/${newBAKFOLDER}/
|
|
${SSHCMD} root@${UNIFINVR_IP} rm -f /volume1/*_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;
|
|
if [ $keep == 0 ]; then
|
|
delFolder="D:\\BackupSync\\UniFi-Backups\\UniFi-NVR_Backups\\${folder##*/}"
|
|
${SSHCMD} backup@10.10.1.60 cmd /C rmdir /S /Q "${delFolder}"
|
|
fi
|
|
fi
|
|
done
|
|
else
|
|
SENDNOTICE "UniFi-NVR Backup Failed" "Could not contact 'NVR @ ${UNIFINVR_IP}' for backup" 1
|
|
fi
|
|
}
|
|
|
|
RUN_COMMAND(){
|
|
while [ $# -gt 0 ]; do
|
|
case "${1}" in
|
|
-nt) nodetype=${2^^};;
|
|
-cmd|-c) RUNCMD="${2}";;
|
|
esac
|
|
shift
|
|
done
|
|
if [ "${nodetype}" == "ALL" ] || [ -z ${nodetype+x} ]; then
|
|
nodetype=ALL
|
|
# NT_HOSTS=ALL_HOSTS[@]
|
|
NTS=(${NM_NODE_TYPES[*]})
|
|
elif [ "${nodetype}" != "" ]; then
|
|
if [ "${NM_HOSTS[${nodetype}]}" != "" ]; then
|
|
# NT_HOSTS=${nodetype}_HOSTS[@]
|
|
NTS=("${nodetype}");
|
|
else
|
|
echo -e "${idsCL[Red]}"${nodetype}" is an unknown NodeType.${idsCL[Default]}\n"
|
|
exit 1
|
|
fi
|
|
fi
|
|
if [ -z ${RUNCMD+x} ]; then
|
|
echo -e "${idsCL[Red]}No command specified to run. (Use nmg run -cmd \"command to run\")${idsCL[Default]}\n"
|
|
exit 1
|
|
fi
|
|
for NTYPE in "${NTS[@]}"; do
|
|
echo -e "${idsST[Bold]}"; DIVIDER
|
|
echo -e "${idsCL[Yellow]} ${NM_NODETYPES[$NTYPE]}-Nodes to run command { \`${idsCL[Default]}${RUNCMD}${idsCL[Yellow]}\` }${idsCL[Default]}"
|
|
DIVIDER; echo -e "${idsST[Reset]}"
|
|
NT_HOSTS=${NTYPE}_HOSTS[@]
|
|
for nip in "${!NT_HOSTS}"; do
|
|
if [ ! -f /tmp/nmg.run.${nip} ]; then
|
|
if [ "${RUN_NODE_IP}" == "${nip}" ]; then
|
|
NCMD=''
|
|
LH='- localhost'
|
|
else
|
|
NCMD="${SSHCMD} root@${nip}"
|
|
LH=''
|
|
fi
|
|
echo -e " ${idsST[Bold]}${idsCL[LightCyan]}${NM_HOSTNAMES[${nip}]}[${nip}]${idsST[Reset]} ${idsCL[LightYellow]}${LH}${idsCL[Default]}"
|
|
DIVIDER false green
|
|
# echo "Running command: ${NCMD} ${RUNCMD}"
|
|
command_output=$([ "${NCMD}" != "" ] && ${NCMD} "${RUNCMD}" || ${RUNCMD})
|
|
touch /tmp/nmg.run.${nip}
|
|
if [ "${command_output}" != "" ]; then
|
|
echo -e "command output: ${command_output}"
|
|
DIVIDER false green
|
|
echo
|
|
else
|
|
echo "Command was run, but not output was generated."
|
|
DIVIDER false green
|
|
echo
|
|
fi
|
|
|
|
fi
|
|
done
|
|
echo
|
|
done
|
|
rm -f /tmp/nmg.run.*
|
|
}
|
|
|
|
DOWNLIST(){
|
|
declare -i cw; declare -i spc1; declare -i c; sss=0
|
|
DOWN_LIST=`find ${NM_TMPFOLDER}/ -maxdepth 1 -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
|
|
sss=1
|
|
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
|
|
|
|
if [ "${1}" != "report" ] && [ ${sss} -ne 1 ]; then
|
|
DOWN_LIST=`find ${NM_TMPFOLDER}/ -maxdepth 1 -iname "*.down"`
|
|
IFS=$'\n'; read -rd '' -a DOWN_LIST <<<"${DOWN_LIST}"; unset IFS
|
|
DOWNLIST=(${DOWN_LIST[@]})
|
|
elif [ ${sss} -eq 1 ]; then
|
|
sss=0
|
|
fi
|
|
|
|
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 [[ "${NM_IGNOREHOSTS_IFDOWN}" != *"${host}"* ]]; then
|
|
if [ "${choice^^}" == "N" ]; then
|
|
[ -f ${NM_TMPFOLDER}/${ditem}.disable ] && rm -f ${NM_TMPFOLDER}/${ditem}.disable
|
|
elif [ "${choice^^}" == "F" ]; then
|
|
[ ! -f ${NM_TMPFOLDER}/${ditem}.disable ] && touch ${NM_TMPFOLDER}/${ditem}.disable
|
|
elif [[ ${choice} == ?(-)+([0-9]) ]] && [ ${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
|
|
fi
|
|
|
|
[ ${is} -lt 10 ] && ignsel=" ${is}) " || ignsel="${is}) "
|
|
# ([ -f ${NM_TMPFOLDER}/${ditem}.disable ] || ([[ "${host}" = *"10.2."* ]] && [ -f ${PW_TMPFOLDER}/OFF-vMS-Host1.down ])) && dstatus="OFF" || dstatus="${idsCL[Green]}ON"
|
|
|
|
if [[ "${NM_IGNOREHOSTS_IFDOWN}" = *"${host}"* ]]; then
|
|
dstatus="IGNORED"
|
|
elif [ -f ${NM_TMPFOLDER}/${ditem}.disable ]; then
|
|
dstatus="OFF"
|
|
else
|
|
dstatus="${idsCL[Green]}ON"
|
|
fi
|
|
|
|
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]}Set All O(${idsCL[LightYellow]}N${idsCL[Default]}), All OF(${idsCL[LightYellow]}F${idsCL[Default]}), ${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 ] || ([[ "${nip}" = *"10.2."* ]] && [ -f ${PW_TMPFOLDER}/OFF-vMS-Host1.down ])) && dstatus="${idsCL[LightRed]}OFF" || dstatus="${idsCL[Green]}ON"
|
|
[ -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 ] || ([[ "${nip}" = *"10.2."* ]] && [ -f ${PW_TMPFOLDER}/OFF-vMS-Host1.down ])) && dstatus="${idsCL[LightRed]}OFF" || dstatus="${idsCL[Green]}ON"
|
|
[ -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 ] || ([[ "${nip}" = *"10.2."* ]] && [ -f ${PW_TMPFOLDER}/OFF-vMS-Host1.down ])) && dstatus="${idsCL[LightRed]}OFF" || dstatus="${idsCL[Green]}ON"
|
|
[ -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="${SSHCMD} 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 ] || ([[ "${nip}" = *"10.2."* ]] && [ -f ${PW_TMPFOLDER}/OFF-vMS-Host1.down ])) && dstatus="${idsCL[LightRed]}OFF" || dstatus="${idsCL[Green]}ON"
|
|
[ -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
|
|
|
|
}
|
|
|
|
ESXI_ISCSI_STORAGE_RESCAN(){
|
|
|
|
[ "${1}" != "now" ] && sleep 30s
|
|
|
|
for NIP in "${ESXIHOSTS[@]}"; do
|
|
if [ $(CHECK_HOST ${NIP}) == true ]; then
|
|
${SSHCMD} root@${NIP} esxcli storage core adapter rescan --all &
|
|
${SSHCMD} root@${NIP} vmkfstools -V &
|
|
fi
|
|
done
|
|
|
|
exit 0
|
|
|
|
}
|
|
|
|
SETUPSSH(){
|
|
echo -e "\n${idsST[Bold]}${idsCL[LightCyan]}Beginning SSH verifiication, you may get prompted for credentials 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 Connections Between All Nodes${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
|
|
|
|
# ${SSHCMD} root@${nip} "nmg setupssh_back"
|
|
|
|
# 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
|
|
}
|
|
|
|
SETUPSSH_BACK(){
|
|
echo -en "\n${idsCL[LightCyan]}$(hostname): Checking for Public SSH Key back to Node-Manager ... ${idsCL[Default]}"
|
|
if [ "$(ssh -o BatchMode=yes -o ConnectTimeout=3 root@${NM_NODEMANAGER} echo ok 2>&1)" == "ok" ]; then
|
|
echo -e "${idsCL[Green]}Already Installed${idsCL[Default]}"
|
|
else
|
|
echo -e "${idsCL[Yellow]}Copying to Node-Manager ...${idsCL[Default]}"
|
|
ssh-copy-id root@${NM_NODEMANAGER}
|
|
fi
|
|
}
|
|
|
|
SKIP_SERVER_CHECKS(){
|
|
if [ "${2}" == "q" ]; then
|
|
unset idsCL idsBG idsST
|
|
idsCL=(''); idsBG=(''); idsST=('')
|
|
echo
|
|
fi
|
|
if [ "${1}" == "on" ] || ([ ! -f ${NM_TMPFOLDER}/.skip ] && [ "${1}" == "" ]); then
|
|
touch ${NM_TMPFOLDER}/.skip
|
|
echo -e "${idsCL[Yellow]}Server will be skipped from Node-Manager Status Checks${idsCL[Default]}"
|
|
if systemctl is-active --quiet keepalived; then
|
|
echo -en "${idsCL[Red]}Stopping${idsCL[LightCyan]} Keepalived ... ${idsCL[Default]}"
|
|
systemctl stop keepalived >/dev/null 2>&1
|
|
echo -e "${idsCL[Green]}Done${idsCL[Default]}"
|
|
fi
|
|
elif [ "${1}" == "off" ] || [ "${1}" == "reboot" ] || [ "${1}" == "shutdown" ] || ([ -f ${NM_TMPFOLDER}/.skip ] && [ "${1}" == "" ]); then
|
|
rm -f ${NM_TMPFOLDER}/.skip
|
|
echo -e "${idsCL[LightGreen]}Server has been re-enabled for Node-Manager Status Checks${idsCL[Default]}"
|
|
if [ "${1}" == "reboot" ]; then
|
|
echo -e "\n${idsCL[LightGreen]}Restarting System . . .${idsCL[Default]}\n"
|
|
reboot
|
|
elif [ "${1}" == "shutdown" ]; then
|
|
echo -e "\n${idsCL[LightGreen]}Shutting Down the System . . .${idsCL[Default]}\n"
|
|
poweroff
|
|
elif [ "$(dpkg -l | grep keepalived)" ]; then
|
|
echo -en "${idsCL[Green]}Starting${idsCL[LightCyan]} Keepalived ... ${idsCL[Default]}"
|
|
systemctl start keepalived >/dev/null 2>&1
|
|
echo -e "${idsCL[Green]}Done${idsCL[Default]}"
|
|
fi
|
|
fi
|
|
echo
|
|
}
|
|
|
|
LIST_SKIPPED_SERVERS(){
|
|
cw=40;
|
|
rm -f /tmp/.nodeskipcheck.*
|
|
echo
|
|
declare -i spc1; declare -i c
|
|
echo -e "${idsCL[LightGreen]}Checked for Skipped Nodes${idsCL[Default]}"
|
|
echo -e "${idsCL[LightGreen]}-------------------------------------------${idsCL[Default]}"
|
|
|
|
ncount=0
|
|
for NTYPE in "${NM_NODE_TYPES[@]}"; do
|
|
var=${NTYPE}_HOSTS[@]
|
|
for nip in "${!var}"; do
|
|
if [ ! -f /tmp/.nodeskipcheck.${NM_HOSTNAMES[${nip}]// /-}.running ]; then
|
|
touch /tmp/.nodeskipcheck.${NM_HOSTNAMES[${nip}]// /-}.running
|
|
GETSKIP "${nip}" &
|
|
((ncount++))
|
|
fi
|
|
done
|
|
done
|
|
|
|
nc_count=0; completed=false
|
|
until [ "${completed}" == "true" ]; do
|
|
for nodecmd in /tmp/.nodeskipcheck.*.done; do
|
|
if [[ "${nodecmd}" != *"*"* ]]; then
|
|
nodecmd_output=$(cat ${nodecmd})
|
|
[ "${nodecmd_output}" != "" ] && echo -e "${nodecmd_output}"
|
|
rm -f ${nodecmd}
|
|
((nc_count++))
|
|
fi
|
|
done
|
|
if [ ${nc_count} -eq ${ncount} ]; then
|
|
completed=true
|
|
break
|
|
fi
|
|
sleep 2s
|
|
done
|
|
|
|
echo -e "\n${idsCL[Default]}${idsST[Reset]}"
|
|
}
|
|
|
|
GETSKIP(){
|
|
nip="${1}"
|
|
NCMD="${SSHCMD} root@${nip}"
|
|
|
|
if [ "${2}" == "" ]; then
|
|
NODE="${NM_HOSTNAMES[${nip}]} [${nip}]"
|
|
tmpfile=/tmp/.nodeskipcheck.${NM_HOSTNAMES[${nip}]// /-}
|
|
|
|
c=0; spca=''; spc1=`expr ${cw} - ${#NODE}`; until [ $c = ${spc1} ]; do spca="${spca} "; c=`expr $c + 1`; done
|
|
echo -en "Checking ${NODE}${spca}" >> ${tmpfile}.running
|
|
if [ $(CHECK_HOST ${nip}) != false ]; then
|
|
${NCMD} [ -f ${NM_TMPFOLDER}/.skip ] && echo -e "${idsCL[LightRed]}SKIPPED${idsCL[Default]}" >> ${tmpfile}.running || echo "${idsCL[LightCyan]}NOT Skipped${idsCL[Default]}" >> ${tmpfile}.running
|
|
else
|
|
echo -e "${idsCL[Yellow]}OFFLINE${idsCL[Default]}" >> ${tmpfile}.running
|
|
fi
|
|
[ -f ${tmpfile}.running ] && mv ${tmpfile}.running ${tmpfile}.done || touch ${tmpfile}.done
|
|
else
|
|
RESULT=false
|
|
if [ $(CHECK_HOST ${nip}) != false ]; then
|
|
${NCMD} [ -f ${NM_TMPFOLDER}/.skip ] && RESULT=true
|
|
fi
|
|
echo ${RESULT}
|
|
fi
|
|
}
|
|
|
|
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};;
|
|
copycerts) COPYCERTS ${2} ${3} ${4} ${5};;
|
|
listcerts-npm) LISTCERTS_NPM;;
|
|
copynpmcerts) COPYCERTS_NPM ${2};;
|
|
checknpmcerts) CHECK_NPMCERTS;;
|
|
checkcerts) CHECK-CERTS ${2} ${3} ${4} ${5} ${6};;
|
|
nightlyrenew)
|
|
if [ "${2}" == "q" ]; then
|
|
mv -f ${NM_LOGFOLDER}/cert-renewal1.lastrun ${NM_LOGFOLDER}/cert-renewal2.lastrun
|
|
mv -f ${NM_LOGFOLDER}/cert-renewal.lastrun ${NM_LOGFOLDER}/cert-renewal1.lastrun
|
|
exec 3>&1 >>${NM_LOGFOLDER}/cert-renewal.lastrun 2>&1
|
|
echo "$(date +%Y-%m-%d-%H-%M-%S) #### Nightly Cert Renewal check Initiated ####"
|
|
${NM_SCRIPT} nightlyrenew report
|
|
echo -e "\n$(date +%Y-%m-%d-%H-%M-%S)"
|
|
else
|
|
NIGHTLYRENEW
|
|
fi
|
|
|
|
;;
|
|
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)
|
|
if [ "${2}" == "nodes" ]; then
|
|
NODEUPDATES
|
|
fi
|
|
;;
|
|
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};;
|
|
setupssh_back) SETUPSSH_BACK ${2} ${3} ${4} ${5} ${6};;
|
|
betacheck) BETACHECK;;
|
|
update-dyndns) UPDATE_DYNDNS ${2} ${3} ${4} ${5} ${6};;
|
|
backup) BACKUP;;
|
|
|
|
offsite-staticroute-fix) OFFSITE_STATICROUTE_FIX;;
|
|
|
|
dl|downlist)
|
|
if [ "${2}" = "reportrun" ]; then
|
|
if [ "$(find ${NM_TMPFOLDER} -maxdepth 1 -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 300 ]; then
|
|
for oldstatus_check in ${NM_TMPFOLDER}/status-*; do
|
|
if ! [[ "${oldstatus_check}" =~ "*" ]] && ! [[ "${oldstatus_check}" =~ ".stuck" ]] && [ $(expr $(date +%s) - $(stat -c %Y ${oldstatus_check})) -ge 60 ]; then
|
|
rm -Rf ${oldstatus_check}
|
|
fi
|
|
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 ] && ([ ! -f ${NM_TMPFOLDER}/.skip ] || ([ -f ${NM_TMPFOLDER}/.skip ] && [ "${2}" != "report" ])); 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
|
|
if [ $(expr $(date +%s) - $(stat -c %Y ${NM_TMPFOLDER}/.replcheck)) -le 20 ]; then
|
|
mv ${STATUSRUN_TMPFOLDER}/status-check.running ${NM_LOGFOLDER}/status-check.repl.lastrun
|
|
else
|
|
mv ${STATUSRUN_TMPFOLDER}/status-check.running ${NM_LOGFOLDER}/status-check.lastrun
|
|
fi
|
|
|
|
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}
|
|
|
|
elif [ -f ${NM_TMPFOLDER}/.skip ]; then
|
|
echo -e "${idsCL[Yellow]}HOST DISABLED - Not running status checks${idsCL[Default]}\n"
|
|
rm -f ${NM_TMPFOLDER}/.statusclean ${NM_TMPFOLDER}/.replcheck ${NM_TMPFOLDER}/.replclean
|
|
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 ]; then
|
|
SENDNOTICE "NODEMGMT OVERLOAD" "Whooooaaaaa there cowboy, we got 3 threads running already.... easy killer!" 1
|
|
touch ${NM_TMPFOLDER}/.overload
|
|
elif [ $(expr $(date +%s) - $(stat -c %Y ${NM_TMPFOLDER}/.overload)) -ge 900 ]; then
|
|
SENDNOTICE "NODEMGMT OVERLOAD" "OMG SAVE ME, IM BEING OVERRUN BY STATUS CHECKS!" 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}";;
|
|
backup-offsitepfsense) BACKUP_OFFSITEPFSENSE;;
|
|
backup-unifiudm) BACKUP_UNIFIUDM;;
|
|
backup-unifinvr) BACKUP_UNIFINVR;;
|
|
|
|
test)
|
|
# if [ ! -f /etc/rsyslog.d/01-ignore-session-messages.conf ] && [ -f ${NM_FOLDER}/conf/rsyslog/01-ignore-session-messages.conf ]; then
|
|
cp -f ${NM_FOLDER}/conf/rsyslog/01-ignore-session-messages.conf /etc/rsyslog.d/01-ignore-session-messages.conf
|
|
/bin/systemctl restart rsyslog
|
|
# fi
|
|
;;
|
|
|
|
skip) SKIP_SERVER_CHECKS ${2} ${3};;
|
|
get-skips) LIST_SKIPPED_SERVERS;;
|
|
|
|
sync-clean) REMOVE_CONFLICT_SYNC_FILES ${2};;
|
|
|
|
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
|
|
# if [[ "${RUN_NODE_IP}" != "10.6.1"* ]]; then
|
|
SERVICE_MGMT nginx restart
|
|
# else
|
|
# /bin/systemctl restart nginx
|
|
# fi
|
|
;;
|
|
|
|
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
|
|
|