File: //usr/local/locaweb/bin/lwcorp_rede_ip_adicional.sh
#!/bin/bash
# FUNCTIONS
. /etc/lwcorp/lwcorp.functions
DEVICE="eth0"
# A NEWIFACE inicialmente eh calculada levando em consideracao as
# interfaces que estao no ar. Pega a ultima, soma mais 1 e assim
# determina qual sera a proxima interface a ser configurada. Depois
# ainda eh verificado se o arquivo de configuracao dessa interface
# ja existe. Se sim, soma mais numero para a nova interface.
NEWIFACE="$DEVICE:$(expr $(ip addr show | grep eth0 | awk '{print$7}' | grep ^eth | grep eth0: | cut -d: -f2 | sort | tail -n1) + 1)"
NET_PATH="/etc/sysconfig/network-scripts"
NET_CONFIG="${NET_PATH}/ifcfg-${NEWIFACE}"
# Esta function nao fica no lwcorp.functions pq so sera usada aqui
setup_new_ip () {
echo "$LOGDATE - [Configurando IP '$NEW_IP_ADDR' e '$NEW_NETMASK' em '$NEWIFACE'.]" >> $LOGFILE
# template com a configuracao da interface virtual:
template=`cat <<EOF
DEVICE="${NEWIFACE}"
ONBOOT="yes"
BOOTPROTO="none"
IPADDR="${NEW_IP_ADDR}"
NETMASK="${NEW_NETMASK}"
ZONE=access
EOF`
# aqui eh criada a nova interface:
echo $template | xargs -n1 > $NET_CONFIG
# verifica se o IP esta na configurado na nova interface virtual:
grep $NEW_IP_ADDR $NET_CONFIG > /dev/null
if [ $? -eq "0" ];then
# verifica a saida do comando acima. se saiu com 0, sucesso
echo "$LOGDATE - [Configuracao realizada com sucesso.]" >> $LOGFILE
dialog --backtitle "$LWCORPHEADER" --title "$TITLECONFIRMACAO" --msgbox "\nENDERECO IP CONFIGURADO COM SUCESSO\n\nTECLE ENTER PARA SUBIRMOS A INTERFACE." 9 53
else
# se saiu diferente de 0, reporta erro
echo "$LOGDATE - [Ocorreu um erro na configuracao do novo endereco IP.]" >> $LOGFILE
dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nOCORREU UM ERRO NA CONFIGURACAO DO IP" 0 0
exit 1
fi
# sobe a nova interface recem configurada:
echo "$LOGDATE - [Subindo nova interface.]" >> $LOGFILE
echo -e "\n\033[1;32mSUBINDO NOVA INTERFACE. POR FAVOR, AGUARDE (Isso pode demorar um pouco).\033[0m\n"
/sbin/ifup $NEWIFACE
# verifica se a nova interface esta no ar. se sim, finaliza o script.
if [ $? -eq "0" ];then
echo "$LOGDATE - [Nova interface '$NEWIFACE' esta no ar.]" >> $LOGFILE
dialog --backtitle "$LWCORPHEADER" --title "$TITLECONFIRMACAO" --msgbox "\nFEITO: INTERFACE $NEWIFACE NO AR\n\nUSE O COMANDO 'ip addr' E CONFIRA SE TUDO ESTA OK." 9 73
else
# se deu erro, reporta pro analista
echo "$LOGDATE - [Ocorreu um erro ao subir nova interface '$NEWIFACE'.]" >> $LOGFILE
dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nOCORREU UM ERRO AO SUBIR A NOVA INTERFACE" 7 53
exit 1
fi
}
# Inicio do script:
# Verifica se ja existe o arquivo de configuracao para a nova interface. Se sim, atribui +1 ao numero do que seria a nova interface:
if [ -e $NET_CONFIG ]; then
# Redefinicao das variaveis abaixo:
NEWIFACE="${DEVICE}:$(expr `echo ${NEWIFACE} | cut -d: -f2` + 1)"
NET_CONFIG="${NET_PATH}/ifcfg-${NEWIFACE}"
fi
# Obtem o novo IP:
NEW_IP_ADDR=$(dialog --backtitle "$LWCORPHEADER" --title "ENDERECO IP" --stdout --inputbox "\nINFORME O NOVO ENDERECO IP:" 10 35)
# Esse if eh preciso pra saber se o analista clicou em "ok" ou cancelou o processo. Dialog sucks
if [ $? -eq "0" ];then
# Verifica se o novo IP foi digitado
if [[ -z $NEW_IP_ADDR ]]; then
echo "$LOGDATE - [O analista nao informou o endereco IP. Abortando.]" >> $LOGFILE
dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nVOCE DEVE INFORMAR O ENDERECO IP PARA PROSSEGUIR" 7 53
exit 1
else
echo "$LOGDATE - [O analista informou o endereco IP: '$NEW_IP_ADDR'.]" >> $LOGFILE
fi
elif [ $? -eq "1" ]; then
if [[ -z $NEW_IP_ADDR ]]; then
echo "$LOGDATE - [O analista cancelou o processo.]" >> $LOGFILE
dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nVOCE CANCELOU O PROCESSO" 7 53
exit 1
fi
fi
# Valida se ha caracteres invalidos no IP:
VALIDATION1=`echo ${NEW_IP_ADDR} | sed "s/[0-9\.]//g"`;
if [ "${VALIDATION1}" != "" ] || [ $(echo ${NEW_IP_ADDR} | grep '^255') ]; then
echo "$LOGDATE - [O analista digitou caracteres invalidos no campo IP. Abortando.]" >> $LOGFILE
dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nCARACTERES INVALIDOS NO ENDERECO IP INFORMADO" 07 53
exit 1
fi
# Verifica o formato do valor informado no IP:
VALIDATION2=`echo ${NEW_IP_ADDR} | egrep '^(([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$'`
if [ "${VALIDATION2}" != "$NEW_IP_ADDR" ]; then
echo "$LOGDATE - [O analista digitou um endereco IP invalido. Abortando.]" >> $LOGFILE
dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nENDERECO IP INFORMADO EH INVALIDO" 07 53
exit 1
fi
# Verifica se o IP ja esta configurado em alguma interface no servidor:
if [[ $(grep $NEW_IP_ADDR $NET_PATH/ifcfg-eth0*) ]]; then
echo "$LOGDATE - [O endereco IP ja esta presente na configuracao de rede.]" >> $LOGFILE
dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nENDERECO IP JA ESTA PRESENTE NA CONFIGURACAO DE REDE." 7 63
exit 1
fi
# Obtem a Mascara de rede:
NEW_NETMASK=$(dialog --backtitle "$LWCORPHEADER" --title "MASCARA" --stdout --inputbox "\nINFORME A MASCARA DE REDE:" 10 35)
# Esse if eh preciso pra saber se o analista clicou em "ok" ou cancelou o processo. Dialog sucks
if [ $? -eq "0" ];then
# Verifica se a mascara de rede foi digitada:
if [ -z $NEW_NETMASK ]; then
echo "$LOGDATE - [O analista nao informou a mascara de rede. Abortando.]" >> $LOGFILE
dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nVOCE DEVE INFORMAR A MASCARA DE REDE PARA PROSSEGUIR" 7 53
exit 1
else
echo "$LOGDATE - [O analista informou a mascara de rede: '$NEW_NETMASK'.]" >> $LOGFILE
fi
elif [ $? -eq "1" ]; then
if [ -z $NEW_NETMASK ]; then
echo "$LOGDATE - [O analista cancelou o processo.]" >> $LOGFILE
dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nVOCE CANCELOU O PROCESSO" 0 0
exit 1
fi
fi
# Valida o MacAddress:
VALIDATION3=`echo ${NEW_NETMASK} | sed "s/[0-5\.]//g"`;
if [ "${VALIDATION3}" != "" ]; then
echo "$LOGDATE - [O analista digitou caracteres invalidos no campo Mascara de Rede.]" >> $LOGFILE
dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nCARACTERES INVALIDOS NA MASCARA DE REDE INFORMADA" 07 53
exit 1
fi
dialog --backtitle "$LWCORPHEADER" --title "$TITLEATENCAO" --msgbox "\nA SEGUIR, CONFIRA SE OS DADOS ESTAO CORRETOS. SE NAO, RECOMECE O PROCESSO.\n\nQUALQUER ERRO QUE EVENTUALMENTE OCORRA NESTE PASSO PODERA CAUSAR INDISPONIBILIDADE DO SERVIDOR." 9 100
# Solicita para o analista a confirmacao dos dados digitados:
echo "$LOGDATE - [Aguardando confirmacao do analista quanto aos dados informados.]" >> $LOGFILE
dialog --backtitle "$LWCORPHEADER" --title "$TITLECONFIRMACAO" --yesno "\nCONFIRA SE OS DADOS ESTAO CORRETOS:\n\n* ENDERECO IP: $NEW_IP_ADDR\n* MASCARA DE REDE: $NEW_NETMASK\n\n(A NOVA INTERFACE SERA $NEWIFACE)\n\nDESEJA PROSSEGUIR?" 14 100
# Se passou por todas validacoes, eh chamada a function presente neste script e a configuracao comeca:
case $? in
0) setup_new_ip;;
*) echo "$LOGDATE - [O analista cancelou o processo.]" >> $LOGFILE ; dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nVOCE CANCELOU O PROCESSO" 7 53; exit 1;;
esac