%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /opt/webdir/bin/menu/02_local/
Upload File :
Create Path :
Current File : //opt/webdir/bin/menu/02_local/functions.sh

BASE_DIR=/opt/webdir
BIN_DIR=$BASE_DIR/bin

. $BIN_DIR/bitrix_utils.sh || exit 1

bx_process_script=$BIN_DIR/bx-process
bx_host_script=$BIN_DIR/wrapper_ansible_conf
bx_web_script=$BIN_DIR/bx-sites

submenu_dir=$BIN_DIR/menu/02_local

SYSCONFIG_DIR=/etc/sysconfig/network-scripts

# get_text variables
[[ -f $submenu_dir/functions.txt ]] && \
    . $submenu_dir/functions.txt

export CURRENT_HOSTNAME=$(hostname)

configure_hostname_local(){
    new_h="${1}"

    if [[ -z $new_h ]]; then
        return 1
    fi

    test_hostname $new_h || return $?

    get_os_type
    if [[ $OS_VERSION -eq 7 ]]; then
        hostnamectl set-hostname $new_h
    else
        sysconfig_network=/etc/sysconfig/network
        etc_hostname=/etc/hostname
        sed -i".bak" '/HOSTNAME=/d' $sysconfig_network
        echo "HOSTNAME=$new_h" >> $sysconfig_network

        print_color_text "$(get_text "$CH003" "$sysconfig_network")"

        echo $new_h > $etc_hostname
        print_color_text "$(get_text "$CH003" "$etc_hostname")"

        hostname $new_h
    fi
    print_color_text "$(get_text "$CH004" "$CURRENT_HOSTNAME" "$new_h")"
    return 0

}

configure_hostname_pool(){
    new_h="$1"
    cur_h="$2"

    # get ansible id for the server
    cur_id=$(get_server_id "$cur_h")
    cur_id_rtn=$?
    if [[ $cur_id_rtn -eq 1 ]]; then
        print_message "$CH100" \
            "$(get_text "$CH005" "$cur_h")" "" any_key
        return 1
    elif [[ $cur_id_rtn -eq 2 ]]; then
        print_message "$CH100" \
            "$(get_text "$CH006" "$cur_h")" "" any_key
        return 1
    fi

    # test new hostname
    # Should not exist in the server pool.
    if_hostname_exists_in_the_pool "$new_h"
    if [[ $? -gt 0 ]]; then
        print_message "$CH100" \
            "$(get_text "$CH007" "$new_h")" \
            "" any_key
        return 1
    fi

    # bx_host_script
    cmd="$bx_host_script -a change_hostname --host $cur_id --hostname $new_h"
    if [[ $DEBUG -gt 0 ]]; then
        echo "cmd=$cmd"
    fi
    exec_pool_task "$cmd" "change hostname"
}

check_default_route(){
    HOST_ROUTE_EXIST=0
    HOST_ROUTE_INTERFACE=
    route_info=$(ip route list | grep default -w | grep -w $INT)

    if [[ -n "$route_info" ]]; then
        HOST_ROUTE_EXIST=1
        HOST_ROUTE_INTERFACE=$(echo "$route_info" | \
            egrep -o 'dev\s+\S+' | awk '{print $2}')
    fi
}

get_network_info(){
    export HWADDR=$(ip addr show $INT | \
        egrep -o "link/ether\s+\S+" | awk '{print $2}')
    export IP=$(ip addr show $INT | \
        egrep -o "inet\s+\S+" | \
        awk '{print $2}' | awk -F'/' '{print $1}')

    if [[ $DEBUG -gt 0 ]]; then
        echo "HWADDR: $HWADDR"
        echo "    IP: $IP"
    fi
}
 
restart_network_daemon(){
    [[ -z $OS_VERSION ]] && get_os_type
    NETD=network
    if [[ $OS_VERSION -gt 6 ]]; then
        NM_CONFIG=/etc/NetworkManager/conf.d/01-bitrix.conf
        NETWORK_CONFIG=$SYSCONFIG_DIR/ifcfg-$INT
        if [[ $(systemctl is-enabled NetworkManager.service | \
            grep -wc enabled) -gt 0 ]]; then
            echo "[main]"                   >  $NM_CONFIG
            echo "plugins=keyfile,ifcfg-rh" >> $NM_CONFIG
            echo "dns=none"                 >> $NM_CONFIG

            echo "NM_CONTROLLED=yes"        >> $NETWORK_CONFIG     
            NETD=NetworkManager
        fi
        /etc/init.d/network restart >/dev/null 2>&1

        systemctl restart $NETD >/dev/null 2>&1
        rtn=$?
    else
        system restart $NETD >/dev/null 2>&1
        rtn=$?
    fi
    print_color_text "$(get_text "$CH012" "$NETD" "$rtn")"
    return $rtn
}

configure_network_in_pool(){
    # run ansible task
    get_client_settings
    get_network_info
    if [[ $DEBUG -gt 0 ]]; then
        echo "INPOOL: $IN_POOL"
        echo "IP:     $IP"
        echo "CIP:    $CURRENT_IP"
    fi

    if [[ ( $IN_POOL -gt 0 ) && ( -n $IP ) && ( $CURRENT_IP != "$IP" ) ]]; then
        # get ansible id for the server
        cur_id=$(get_server_id "$CURRENT_HOSTNAME")
        cur_id_rtn=$?
        if [[ $cur_id_rtn -eq 1 ]]; then
            print_message "$CH100" \
                "$(get_text "$CH005" "$CURRENT_HOSTNAME")" "" any_key
            return 1
        elif [[ $cur_id_rtn -eq 2 ]]; then
            print_message "$CH100" \
                "$(get_text "$CH006" "$cur_h")" "" any_key
            return 1
        fi

        # bx_host_script
        cmd="$bx_host_script -a change_ip --hostname $cur_id --ip $IP"
        if [[ $DEBUG -gt 0 ]]; then
            echo "cmd=$cmd"
        fi
        exec_pool_task "$cmd" "change ip"

    fi

}

configure_network_by_dhcp(){
    INT="${1}"
    NETWORK_CONFIG=$SYSCONFIG_DIR/ifcfg-$INT
    RESOLVE_CONFIG=/etc/resolv.conf

    get_network_info
    export CURRENT_IP=$IP
    DEFAULT_NOTICE='(y|N)'
    DEFAULT_ANSWER='n'
    if [[ -z $CURRENT_IP ]]; then
         DEFAULT_NOTICE='(Y|n)'
         DEFAULT_ANSWER='y'
    fi

    print_message "$CH101 $DEFAULT_NOTICE: " \
        "" "" ans_saved "$DEFAULT_ANSWER"
    if [[ $(echo "$ans_saved" | grep -iwc "n" ) -gt 0 ]]; then
        return 1
    fi
    echo "# $INT"           >  $NETWORK_CONFIG
    echo "HWADDR=$HWADDR"   >> $NETWORK_CONFIG
    echo "DEVICE=$INT"      >> $NETWORK_CONFIG
    echo "BOOTPROTO=dhcp"   >> $NETWORK_CONFIG
    echo "ONBOOT=yes"       >> $NETWORK_CONFIG
    echo "TYPE=Ethernet"    >> $NETWORK_CONFIG

    print_color_text "$(get_text "$CH013" "$NETWORK_CONFIG")"

    nohup $PROGPATH/restart_network_daemon.sh $IP $INT &>/dev/null &
 
    get_network_info
    if [[ ( -n $IP ) ]]; then
        print_message "$CH100" \
            "$(get_text "$CH014" "$INT")" "" any_key
    else
        print_message "$CH100" \
            "$CH015" \
            "" any_key
    fi


}

configure_network_by_hand(){
    INT="${1}"
    NETWORK_CONFIG=$SYSCONFIG_DIR/ifcfg-$INT
    RESOLVE_CONFIG=/etc/resolv.conf

    get_network_info
    export CURRENT_IP=$IP
    
    DEFAULT_NOTICE='(y|N)'
    DEFAULT_ANSWER='n'
    if [[ -z $CURRENT_IP ]]; then
         DEFAULT_NOTICE='(Y|n)'
         DEFAULT_ANSWER='y'
    fi

    print_message "$CH016" "" "" address
    print_message "$CH017" "" "" broadcast
    print_message "$CH018" "" "" netmask

    IF_ROUTE_CONFIGURE=1
    [[ ( $HOST_ROUTE_EXIST -gt 0 ) && \
        ( "$HOST_ROUTE_INTERFACE" != "$INT" ) ]] && IF_ROUTE_CONFIGURE=0
    if [[ $IF_ROUTE_CONFIGURE -eq 1 ]]; then
        print_message "$CH019" "" "" gateway
    fi
    print_message "$CH020" "" "" ans_dns "y"
    if [[ $(echo "$ans_dns" | grep -wci "y") -gt 0 ]]; then
        print_message "$CH021" "" "" dns
    fi

    echo "$MENU_SPACER"
    print_color_text "$(get_text "$CH022" $INT)"
    echo "$MENU_SPACER"

    printf "%-20s: %s\n" "IP Address"       "$address"
    printf "%-20s: %s\n" "Broadcast"        "$broadcast"
    printf "%-20s: %s\n" "Default Gateway"  "$gateway"
    printf "%-20s: %s\n" "Network Mask"     "$netmask"
    printf "%-20s: %s\n" "DNS Server"       "$dns"
    
    print_color_text "$CH0092" red

    print_message "$CH101 $DEFAULT_NOTICE: " \
        "" "" ans_saved "$DEFAULT_ANSWER"
    if [[ $(echo "$ans_saved" | grep -iwc "n" ) -gt 0 ]]; then
        return 1
    fi

    echo "# $INT"               > $NETWORK_CONFIG
    echo "HWADDR=$HWADDR"       >> $NETWORK_CONFIG
    echo "DEVICE=$INT"          >> $NETWORK_CONFIG
    echo "BOOTPROTO=static"     >> $NETWORK_CONFIG
    echo "ONBOOT=yes"           >> $NETWORK_CONFIG
    echo "TYPE=Ethernet"        >> $NETWORK_CONFIG
    echo "IPADDR=$address"      >> $NETWORK_CONFIG
    echo "NETMASK=$netmask"     >> $NETWORK_CONFIG
    echo "BROADCAST=$broadcast" >> $NETWORK_CONFIG
    if [[ -n $gateway ]]; then
        echo "GATEWAY=$gateway" >> $NETWORK_CONFIG
    fi
    print_color_text "$(get_text "$CH013" "$NETWORK_CONFIG")"

    if [[ -n $dns ]]; then
        sed -i".bak" '/nameserver/d' $RESOLVE_CONFIG
        id=1
        for name in $dns; do
            echo "nameserver $name" >> $RESOLVE_CONFIG
            echo "DNS$id=$name" >> $NETWORK_CONFIG
            id=$(($id + 1))
        done
        print_color_text "$(get_text "$CH013" "$RESOLVE_CONFIG")"
    fi


    nohup $PROGPATH/restart_network_daemon.sh $IP $INT &>/dev/null &

    if [[ ( -n $IP ) ]]; then
        print_message "$CH100" \
            "$(get_text "$CH014" "$INT")" "" any_key
    else
        print_message "$CH100" \
            "$CH015" \
            "" any_key
    fi


}

configure_network() {
    local conf_type="${1:-manual}"
    local conf_int="$2"

    if [[ ( $conf_type != "manual" ) && ( $conf_type != "dhcp" ) ]]; then
        print_message "$CH100" "$(get_text "$CH023" "$conf_type")" "" any_key
        return 1
    fi

    if [[ -z "$conf_int" ]]; then
        print_message "$CH100" "$CH011" "" any_key
        return 1
    fi

    [[ -z $HOST_NETWORK_INFO ]] && get_local_network
    if [[ $(echo "$HOST_NETWORK_INFO" | grep -c "#$conf_int#") -eq 0 ]]; then
        print_message "$CH100" "$(get_text "$CH024" "$conf_int")" "" any_key
        return 1
    fi

    [[ $conf_type == "manual" ]] && configure_network_by_hand $conf_int
    [[ $conf_type == "dhcp" ]] && configure_network_by_dhcp $conf_int
}

Zerion Mini Shell 1.0