#!/bin/ksh

# Auteur : Francois Chambaud / Societe Steria

#####
### Nom du "script shell" : ste_vers_nas.ksh
#

#####
# But :	deplacement des donnees du STE sur le NAS
# Commentaire : script a copier en local et a lancer manuellement apres allocation de la volumetrie NAS par BT SYS SAS.
# Warning : traitement de l'ensemble des "File Systems" en une seule passe. Attention en cas d'interruption du script.
# Algorithme : Recuperation des informations NAS ; Copie des donnees et demontage des "File Systems" ; Edition du fichier "/etc/vfstab" ; Montage des "File Systems" et deplacement des donnees ; Suppression du repertoire "/tempo".
#####

#####
### Historique des modifications
#

# Revision 1.1 - 15/10/2009 - Francois Chambaud : revision initiale.
# Revision 1.2 - 22/10/2009 - Francois Chambaud : traitement des "File Systems" MQM et PRAI.

# Mode "debug"
#set -x

#####
### Declaration des variables
#

revision=1.2

date_traitement=`date +%Y%m%d%H%M%S`
liste_fs_umount='/product /varsoft /users /interfaces /catalog/Sysload /catalog /database'
liste_fs_mount='/product /varsoft /users /interfaces /catalog /catalog/Sysload /database'

#####
### Declaration des fonctions
#

# Controle de la syntaxe de la commande
usage() {
	echo "Usage : `basename $0`"
}

# Test d'une reponse oui/non
test_reponse_oui_non () {
	while [ "${rep_oui_non}" != "o" -o "${rep_oui_non}" != "n" ]; do
		read rep_oui_non
		case "${rep_oui_non}" in
			o)
				break
				;;
			n)
				break
				;;
			*)
				echo 'Tapez "o" ou "n"'
				;;
		esac
	done
}

# Test d'une reponse vide
test_reponse_vide () {
	while true; do
		read rep_baie_qtree
		if [ -z ${rep_baie_qtree} ]; then
			echo 'Entrez une chaine de caractere !'
		else
			break
		fi
	done
}

# Affichage banniere ko et arret
banner_ko () {
	echo
	banner ko
	exit 1
}

# Recuperation des informations NAS
recuperation_informations_nas () {
	echo 'Entrez le nom de la baie NAS (ex. nas002-2066.phys.pack ou nas011-1066.sfr.com) :'
	test_reponse_vide
	baie_nas=${rep_baie_qtree}

	echo 'Entrez le nom du qTree (ex. /vol/va01NU_001/qSTE_IU0252 ou /vol/v0993STE001/qsu0195) :'
	test_reponse_vide
	qtree_nas=${rep_baie_qtree}

	echo 'Y-a-t-il des "File Systems" a creer pour MQ Series [o/n] :'
	test_reponse_oui_non
	mqm_nas=${rep_oui_non}

	echo 'Y-a-t-il un "File System" a creer pour le PRA      [o/n] :'
	test_reponse_oui_non
	pra_nas=${rep_oui_non}

	echo "Nom de la baie : ${baie_nas}"
	echo "Nom du qTree   : ${qtree_nas}"

	if [ ${mqm_nas} = "o" ]; then
		echo '"File Systems" MQ Series a creer ? : oui'
	else
		echo '"File Systems" MQ Series a creer ? : non'
	fi

	if [ ${pra_nas} = "o" ]; then
0		echo '"File System" PRA a creer ? : oui'
	else
		echo '"File System" PRA a creer ? : non'
	fi

	echo 'Confirmez [o/n] :'
	test_reponse_oui_non
	if [ ${rep_oui_non} = "n" ]; then
		echo 'Abandon !'
		exit
	fi
}

# Copie des donnees et demontage des "File Systems"
copie_donnees_et_demontage_fs () {
	echo '===> Copie des donnees et demontage des "File Systems"'
	mkdir /tempo
	if [ $? != 0 ]; then
		echo 'Creation repertoire /tempo : KO'
		banner_ko
	fi

	for FS in ${liste_fs_umount}; do
		rsync -ax ${FS} /tempo
		if [ $? = 0 ]; then
			echo "Copie ${FS} sous /tempo : OK"
		else
			echo "Copie ${FS} sous /tempo : KO"
			banner_ko
		fi

		sync; sync; sync; sync

		umount -f ${FS}
		if [ $? = 0 ]; then
			echo "Demontage ${FS} : OK"
		else
			echo "Demontage ${FS} : KO"
			banner_ko
		fi
	done
}

# Edition du fichier "/etc/vfstab"
edition_vfstab () {
	echo '===> Edition du fichier "/etc/vfstab"'
	cp -p /etc/vfstab /etc/vfstab.${date_traitement}
	if [ $? = 0 ]; then
		echo "Copie /etc/vfstab (/etc/vfstab.${date_traitement}) : OK"
	else
		echo 'Copie /etc/vfstab : KO'
		banner_ko
	fi

	echo '(A)ncienne ou (n)ouvelle norme NAS ? [a/n] :'
	while [ "${rep_norme}" != "a" -o "${rep_norme}" != "n" ]; do
		read rep_norme
		case "${rep_norme}" in
			a)
				break
				;;
			n)
				break
				;;
			*)
				echo 'Tapez "a" ou "n"'
				;;
		esac
	done

##### Ajouter MQM et PRAI !
	if [ ${rep_norme} = "a" ]; then
		ed -s /etc/vfstab <<-EOF
		g/^\/dev\/md\/dsk\/d10./s/^\/dev/#\/dev/
		7
		s/#//
		$
		a
		#
		# NAS STE
		${baie_nas}:${qtree_nas}_01 - /product nfs - yes rw,hard,bg,nointr,rsize=32768,wsize=32768,timeo=600,vers=3,proto=tcp
		${baie_nas}:${qtree_nas}_02 - /varsoft nfs - yes rw,hard,bg,nointr,rsize=32768,wsize=32768,timeo=600,vers=3,proto=tcp
		${baie_nas}:${qtree_nas}_03 - /users nfs - yes rw,hard,bg,nointr,rsize=32768,wsize=32768,timeo=600,vers=3,proto=tcp
		${baie_nas}:${qtree_nas}_04 - /interfaces nfs - yes rw,hard,bg,nointr,rsize=32768,wsize=32768,timeo=600,vers=3,proto=tcp
		${baie_nas}:${qtree_nas}_05 - /catalog nfs - yes rw,hard,bg,nointr,rsize=32768,wsize=32768,timeo=600,vers=3,proto=tcp
		${baie_nas}:${qtree_nas}_06 - /database nfs - yes rw,hard,bg,nointr,rsize=32768,wsize=32768,timeo=600,vers=3,proto=tcp
		${baie_nas}:${qtree_nas}_07 - /catalog/Sysload nfs - yes rw,hard,bg,nointr,rsize=32768,wsize=32768,timeo=600,vers=3,proto=tcp
		.
		w
		q
		EOF
	else
		ed -s /etc/vfstab <<-EOF
		g/^\/dev\/md\/dsk\/d10./s/^\/dev/#\/dev/
		7
		s/#//
		$
		a
		#
		# NAS STE
		${baie_nas}:${qtree_nas}_product - /product nfs - yes rw,hard,bg,nointr,rsize=32768,wsize=32768,timeo=600,vers=3,proto=tcp
		${baie_nas}:${qtree_nas}_varsoft - /varsoft nfs - yes rw,hard,bg,nointr,rsize=32768,wsize=32768,timeo=600,vers=3,proto=tcp
		${baie_nas}:${qtree_nas}_users - /users nfs - yes rw,hard,bg,nointr,rsize=32768,wsize=32768,timeo=600,vers=3,proto=tcp
		${baie_nas}:${qtree_nas}_interfaces - /interfaces nfs - yes rw,hard,bg,nointr,rsize=32768,wsize=32768,timeo=600,vers=3,proto=tcp
		${baie_nas}:${qtree_nas}_catalog - /catalog nfs - yes rw,hard,bg,nointr,rsize=32768,wsize=32768,timeo=600,vers=3,proto=tcp
		${baie_nas}:${qtree_nas}_database - /database nfs - yes rw,hard,bg,nointr,rsize=32768,wsize=32768,timeo=600,vers=3,proto=tcp
		${baie_nas}:${qtree_nas}_Sysload - /catalog/Sysload nfs - yes rw,hard,bg,nointr,rsize=32768,wsize=32768,timeo=600,vers=3,proto=tcp
		.
		w
		q
		EOF
	fi

##### Controler la reponse !
	diff /etc/vfstab.${date_traitement} /etc/vfstab
	if [ $? = 1 ]; then
		echo 'Controlez les differences ci-dessus et tapez Entree pour continuer'
		read rep_diff
	else
		echo 'Le diff ne correspond pas a ce qui est demande : abandon'
		banner_ko
	fi
}

# Montage des "File Systems" et deplacement des donnees
montage_fs_et_deplacement_donnees () {
	echo 'Montage des "File Systems" et deplacement des donnees'
	for FS1 in ${liste_fs_mount}; do
		mount ${FS1}
		if [ $? = 0 ]; then
			echo "Montage ${FS1} : OK"
		else
			echo "Montage ${FS1} : KO"
			banner_ko
		fi

		FS2=${FS1}

		if [ ${FS1} = "/catalog/Sysload" ]; then
			FS1="/Sysload"
			FS2="/catalog/Sysload"
		fi

		mv /tempo/${FS1}/* ${FS2}
		if [ $? = 0 ]; then
			rmdir /tempo/${FS1}
			echo "Deplacement des donnees du ${FS1} : OK"
		else
			echo "Deplacement des donnees du ${FS1} : KO"
			banner_ko
		fi
	done
}

# Suppression du repertoire "/tempo"
suppression_repertoire_tempo () {
	echo 'Suppression du repertoire "/tempo"'
	rmdir /tempo
	if [ $? = 0 ]; then
		echo 'Suppression du repertoire /tempo : OK'
	else
		echo 'Suppression du repertoire /tempo : KO'
		banner_ko
	fi
}

#####
### Traitement global
#

# Test de la commande
if [ $# -ne 0 ]; then
	usage
	exit 1
fi

# Deroulement des etapes
echo "Deplacement des donnees du STE sur le NAS (revision ${revision})"
recuperation_informations_nas
copie_donnees_et_demontage_fs
edition_vfstab
montage_fs_et_deplacement_donnees
suppression_repertoire_tempo

exit 0

# Affichage du resultat global
echo
banner ok
