mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-30 19:02:27 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			172 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			172 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/bash
 | |
| #USAGE:cfghamn -l shared_data_path -i VIP [-g git_repo_for_xcat_inventory_data] [-x s|d|a]
 | |
| 
 | |
| str_os_type=`uname -s`
 | |
| if [ x"$str_os_type" = "xLinux" ];then
 | |
|     str_dir_name="${0%/*}"
 | |
|     . $str_dir_name/xcatlib.sh
 | |
| else
 | |
|     log_error "Does NOT support non-Linux Operating System."
 | |
|     exit 1
 | |
| fi
 | |
| 
 | |
| # get specific NIC for VIP
 | |
| function get_nic(){
 | |
|     pysical_ip=$1
 | |
|     primary_nic=`ip route | grep $pysical_ip | awk -F '[ \t*]' '{print $3}'|head -1`
 | |
|     if [ -n $primary_nic ]; then
 | |
|         echo $primary_nic:0
 | |
|     fi
 | |
| }
 | |
| 
 | |
| function get_mask(){
 | |
|    pysical_ip=$1
 | |
|    prefix=$(ip route |grep $pysical_ip|awk '{print $1}'|cut -f 2 -d'/')
 | |
|    netmask=$(v4prefix2mask $prefix)
 | |
|    if [ -n $netmask ]; then
 | |
|        echo $netmask
 | |
|    else
 | |
|        echo "255.255.255.0"
 | |
|    fi
 | |
| }
 | |
| 
 | |
| pysical_hostname=$(hostname -s)
 | |
| pysical_ip=$(hostname -i)
 | |
| #create vip hostname
 | |
| function get_vip_hostname(){
 | |
|     vip=$1
 | |
|     vip_hostname=$(getent hosts $vip | awk -F ' ' '{print $2}' | awk -F'.' '{print $1}'| uniq)
 | |
|     if [ -z $vip_hostname ]; then
 | |
|         vip_hostname=${pysical_hostname}-ha
 | |
|     fi
 | |
|     echo $vip_hostname
 | |
| }
 | |
| 
 | |
| return_code=0
 | |
| if [ $# -lt 4 ]; then
 | |
|     echo "USAGE:`basename $0` -l shared_data_path -i VIP"
 | |
|     exit 1
 | |
| fi
 | |
| while getopts "l:i:g:x:n:" opt; do
 | |
|   case $opt in
 | |
|     l)
 | |
|       SHARE_DATA=$OPTARG
 | |
|       echo "The shared data directory is $SHARE_DATA" 
 | |
|       ;;
 | |
|     i)
 | |
|       VIP=$OPTARG
 | |
|       echo "The VIP is $VIP"
 | |
|       ;; 
 | |
|     g)
 | |
|       URL=$OPTARG
 | |
|       echo "xcat-inventory git URL is $URL"
 | |
|       ;;
 | |
|     x)
 | |
|       #options can be s|d|a
 | |
|       # s means setup, d means deactivate, a means activate
 | |
|       XCMD=$OPTARG
 | |
|       ;;
 | |
|     n)
 | |
|       #VIP physical nic
 | |
|       PHYSICALNIC=$OPTARG
 | |
|       ;;
 | |
|     \?)
 | |
|       echo "Invalid option: -$OPTARG"
 | |
|       return_code=1 
 | |
|       ;;
 | |
|   esac
 | |
| done
 | |
| if [ -z $PHYSICALNIC ]; then
 | |
|     VIP_NIC=$(get_nic $pysical_ip)
 | |
| else
 | |
|     VIP_NIC=$PHYSICALNIC
 | |
| fi
 | |
| if [ -n $VIP_NIC ]; then
 | |
|     echo "VIP NIC is :" $VIP_NIC
 | |
| else
 | |
|     echo "Error: cannot get VIP NIC"
 | |
|     return_code=1
 | |
| fi
 | |
| 
 | |
| yum -y install yum-utils
 | |
| 
 | |
| cmdlable=""
 | |
| if [ -n $XCMD ]; then
 | |
|     if [[ "${XCMD}" == "s" || "${XCMD}" == "a" || "${XCMD}" == "d" ]]; then
 | |
|         cmdlable=$XCMD
 | |
|     else
 | |
|         echo "Error: xcatha.py does not support $XCMD option"
 | |
|         return_code=1
 | |
|     fi
 | |
| fi
 | |
| 
 | |
| NETMASK=$(get_mask $pysical_ip) 
 | |
| if [[ -n $NETMASK ]]; then
 | |
|     echo "NETMASK is :" $NETMASK
 | |
| fi
 | |
| VIP_hostname=$(get_vip_hostname $VIP)
 | |
| if [ -n $VIP_hostname ]; then
 | |
|     echo "VIP hostname is :" $VIP_hostname
 | |
| else
 | |
|     echo "Error: cannot define VIP hostname"
 | |
|     return_code=1
 | |
| fi
 | |
| SHARE_DATA_DES=/xcat/HA/$pysical_hostname
 | |
| if [[ "$cmdlable" == "s" ]]; then
 | |
|     mkdir -p $SHARE_DATA_DES
 | |
|     mount|grep -w $SHARE_DATA_DES
 | |
|     if [ $? -ne 0 ]; then 
 | |
|         mount $SHARE_DATA $SHARE_DATA_DES
 | |
|         if [ $? -ne 0 ]; then
 | |
|             echo "mount $SHARE_DATA $SHARE_DATA_DES [failed]"
 | |
|             return_code=1
 | |
|         fi
 | |
|     else
 | |
|         echo "$SHARE_DATA_DES is already mounted"
 | |
|     fi
 | |
| fi
 | |
| if [ -n "$URL" ]; then
 | |
|     rm -rf /root/xcat-mn-data
 | |
|     git clone $URL /root/xcat-mn-data
 | |
| else
 | |
|     echo "There is no xcat-inventory data"
 | |
| fi
 | |
| 
 | |
| if [ $return_code -eq 1 ]; then
 | |
|     echo "Process exit with above error"
 | |
|     exit $return_code
 | |
| else
 | |
|     if [[ "$cmdlable" == "s" ]]; then
 | |
|         echo "Start to configure HA NODE $VIP_hostname"
 | |
|         msg="python /xcatpost/xcatha.py -s -p /$SHARE_DATA_DES -v $VIP -i $VIP_NIC -n $VIP_hostname -m $NETMASK"
 | |
|         echo $msg
 | |
|         python /xcatpost/xcatha.py -s -p /$SHARE_DATA_DES -v $VIP -i $VIP_NIC -n $VIP_hostname -m $NETMASK
 | |
|         if [ $? -ne 0 ]; then
 | |
|             return_code=1
 | |
|         fi
 | |
|     elif [[ "$cmdlable" == "a" ]]; then
 | |
|         echo "Start to activate $VIP_hostname"
 | |
|         python /xcatpost/xcatha.py -a -p /$SHARE_DATA_DES -v $VIP -i $VIP_NIC -n $VIP_hostname -m $NETMASK
 | |
|         if [ $? -eq 0 ]; then
 | |
|              if [ -d /root/xcat-mn-data ]; then
 | |
|                  echo "use xcat-inventory to import Cluster data"
 | |
|                  xcat-inventory import -f /root/xcat-mn-data/cluster.json
 | |
|                  if [ $? -ne 0 ]; then
 | |
|                      return_code=1
 | |
|                  fi
 | |
|              fi
 | |
|         else
 | |
|             return_code=1
 | |
|         fi
 | |
|     elif [[ "$cmdlable" == "d" ]]; then
 | |
|         echo "Start to deactivate $VIP_hostname"
 | |
|         python /xcatpost/xcatha.py -d -v $VIP -i $VIP_NIC
 | |
|         if [ $? -ne 0 ]; then
 | |
|             return_code=1
 | |
|         fi
 | |
|     else
 | |
|         return_code=1
 | |
|     fi
 | |
| fi
 | |
| exit $return_code
 |