HAProxy/Reconfig

From Chorke Wiki
Jump to navigation Jump to search

HAProxy » Reconfig

#!/bin/bash
: '
 @vendor    Chorke Academia, Inc.
 @web       https://cdn.chorke.org/docs/academia
 @version   1.0.00
 @since     1.0.00
'

:<<DIY
cat <<'EXE'| sudo bash
if [ -x "$(command -v curl)" ];then
export HAPROXY_ETC_BASE=/etc/haproxy
bash <(curl -s 'https://cdn.chorke.org/exec/cli/bash/install/haproxy/1.0.0-ubuntu-24.04.sh.txt')
curl      -fsSL https://cdn.chorke.org/exec/cli/bash/install/haproxy/1.0.0-ubuntu-24.04.sh.txt|tee ${HAPROXY_ETC_BASE}/proxy-scripts/reconfig >/dev/null
chmod   u+x ${HAPROXY_ETC_BASE}/proxy-scripts/reconfig
else printf 'curl \033[0;31mnot found! \033[0m:(\n';fi
EXE
DIY


function merge_restart(){
    if [ -e "${HAPROXY_TMP_FILE}" ] && [ -f "${HAPROXY_TMP_FILE}" ] && [ -s  "${HAPROXY_TMP_FILE}" ];then
        if [ "${HAPROXY_CFG_MD5S}" != "${HAPROXY_TMP_MD5S}" ];then
            unset HAPROXY_CFG_TEST
            unset HAPROXY_TMP_TEST
            if [ $(haproxy -c -V -f ${HAPROXY_TMP_FILE} >/dev/null 2>&1; echo $?) -eq 0 ];then HAPROXY_TMP_TEST="/env/set";fi
            if [ "${HAPROXY_TMP_TEST}" == '/env/set' ];then
                rsync -aqz ${HAPROXY_TMP_FILE} ${HAPROXY_ETC_BASE}/haproxy.cfg
                if [ $(haproxy -c -V -f ${HAPROXY_ETC_BASE}/haproxy.cfg >/dev/null 2>&1; echo $?) -eq 0 ];then HAPROXY_CFG_TEST="/env/set";fi
                if [ ${HAPROXY_CFG_TEST} == '/env/set' ];then systemctl restart haproxy.service;fi
                if [ ${HAPROXY_CFG_TEST} != '/env/set' ];then
                    haproxy -c -V -f ${HAPROXY_ETC_BASE}/haproxy.cfg
                    rsync -aqz ${BACKUPS_CFG_FILE} ${HAPROXY_ETC_BASE}/haproxy.cfg && rm ${BACKUPS_CFG_FILE}
                    printf 'haproxy.cfg \033[0;31mreverted! \033[0m:(\n'; exit_error
                fi
                rm ${HAPROXY_TMP_FILE}
            fi
    
            if [ "${HAPROXY_TMP_TEST}" != '/env/set' ];then
                cat ${HAPROXY_TMP_FILE};echo
                haproxy -c -V -f ${HAPROXY_TMP_FILE};echo;rm ${HAPROXY_TMP_FILE}
                printf 'haproxy.cfg \033[0;31mnot valid! \033[0m:(\n'; exit_error
            fi
        fi
    fi
}

function merge_backups(){
    if [ -e "${HAPROXY_TMP_FILE}" ] && [ -f "${HAPROXY_TMP_FILE}" ] && [ -s  "${HAPROXY_TMP_FILE}" ];then
        HAPROXY_CFG_MD5S="$(md5sum ${HAPROXY_ETC_BASE}/haproxy.cfg|awk '{print $1}')"
        HAPROXY_TMP_MD5S="$(md5sum ${HAPROXY_TMP_FILE}|awk '{print $1}')"
        if [ "${HAPROXY_CFG_MD5S}" != "${HAPROXY_TMP_MD5S}" ];then
            BACKUPS_CFG_DATE="$(date +'D%Y%m%d-T%H%M')-Z$(date +'%z'|tr '+-' 'PM')"
            BACKUPS_CFG_FILE=${HAPROXY_ETC_BASE}/proxy-backups/haproxy-${BACKUPS_CFG_DATE}.cfg
            rsync -aqz ${HAPROXY_ETC_BASE}/haproxy.cfg ${BACKUPS_CFG_FILE}
        fi
    fi
}

function merge_enabled(){
    for ENABLED_MID_NAME in ${ENABLED_MID_FIXS}; do
        ENABLED_CFG_FILE="${HAPROXY_ETC_BASE}/${ENABLED_DIR_NAME}/${ENABLED_MID_NAME}.cfg"
        if [ -e "${ENABLED_CFG_FILE}" ] && [ ! -d "${ENABLED_CFG_FILE}" ] && [ -s  "${ENABLED_CFG_FILE}" ];then
            if   [ -f "${ENABLED_CFG_FILE}" ];then ENABLED_CFG_LIST="${ENABLED_CFG_LIST} ${ENABLED_CFG_FILE}"
            elif [ -L "${ENABLED_CFG_FILE}" ];then ENABLED_CFG_LIST="${ENABLED_CFG_LIST} ${ENABLED_CFG_FILE}";fi
        fi
    done
    
    # trimming leading & trailing whitespaces
    ENABLED_CFG_LIST=$(echo "${ENABLED_CFG_LIST}" | xargs)
    if [ "${ENABLED_CFG_LIST}/env/set" != '/env/set' ];then
        cat ${ENABLED_CFG_LIST} | tee -a ${HAPROXY_TMP_FILE} >/dev/null
    fi
}

function merge_default(){
    for DEFAULT_MID_NAME in ${DEFAULT_MID_FIXS}; do
        DEFAULT_CFG_FILE="${HAPROXY_ETC_BASE}/${DEFAULT_DIR_NAME}/${DEFAULT_MID_NAME}.cfg"
        if [ -e "${DEFAULT_CFG_FILE}" ] && [ ! -d "${DEFAULT_CFG_FILE}" ] && [ -s  "${DEFAULT_CFG_FILE}" ];then
            if   [ -f "${DEFAULT_CFG_FILE}" ];then DEFAULT_CFG_LIST="${DEFAULT_CFG_LIST} ${DEFAULT_CFG_FILE}"
            elif [ -L "${DEFAULT_CFG_FILE}" ];then DEFAULT_CFG_LIST="${DEFAULT_CFG_LIST} ${DEFAULT_CFG_FILE}";fi
        fi
    done
    
    # trimming leading & trailing whitespaces
    DEFAULT_CFG_LIST=$(echo "${DEFAULT_CFG_LIST}" | xargs)
    if [ "${DEFAULT_CFG_LIST}/env/set" != '/env/set' ];then
        cat ${DEFAULT_CFG_LIST} | tee -a ${HAPROXY_TMP_FILE} >/dev/null
    fi
}

function init_merge(){
    HAPROXY_TMP_FILE=$(mktemp -u)
    merge_default
    merge_enabled
    merge_backups
    merge_restart
}

function init_enabled(){
    ENABLED_CFG_LIST=""
    ENABLED_DIR_NAME=proxy-enabled
    ENABLED_MID_FIXS='shahed.biz-http-all shahed.biz-tcp-vpn shahed.biz-tcp-git shahed.biz-tcp-mail'
}

function init_default(){
    DEFAULT_CFG_LIST=""
    DEFAULT_DIR_NAME=proxy-default
    DEFAULT_MID_FIXS='global default-ssl default-http'
}

function init_proxy(){
    HAPROXY_ETC_BASE=/etc/haproxy
    mkdir -p ${HAPROXY_ETC_BASE}/proxy-{backups,configs,default,enabled,scripts}
    init_default
    init_enabled
}

function exit_error(){
    exit 1
}

function init_valid(){
    # check existence of haproxy
    if [ ! -x "$(command -v haproxy)" ];then
        printf 'haproxy \033[0;31mnot found! \033[0m:(\n'; exit_error
    fi

    # check existence of md5sum
    if [ ! -x "$(command -v md5sum)" ];then
        printf 'md5sum \033[0;31mnot found! \033[0m:(\n'; exit_error
    fi

    # check existence of rsync
    if [ ! -x "$(command -v rsync)" ];then
        printf 'rsync \033[0;31mnot found! \033[0m:(\n'; exit_error
    fi

    # set env:haproxy_etc_base if it's remain unset by user
    if [ "${HAPROXY_ETC_BASE}/env/set" == '/env/set' ];then
        export HAPROXY_ETC_BASE=/etc/haproxy
    fi
}

function init(){
    init_valid
    init_proxy
    init_merge
}

init

References