Files

307 lines
14 KiB
Bash
Executable File

#!/usr/bin/env bash
#reip_handler.sh
# chkconfig: 345 99 10
# description: Script to run a on start up and perform re-ip if needed
LOCKFILE=/var/lock/subsys/reiphandler
PROCESS_LOG_FILE=-target-folder-reip_handler.log
ONE_TIME_FILE=-target-folder-drctexecflag
start(){
# Touch our lock file so that stopping will work correctly
touch ${LOCKFILE}
VERSION=$(rpm -q --queryformat '%{VERSION}' $(rpm -qa '(redhat|sl|slf|centos|oraclelinux)-release(|-server|-workstation|-client|-computenode)'))
HV_RESPONSE=$(sudo dmidecode | grep -i -E 'amazon|microsoft')
#IS_NM_INSTALLED=$(service NetworkManager status | grep 'active')
IS_RUN_WITHIN_VCENTER=${#HV_RESPONSE}
if [ $IS_RUN_WITHIN_VCENTER -gt 0 ];
then
FULL_PATH=/etc/sysconfig/network-scripts/
echo $(date -u)' Creating network scripts backup' >> $PROCESS_LOG_FILE
tar -zcvf /etc/reip/networkscripts.tar.gz $FULL_PATH
tar -zcvf /etc/reip/rules.tar.gz /etc/udev/rules.d/
tar -zcvf /etc/reip/network.tar.gz /etc/sysconfig/network
if [ -f /etc/udev/rules.d/70-persistent-net.rules ];
then
rm -rf /etc/udev/rules.d/70-persistent-net.rules
rm -rf /lib/udev/rules.d/75-persistent-net-generator.rules
#reboot
fi
IS_IFNAMES_KICKED=$(cat /etc/default/grub | grep -E 'net.ifnames=0')
if [ ${#IS_IFNAMES_KICKED} -eq 0 ];
then
echo $(date -u)' GRUB_CMDLINE_LINUX="net.ifnames=0"' >>/etc/default/grub
fi
CONFIG_FILES=$(ls $FULL_PATH -I "ifcfg-lo" | grep "ifcfg*")
INDEX=0
echo $(date -u)' Renaming all configuration not fits ethX standard' >> $PROCESS_LOG_FILE
SOURCE_DATA_FILE_PATH=/etc/reip/dhcp.conf
for CONFIG_FILE in $CONFIG_FILES
do
echo $(date -u)' '$CONFIG_FILE >> $PROCESS_LOG_FILE
SOURCE_PATH=$FULL_PATH$CONFIG_FILE
TARGET_PATH=$FULL_PATH'ifcfg-eth'$INDEX
echo $(date -u) ' Source file:'$SOURCE_PATH >> $PROCESS_LOG_FILE
echo $(date -u) ' Target file:'$TARGET_PATH >> $PROCESS_LOG_FILE
mv $SOURCE_PATH $TARGET_PATH
cat $SOURCE_DATA_FILE_PATH > $TARGET_PATH
INDEX=$((INDEX + 1))
done
echo $(date -u)' ReIP handler watchdog started' >> $PROCESS_LOG_FILE
IS_NETWORK_RESTART_REQUIRED=""
echo $(date -u)' We're not in VC. May be AWS. Let's give it a chance. Continue processing...' >> $PROCESS_LOG_FILE
echo $(date -u)' Checking for static IP configuration' >> $PROCESS_LOG_FILE
CONFIG_FILE_PATTERN=/etc/sysconfig/network-scripts/ifcfg-eth*
COMMON_NETWORK_FILE=/etc/sysconfig/network
echo $(date -u)' Processing GATEWAY section by removing it if exists' >> $PROCESS_LOG_FILE
TMP=$(cat $COMMON_NETWORK_FILE | grep -v GATEWAY)
echo $TMP > $COMMON_NETWORK_FILE
for CONFIG_FILE_PATH in $CONFIG_FILE_PATTERN
do
echo $(date -u)' Starting test for file '$CONFIG_FILE_PATH >> $PROCESS_LOG_FILE
IS_STATIC_IP=$(cat $CONFIG_FILE_PATH | grep -E 'BOOTPROTO=static|BOOTPROTO=none')
echo $(date -u)' Static ip test returned '$IS_STATIC_IP >> $PROCESS_LOG_FILE
if [ ! -z $IS_STATIC_IP ];
then
echo $(date -u)" Static IP configuration discovered" >> $PROCESS_LOG_FILE
echo $(date -u)" Processing "$CONFIG_FILE_PATH" file" >> $PROCESS_LOG_FILE
FILE_NAME=$(basename $CONFIG_FILE_PATH)
INTERFACE_NAME=${FILE_NAME#"ifcfg-"}
INTERFACE_NAME=${INTERFACE_NAME%"ifcfg-"}
echo $(date -u)" Interface name "$INTERFACE_NAME" extracted" >> $PROCESS_LOG_FILE
# EDIT instead of replace
echo $(date -u)" Updating configuration file" >> $PROCESS_LOG_FILE
#CONFIG_FILE_PATH=/home/ec2-user/data.txt
echo $(date -u)" Processing DEVICE section">> $PROCESS_LOG_FILE
OLD_VALUE=$(cat $CONFIG_FILE_PATH | grep DEVICE)
NEW_VALUE='DEVICE="'$INTERFACE_NAME'"'
if [ ! -z $OLD_VALUE ];
then
sed -i -e "s|$OLD_VALUE|$NEW_VALUE|" $CONFIG_FILE_PATH
fi
cat $CONFIG_FILE_PATH>> $PROCESS_LOG_FILE
echo $(date -u)" Processing NAME section">> $PROCESS_LOG_FILE
OLD_VALUE=$(cat $CONFIG_FILE_PATH | grep NAME)
NEW_VALUE='NAME="'$INTERFACE_NAME'"'
if [ ! -z $OLD_VALUE ];
then
sed -i -e "s|$OLD_VALUE|$NEW_VALUE|" $CONFIG_FILE_PATH
fi
cat $CONFIG_FILE_PATH>> $PROCESS_LOG_FILE
echo $(date -u)" Processing BOOTPROTO section">> $PROCESS_LOG_FILE
OLD_VALUE=$(cat $CONFIG_FILE_PATH | grep BOOTPROTO)
NEW_VALUE='BOOTPROTO="dhcp"'
if [ ! -z $OLD_VALUE ];
then
sed -i -e "s|$OLD_VALUE|$NEW_VALUE|" $CONFIG_FILE_PATH
fi
cat $CONFIG_FILE_PATH>> $PROCESS_LOG_FILE
echo $(date -u)" Processing ONBOOT section">> $PROCESS_LOG_FILE
OLD_VALUE=$(cat $CONFIG_FILE_PATH | grep ONBOOT)
NEW_VALUE='ONBOOT="yes"'
if [ ! -z $OLD_VALUE ];
then
sed -i -e "s|$OLD_VALUE|$NEW_VALUE|" $CONFIG_FILE_PATH
fi
cat $CONFIG_FILE_PATH>> $PROCESS_LOG_FILE
echo $(date -u)" Processing TYPE section">> $PROCESS_LOG_FILE
OLD_VALUE=$(cat $CONFIG_FILE_PATH | grep TYPE)
NEW_VALUE='TYPE="Ethernet"'
if [ ! -z $OLD_VALUE ];
then
sed -i -e "s|$OLD_VALUE|$NEW_VALUE|" $CONFIG_FILE_PATH
fi
cat $CONFIG_FILE_PATH>> $PROCESS_LOG_FILE
echo $(date -u)" Processing USERCTL section">> $PROCESS_LOG_FILE
OLD_VALUE=$(cat $CONFIG_FILE_PATH | grep USERCTL)
NEW_VALUE='USERCTL="yes"'
if [ ! -z $OLD_VALUE ];
then
sed -i -e "s|$OLD_VALUE|$NEW_VALUE|" $CONFIG_FILE_PATH
fi
cat $CONFIG_FILE_PATH>> $PROCESS_LOG_FILE
echo $(date -u)" Processing IPV6INIT section">> $PROCESS_LOG_FILE
OLD_VALUE=$(cat $CONFIG_FILE_PATH | grep IPV6INIT)
NEW_VALUE='IPV6INIT="no"'
if [ ! -z $OLD_VALUE ];
then
sed -i -e "s|$OLD_VALUE|$NEW_VALUE|" $CONFIG_FILE_PATH
fi
cat $CONFIG_FILE_PATH>> $PROCESS_LOG_FILE
echo $(date -u)" Processing NM_CONTROLLED section">> $PROCESS_LOG_FILE
OLD_VALUE=$(cat $CONFIG_FILE_PATH | grep NM_CONTROLLED=yes)
NEW_VALUE='NM_CONTROLLED=no"'
if [ ! -z $OLD_VALUE ];
then
sed -i -e "s|$OLD_VALUE|$NEW_VALUE|" $CONFIG_FILE_PATH
fi
cat $CONFIG_FILE_PATH>> $PROCESS_LOG_FILE
echo $(date -u)" Processing PERSISTENT_DHCLIENT section">> $PROCESS_LOG_FILE
echo 'PERSISTENT_DHCLIENT="1"' >> $CONFIG_FILE_PATH
cat $CONFIG_FILE_PATH>> $PROCESS_LOG_FILE
echo $(date -u)" Processing GATEWAY section by removing it if exists">> $PROCESS_LOG_FILE
OLD_VALUE=$(cat $CONFIG_FILE_PATH | grep GATEWAY)
NEW_VALUE=''
if [ ! -z $OLD_VALUE ];
then
sed -i -e "s|$OLD_VALUE|$NEW_VALUE|" $CONFIG_FILE_PATH
fi
cat $CONFIG_FILE_PATH>> $PROCESS_LOG_FILE
echo $(date -u)" Processing HWADDR section by removing it if exists">> $PROCESS_LOG_FILE
OLD_VALUE=$(cat $CONFIG_FILE_PATH | grep HWADDR)
NEW_VALUE=''
if [ ! -z $OLD_VALUE ];
then
sed -i -e "s|$OLD_VALUE|$NEW_VALUE|" $CONFIG_FILE_PATH
fi
cat $CONFIG_FILE_PATH>> $PROCESS_LOG_FILE
echo $(date -u)" Processing BROADCAST section by removing it if exists">> $PROCESS_LOG_FILE
OLD_VALUE=$(cat $CONFIG_FILE_PATH | grep BROADCAST)
NEW_VALUE=''
if [ ! -z $OLD_VALUE ];
then
sed -i -e "s|$OLD_VALUE|$NEW_VALUE|" $CONFIG_FILE_PATH
fi
cat $CONFIG_FILE_PATH>> $PROCESS_LOG_FILE
echo $(date -u)" Processing IPADDR section by removing it if exists">> $PROCESS_LOG_FILE
OLD_VALUE=$(cat $CONFIG_FILE_PATH | grep IPADDR)
NEW_VALUE=''
if [ ! -z $OLD_VALUE ];
then
sed -i -e "s|$OLD_VALUE|$NEW_VALUE|" $CONFIG_FILE_PATH
fi
cat $CONFIG_FILE_PATH>> $PROCESS_LOG_FILE
echo $(date -u)" Processing NETMASK section by removing it if exists">> $PROCESS_LOG_FILE
OLD_VALUE=$(cat $CONFIG_FILE_PATH | grep NETMASK)
NEW_VALUE=''
if [ ! -z $OLD_VALUE ];
then
sed -i -e "s|$OLD_VALUE|$NEW_VALUE|" $CONFIG_FILE_PATH
fi
cat $CONFIG_FILE_PATH>> $PROCESS_LOG_FILE
echo $(date -u)" Processing NETWORK section by removing it if exists">> $PROCESS_LOG_FILE
OLD_VALUE=$(cat $CONFIG_FILE_PATH | grep NETWORK)
NEW_VALUE=''
if [ ! -z $OLD_VALUE ];
then
sed -i -e "s|$OLD_VALUE|$NEW_VALUE|" $CONFIG_FILE_PATH
fi
cat $CONFIG_FILE_PATH>> $PROCESS_LOG_FILE
echo $(date -u)" Processing DNS1 section by removing it if exists">> $PROCESS_LOG_FILE
OLD_VALUE=$(cat $CONFIG_FILE_PATH | grep DNS1)
NEW_VALUE=''
if [ ! -z $OLD_VALUE ];
then
sed -i -e "s|$OLD_VALUE|$NEW_VALUE|" $CONFIG_FILE_PATH
fi
cat $CONFIG_FILE_PATH>> $PROCESS_LOG_FILE
echo $(date -u)" Processing DNS2 section by removing it if exists">> $PROCESS_LOG_FILE
OLD_VALUE=$(cat $CONFIG_FILE_PATH | grep DNS2)
NEW_VALUE=''
if [ ! -z $OLD_VALUE ];
then
sed -i -e "s|$OLD_VALUE|$NEW_VALUE|" $CONFIG_FILE_PATH
fi
cat $CONFIG_FILE_PATH>> $PROCESS_LOG_FILE
echo $(date -u)" Processing IPV4_FAILURE_FATAL section by removing it if exists">> $PROCESS_LOG_FILE
OLD_VALUE=$(cat $CONFIG_FILE_PATH | grep IPV4_FAILURE_FATAL)
NEW_VALUE=''
if [ ! -z $OLD_VALUE ];
then
sed -i -e "s|$OLD_VALUE|$NEW_VALUE|" $CONFIG_FILE_PATH
fi
cat $CONFIG_FILE_PATH>> $PROCESS_LOG_FILE
echo $(date -u)" Processing DEFROUTE section by removing it if exists">> $PROCESS_LOG_FILE
OLD_VALUE=$(cat $CONFIG_FILE_PATH | grep DEFROUTE)
NEW_VALUE=''
if [ ! -z $OLD_VALUE ];
then
sed -i -e "s|$OLD_VALUE|$NEW_VALUE|" $CONFIG_FILE_PATH
fi
cat $CONFIG_FILE_PATH>> $PROCESS_LOG_FILE
echo $(date -u)" Processing PREFIX section by removing it if exists">> $PROCESS_LOG_FILE
OLD_VALUE=$(cat $CONFIG_FILE_PATH | grep PREFIX)
NEW_VALUE=''
if [ ! -z $OLD_VALUE ];
then
sed -i -e "s|$OLD_VALUE|$NEW_VALUE|" $CONFIG_FILE_PATH
fi
cat $CONFIG_FILE_PATH>> $PROCESS_LOG_FILE
echo $(date -u)" Clean up empty lines">> $PROCESS_LOG_FILE
sed -i '/^$/d' $CONFIG_FILE_PATH
IS_NETWORK_RESTART_REQUIRED="True"
else
echo $(date -u)" IP set to DHCP "$IS_STATIC_IP >> $PROCESS_LOG_FILE
fi
done
if [ ! -z $IS_NETWORK_RESTART_REQUIRED ];
then
echo $(date -u)" Restarting network" >> $PROCESS_LOG_FILE
service network restart
rm -rf /etc/init.d/reiphandler
echo $(date -u)" Preparing to reboot" >> $PROCESS_LOG_FILE
reboot
fi
echo $(date -u)" Done" >> $PROCESS_LOG_FILE
echo $(date -u)" Removing Lock File" >> $PROCESS_LOG_FILE
# fi
else
echo $(date -u)" We're in VC. Suppressing all activity..." >> $PROCESS_LOG_FILE
fi
rm -rf ${LOCKFILE}
}
stop(){
# Remove our lock file
rm -rf ${LOCKFILE}
# Run that command that we wanted to run
echo $(date -u)" ReIP handler stopped" >> $PROCESS_LOG_FILE
}
case "$1" in
start) start;;
stop) stop;;
*)
echo $"Usage: $0 {start|stop}"
exit 1
esac
exit 0