######################################################################
####function:install keepalived
####author:lance_cao
####create date:2019-11
####modify date:2019-11
######################################################################

#!/bin/bash

set -e
echo "[$(date +'%F %H:%M:%S')] [INFO] useage : sh install_keepalived.sh [setup_mode] [local_ip] [nginx_vip] [other nginx ips] [os]"

if [ $# -ne 5 ]; then
  echo "$(basename $0): Missing script argument"
  echo "$(basename $0) [setup_mode] [local_ip] [nginx_vip] [other nginx ips] [os]"
  exit 1
fi

pd=$PWD
setup_mode=$1
IP=$2
VIP=$3
other_ips=$4
os=${5}
ROUTE_ID=${VIP##*.}
# yum install -y net-tools.x86_64 openssl-devel libnl libnl-devel libnfnetlink-devel

line=$(expr $(ifconfig | grep "$IP" -n | awk -F: '{print $1}') - 1)
ENS=$(ifconfig | sed -n "$line p" | awk -F: '{print $1}')
HOSTNAME=$(hostname)

# 如果已经安装keepalived，就修改配置文件
if command -v keepalived &> /dev/null; then
  echo "keepalived has installed"
else
  echo "install keepalived"
  # 判断系统
  test -z ${os} && echo "操作系统为空" && exit 1
  if [[ ${os} == "ubuntu" ]]; then
    apt install -y keepalived
  else
    yum --disablerepo='*' --enablerepo=singularity-base-repo install -y keepalived
    # 使用 rpm包装的keepalived有默认配置/etc/keepalived/keepalived.conf 先清空
    > /etc/keepalived/keepalived.conf
  fi
fi

if [ ! -d "/etc/keepalived/" ]; then
  mkdir /etc/keepalived/
fi
cd $pd

# 创建keepalived配置文件
if [ ! -f /etc/keepalived/keepalived.conf ]; then
  touch /etc/keepalived/keepalived.conf
  chmod 644 /etc/keepalived/keepalived.conf
fi

# 引用nginx的配置
num=$(grep keepalived-nginx.conf /etc/keepalived/keepalived.conf | wc -l)
if [[ $num -eq 0 ]]; then
  echo "" | tee -a /etc/keepalived/keepalived.conf
  echo "include /etc/keepalived/keepalived-nginx.conf" | tee -a /etc/keepalived/keepalived.conf
fi

if [ $setup_mode -eq "1" ]; then
  cp -rf keepalived_master.conf /etc/keepalived/keepalived-nginx.conf
else
  cp -rf keepalived_backup.conf /etc/keepalived/keepalived-nginx.conf
fi
chmod 644 /etc/keepalived/keepalived-nginx.conf

if grep "virtual_router_id ${ROUTE_ID}" /etc/keepalived/*.conf; then
  ROUTE_ID=$((ROUTE_ID + 1)) # k8s nginx mdd 共用vip时，这个值不能一样，所以nginx + 1, mdd + 2 如果还冲突的话就自行更改把
fi

cp -rf nginx_check.sh /etc/keepalived/nginx_check.sh
chmod +x /etc/keepalived/nginx_check.sh
sed -i s/eth0/$ENS/g /etc/keepalived/keepalived-nginx.conf
sed -i s/hostname/$HOSTNAME/g /etc/keepalived/keepalived-nginx.conf
sed -i s/host_ip/$IP/g /etc/keepalived/keepalived-nginx.conf
sed -i s/nginx_vip/$VIP/g /etc/keepalived/keepalived-nginx.conf
sed -i s/route_id_33/$ROUTE_ID/g /etc/keepalived/keepalived-nginx.conf

# 使用单播模式
for ip in $other_ips; do
  # 跳过本机ip
  if [[ ${ip} != ${IP} ]]; then
    sed -i "/unicast_peer {/a \\        $ip" /etc/keepalived/keepalived-nginx.conf
  fi
done

## server options ##
systemctl daemon-reload
systemctl restart keepalived
systemctl enable keepalived

echo "Keepalived install success "
