#!/bin/bash
# DK 02/2008
#
# Calculate scores for linux-ha R2 (heartbeat+crm/pacemaker)

if [ -n "$1" ]
then
	. $1
else
	echo -n "Resource Name? "
	read res
	echo

	echo -n "Node Name 1? "
	read node1
	echo

	echo -n "Node Name 2? "
	read node2
	echo

	prefok=no
	while [ "$prefok" = "no" ]
	do
		echo -n "Where do you want to run \"$res\" by default? "
		read prefnode
		if [ "$prefnode" = "$node1" -o "$prefnode" = "$node2" ]
		then
			prefok=yes
		else
			echo "$prefnode is neither node1 ($node1) nor node2 ($node2)."
		fi
	done
	echo

	numfailures=notanumber
	while ! echo $numfailures | grep -q "^[0-9]*$"
	do
		echo -n "How many times do you want to allow \"$res\" to fail before failing over to the other node? "
		read numfailures
	done
	echo

	while ! echo $failedeqnotrunning | grep -q "^[yn]$"
	do
		echo "Do you want to treat a \"not running\" resource in the same way as a \"failed\" resource?"
		echo -n "If you don't know what the difference for the cluster is, say \"y\". [yn] "
		read failedeqnotrunning
	done
	echo

	echo -n "Do you want to save this config for later use? [yn] "
	read saveconfig
	echo
	
	writecfg() {
		if [ -n "$1" ]
		then
			echo Writing configfile $1
			echo
			echo res=$res > $1
			echo node1=$node1 >> $1
			echo node2=$node2 >> $1
			echo prefnode=$prefnode >> $1
			echo numfailures=$numfailures >> $1
			echo failedeqnotrunning=$failedeqnotrunning >> $1
		fi
	}
	
	if [ "$saveconfig" = "y" ]
	then
		clusterconfigfile=clusterconfig
		if [ -r "clusterconfig" ]
		then
			echo -n "File \"$clusterconfigfile\" already exists. Overwrite? [yn] "
			read overwrite
			if [ "$overwrite" = "y" ]
			then
				writecfg $clusterconfigfile
			else if [ "$overwrite" = "n" ]
				then
					echo -n "New filename? "
					read clusterconfigfile
					writecfg $clusterconfigfile
				fi
			fi
		else
			writecfg $clusterconfigfile
		fi
	fi
fi
#echo res $res node1 $node1 node2 $node2 prefnode $prefnode numfailures $numfailures

if [ "$failedeqnotrunning" = "y" ]
then
        if [ "$node1" = "$prefnode" ]
        then
                node1pref=$((200+($numfailures-1)*100))
                node2pref=150
        else
                node1pref=150
                node2pref=$((200+($numfailures-1)*100))
        fi
        stick=0
        failstick=-100
else
	if [ "$node1" = "$prefnode" ]
	then
		node1pref=200
		node2pref=150
	else
		node1pref=150
		node2pref=200
	fi
	stick=$((($numfailures-1)*100))
	failstick=-100
fi

echo \<crm_config\>
echo \ \ \<cluster_property_set id\=\"cib-bootstrap-options\"\>
echo \ \ \ \ \<attributes\>
echo \ \ \ \ \ \ \<nvpair\ name\=\"default-resource-stickiness\"\ id\=\"default-resource-stickiness\"\ value\=\"$stick\"\/\>
echo \ \ \ \ \ \ \<nvpair\ name\=\"default-resource-failure-stickiness\"\ id\=\"default-resource-failure-stickiness\"\ value\=\"$failstick\"\/\>
echo \ \ \ \ \<\/attributes\>
echo \ \ \<\/cluster_property_set\>
echo \<\/crm_config\>
echo \<constraints\>
echo \<rsc_location\ id\=\"rsc_location_${res}\"\ rsc\=\"$res\"\>
echo \ \ \<rule\ id\=\"rsc_location_${res}_rule_1\" score\=\"$node1pref\"\>
echo \ \ \ \ \ \<expression\ id\=\"rsc_location_${res}_rule_1\_expr\"\ attribute\=\"\#uname\"\ operation\=\"eq\"\ value\=\"$node1\"\/\>
echo \ \ \<\/rule\>
echo \ \ \<rule\ id\=\"rsc_location_${res}_rule_2\" score\=\"$node2pref\"\>
echo \ \ \ \ \ \<expression\ id\=\"rsc_location_${res}_rule_2\_expr\"\ attribute\=\"\#uname\"\ operation\=\"eq\"\ value\=\"$node2\"\/\>
echo \ \ \<\/rule\>
echo \<\/rsc_location\>
echo \<\/constraints\>
