#!/bin/bash
#######################################################
#
# automate-022-configure-cl
# to be called on the landscape 'master' 
# init cluster on first node
#
#
#
#######################################################
#
# License: GPL
# Author: Fabian Herschel 2016
# (c) 2016-2023 SUSE Linux GmbH, Nuremberg, Germany
#
# Preequisites:
# - VMs installed with SLES, cluster sw installed inside VMs
#
# Syntax:
# automate-022-configure-cl [--group=<group>] [--node=<system>]
# Next Automation Script
# 
#
#######################################################
#
set -u

logFile="/var/log/automate-010-install-hana.$$"

#
# QUIET MODE
#

exec 3>&1
#if true; then
#    exec 1>$logFile
#    exec 2>$logFile
#fi

echo "$(date) == Logs are written to $logFile" >&3
source /usr/share/Landscape/bin/get_values
export PATH="$PATH:$LandscapeMain/bin"

GROUP="none"   
node="all" 
force=0     

while [ $# -gt 0 ]; do
    case "$1" in
        --group=* ) GROUP=${1#--group=}
                   ;;
        --node=* ) node=${1#--node=}
                   ;;
        --force )
echo "====== FORCE ========"
                   force=1
                   ;;
    esac
    shift
done

if [ -z "$GROUP" ]; then
	echo "Welcome... I am just doing some SLES automation tasks"
	echo "If any question comes along during the auto installation process, just say 'yes'"
	echo ""
	echo -n "Please enter your group number: "
	read GROUP
	echo ""
	echo "Your group number is $GROUP"
	echo "Press <enter>"
	read
	echo ""
fi

function do_cluster()
{
    local first_node="$1"; shift
    local add_nodes="" add_node_list=""
    while [ $# -gt 0 ]; do
        add_nodes="$add_nodes $1"
        add_node_list="$add_node_list -N $1"
        shift
    done

# TODO: NET_IF and SBD must NOT be static

if [ -n "$first_node" ]; then
	case "$LandscapeSLES" in
	    SLES11* | 11* )
        echo "$(date) == sleha-init on $first_node" >&3
		NET_IF="eth0"
		SBD="/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-part1"
		ssh $first_node /usr/sbin/sleha-init -y csync2
		ssh $first_node /usr/sbin/sleha-init -y -i $NET_IF corosync
		ssh $first_node /usr/sbin/sleha-init -y -s $SBD sbd
		ssh $first_node /usr/sbin/sleha-init -y cluster
		;;
	    SLES12* | 12* )
        echo "$(date) == ha-cluster-init on $first_node" >&3
		NET_IF="eth0"
		SBD="/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-part1"
		ssh $first_node modprobe softdog
		ssh $first_node "echo 'softdog' > /etc/modules-load.d/softdog.conf"
		ssh $first_node systemctl enable sbd
		ssh $first_node /usr/sbin/ha-cluster-init -y csync2
		ssh $first_node /usr/sbin/ha-cluster-init -y -i $NET_IF corosync
		ssh $first_node /usr/sbin/ha-cluster-init -y -s $SBD sbd
		ssh $first_node /usr/sbin/ha-cluster-init -y cluster
		;;
        SLES15* | 15* )
        echo "$(date) == ha-cluster-init on $first_node" >&3
		NET_IF="eth0"
		#SBD="/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-part1"
        ssh $first_node << EOF
            #if [ ! -e "$SBD" ]; then
            #    parted "${SBD%-part*}" mklabel gpt
            #    parted "${SBD%-part*}" mkpart primary 1049kB 106MB
            #fi
EOF
        for addN in $first_node $add_nodes; do
            ssh $addN modprobe softdog
            ssh $addN "echo 'softdog' > /etc/modules-load.d/softdog.conf"
            ssh $first_node systemctl enable sbd
        done
        echo "$first_node: crm cluster init -y  -S" >&3
		ssh $first_node crm cluster init -y  -S # $add_node_list
        for addN in $add_nodes; do
            echo "$addN: crm cluster join -y -c $first_node" >&3
            ssh "$addN" crm cluster join -y -c "$first_node"
            #ssh "$addN" systemctl enable sbd
        done
		;;
	esac
fi
}

function filterSystem()
{
    local system="$@"
    local systemKV
    for systemKV in ${system}; do
        sKey="${systemKV%=*}"; sKey=${sKey^^}
        sValue=${systemKV#*=}
        local SYSTEM_$sKey=$sValue
    done
    # BAUSTELLE
    if [ $GROUP = "all" -a $node = "all" ]; then
        echo "$SYSTEM_SYSTEM"
        #echo "rule 1" >&2
    elif [ $GROUP = "$SYSTEM_OWNER" -a $node = "all" ]; then
        echo "$SYSTEM_SYSTEM"
        #echo "rule 2: node=$node " >&2
    elif [ $GROUP = "all" -a $node = "$SYSTEM_SYSTEM" ]; then
        echo "$SYSTEM_SYSTEM"
        #echo "rule 3" >&2
    elif [ $GROUP = "$SYSTEM_OWNER" -a $node = "$SYSTEM_SYSTEM" ]; then
        echo "$SYSTEM_SYSTEM"
        #echo "rule 4" >&2
    fi
}

#
# For SAPHanaSR we iterate over Lanscape variable LandscapeSAPHanaSR KV-pair sys_site1=<system-name>
#
function filterCluster()
{
    local cluster="$@"
    local clusterKV
    for clusterKV in ${cluster}; do
        cKey="${clusterKV%=*}"; cKey=${cKey^^}
        cValue=${clusterKV#*=}
        local CLUSTER_$cKey=$cValue
    done
    # BAUSTELLE
    if [ "$GROUP" = "all" -a "$node" = "all" ]; then
        echo "$CLUSTER_SYS_SITE1"
        #echo "rule 1" >&2
    elif [ "$GROUP" = "$CLUSTER_OWNER" -a $node = "all" ]; then
        echo "$CLUSTER_SYS_SITE1"
        #echo "rule 2: node=$node " >&2
    elif [ "$GROUP" = "all" -a "$node" = "$CLUSTER_SYS_SITE1" ]; then
        echo "$CLUSTER_SYS_SITE1"
        #echo "rule 3" >&2
    elif [ "$GROUP" = "$CLUSTER_OWNER" -a "$node" = "$CLUSTER_SYS_SITE1" ]; then
        echo "$CLUSTER_SYS_SITE1"
        #echo "rule 4" >&2
    fi
}

#
# For SAPHanaSR we iterate over Lanscape variable LandscapeSAPHanaSR KV-pair sys_site1=<system-name>
# "first_node" is the system configured as sys_site1
# all others (with same group/owner) are additional nodes
#
#for cluster in "${LandscapeSAPHanaSR[@]}"
#do
#    allClusters="$allClusters $(filterCluster $cluster)"
#done

for system in "${LandscapeSystems[@]}"
do
    allSystems="$allSystems $(filterSystem $system)"
done


do_cluster $allSystems
