#!/bin/bash
#
# (c) 2019-2021 m-privacy GmbH
#
# Last change: ao, 19/Mar/2021
#

RED="\033[31;01m"
BLUE="\033[34;01m"
GREEN="\033[32;01m"
MAGENTA="\033[35;01m"
RESET="\033[00m"

MOUNTPOINT="/tmp/tgpromnt"

if test -z "$2"
then
	echo "Use: $0 source-number target-number"
	echo "Clone rbd image tgpro\$source-number to tgpro\$target-number"
	echo "e.g.: $0 1 2"
	exit
fi

TGNUMSRC="$1"
case "$TGNUMSRC" in
	[123456789])
		;;
	[123456789][0123456789])
		;;
	[123456789][0123456789][0123456789])
		;;
	*)
		echo -e "${RED}Number \"$TGNUMSRC\" is not a number${RESET}"
		exit 1
esac
TGNUMTGT="$2"
case "$TGNUMTGT" in
	[123456789])
		;;
	[123456789][0123456789])
		;;
	[123456789][0123456789][0123456789])
		;;
	*)
		echo -e "${RED}Number \"$TGNUMTGT\" is not a number${RESET}"
		exit 1
esac

TMPFILE=/tmp/tgpro-image-clone.$$

if ! ceph osd pool ls | grep -q rbd
then
	ceph osd pool create rbd 32
fi
rbd pool init rbd

if ! rbd ls | grep "^tgpro$TGNUMSRC$"
then
	echo -e "${RED}Source image tgpro$TGNUMSRC does not exist${RESET}"
	exit 2
fi
if rbd ls | grep "^tgpro$TGNUMTGT$"
then
	echo -e "${RED}Target image tgpro$TGNUMTGT already exists${RESET}"
	exit 3
fi

if rbd device list | grep -q "/dev/rbd0"
then
	echo -e "${RED}/dev/rbd0 is already mapped${RESET}"
	exit 4
fi

echo -e "${BLUE}Copy rbd image tgpro$TGNUMSRC to tgpro$TGNUMTGT now${RESET}"
echo "Press return to continue or CTLR-C to abort"
read dummy

echo -e "${BLUE}Copy image${RESET}"
rbd cp "tgpro$TGNUMSRC" "tgpro$TGNUMTGT"

echo -e "${BLUE}Images now:${RESET}"
rbd ls -l

if ! rbd map "tgpro$TGNUMTGT"
then
	echo -e "${RED}Failed to map image tgpro$TGNUMTGT${RESET}"
	rbd rm "tgpro$TGNUMTGT"
	exit 5
fi

mkdir -p "$MOUNTPOINT"
mount -t ext4 /dev/rbd0p1 "$MOUNTPOINT"
mkdir -p "$MOUNTPOINT/var" "$MOUNTPOINT/home"
mount -t ext4 /dev/rbd0p3 "$MOUNTPOINT/var"
mkdir -p "$MOUNTPOINT/var/log"
mount -t ext4 /dev/rbd0p5 "$MOUNTPOINT/var/log"
mount -t ext4 /dev/rbd0p6 "$MOUNTPOINT/home"

cd "$MOUNTPOINT"

echo -e "${BLUE}Adjust IP addresses${RESET}"
BASEHOST=$(cat etc/hostname|sed -e "s|\([a-zA-Z-][a-zA-Z-]*\)[0-9]*|\1|g")
echo "Base hostname is $BASEHOST"
sed \
	-e "s|CUHOSTNAME=\"\([a-zA-Z][a-zA-Z-]*\)[0-9]*\"|CUHOSTNAME=\"\1$TGNUMTGT\"|g" \
	-e "s|CUIPADDR=\"\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)\.[0-9][0-9]*\"|CUIPADDR=\"\1.$TGNUMTGT\"|g" \
	-e "s|CUIPADDR1=\"\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)\.[0-9][0-9]*\"|CUIPADDR1=\"\1.$TGNUMTGT\"|g" \
	-e "s|CUIPADDR2=\"\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)\.[0-9][0-9]*\"|CUIPADDR2=\"\1.$TGNUMTGT\"|g" \
	-e "s|CUIPADDR3=\"\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)\.[0-9][0-9]*\"|CUIPADDR3=\"\1.$TGNUMTGT\"|g" \
	-e "s|CUIPADDR4=\"\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)\.[0-9][0-9]*\"|CUIPADDR4=\"\1.$TGNUMTGT\"|g" \
	-e "s|CUIPADDR5=\"\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)\.[0-9][0-9]*\"|CUIPADDR5=\"\1.$TGNUMTGT\"|g" \
	-e "s|CUIPADDR6=\"\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)\.[0-9][0-9]*\"|CUIPADDR6=\"\1.$TGNUMTGT\"|g" \
	-e "s|CUIPADDR7=\"\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)\.[0-9][0-9]*\"|CUIPADDR7=\"\1.$TGNUMTGT\"|g" \
	< etc/cu/netconf > $TMPFILE ; cat $TMPFILE > etc/cu/netconf
if test -f etc/cu/netconfcluster
then
	echo "CUGLUSTERENABLE=\"no\"" >> etc/cu/netconfcluster
	echo "CUCEPHENABLE=\"no\"" >> etc/cu/netconfcluster
fi
echo "CUCLUSTERLOADBALANCER=\"no\"" >> etc/cu/netconf
sed \
	-e "s|address \([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)\.[0-9][0-9]*|address \1.$TGNUMTGT|g" \
	< etc/network/interfaces > $TMPFILE ; cat $TMPFILE > etc/network/interfaces
sed \
	-e "s|\([a-zA-Z][a-zA-Z-]*\)[0-9]*|\1$TGNUMTGT|g" \
	< etc/hostname > $TMPFILE ; cat $TMPFILE > etc/hostname
sed \
	-e "s|$BASEHOST\([0-9]\)*|$BASEHOST$TGNUMTGT|g" \
	-e "s|\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)\.[0-9][0-9]* $BASEHOST|\1.$TGNUMTGT $BASEHOST|g" \
	< etc/hosts > $TMPFILE ; cat $TMPFILE > etc/hosts
echo "exit 0" >etc/init.d/firewall
rm -f etc/udev/rules.d/70-persistent-net.rules

echo -e "${BLUE}Cleanup${RESET}"

rm -f $TMPFILE
rm -rf rsbac64.dat var/rsbac64.dat var/log/rsbac64.dat home/rsbac64.dat

cd
umount "$MOUNTPOINT/home"
umount "$MOUNTPOINT/var/log"
umount "$MOUNTPOINT/var"
umount "$MOUNTPOINT"
rbd unmap "tgpro$TGNUMTGT"

rm -rf "$MOUNTPOINT"

echo "Please create a DHCP static host entry in /etc/dhcp/dhcpd.conf now."
echo -e "${BLUE}Ready.${RESET}"
exit 0
