#!/bin/bash

set -e
#set -x

if [ $(id -u) -ne 0 ]; then
	echo "$0 needs root: please use sudo."
	exit 1
fi

# Source Auxilium (args parser)
. /usr/share/auxilium/auxilium.sh

auxilium_init $(basename $0) -m 'Reconfigure an HDD after replacing it'

auxilium_add fo_name -t positional -m 'Resolve by FO name (sdX or Box0Disk0)'

if [ -f "/usr/share/ferreus-orbit/common.sh" ]; then
	. "/usr/share/ferreus-orbit/common.sh"
elif [ -f "share/common.sh" ] ; then
	. "share/common.sh"
elif [ -e "../share/common.sh" ] ; then
	. "../share/common.sh"
else
	echo "Cannot load common.sh: exiting."
	exit 1
fi

auxilium_parse "$@"

fo_lock
get_maj_min(){
  cat "${VAR_PATH}/maj_min_map" | grep ",${1}" | cut -d',' -f1
}

get_real_disk(){
  if [ -L "${SORTED_PATH}/$1" ];then
    local realdisk=$(basename $(realpath ${SORTED_PATH}/${1}))
  else
    local maj_min=$(get_maj_min $1)
    local realdisk="$(lsblk | grep " ${maj_min} " | cut -d' ' -f1)"
  fi
  echo $realdisk
}

readonly OLD_DISK="$AUXILIUM_ARG_fo_name"

readonly REALDISK=$(get_real_disk $OLD_DISK)
readonly OLD_UUID=$(cat /etc/fstab | grep -m1 /srv/node/${OLD_DISK} | awk '{print $1}' | sed -e 's/[#]*UUID=//')

echo "===> udevadm trigger new devices"
udevadm trigger -t devices

echo "===> Checking new disk firmware version"
# No RAID case first.
if [ "${FO_CHASSIS_MODEL}" != "ThinkSystem SR665" ] && ! lshw -class storage -json 2>/dev/null | jq -r '.[]["id"]' | grep -q "raid" ; then
  fo-fw-updater /dev/$REALDISK 
fi

echo "===> Formating /dev/${REALDISK} (for /srv/node/${OLD_DISK}) "
mkfs.xfs -f /dev/${REALDISK} || exit 1
echo "===> Get new UUID"
readonly NEW_UUID=$(blkid -o value -s UUID /dev/${REALDISK})
echo "===> Uncommenting from fstab, ${OLD_UUID} to ${NEW_UUID}"
sed -i "s/[#]*UUID=${OLD_UUID}/UUID=${NEW_UUID}/" /etc/fstab
echo "===> Reloading systemd after fstab edit"
systemctl daemon-reload
echo "===> Mounting /srv/node/${OLD_DISK}"
mount /srv/node/${OLD_DISK} || exit 1
sleep 2
if mount | grep "/srv/node/$OLD_DISK}"; then
  echo "===> Changing disk's owner"
  chown swift:swift /srv/node/${OLD_DISK}
else
  echo "Device not mounted"
  exit 1
fi
echo "===> Truncating /var/log/kern-legacy.log"
if [ -e /var/log/kern-legacy.log ] ; then
  echo -n "" >/var/log/kern-legacy.log
fi

echo
echo "Device /srv/node/${OLD_DISK} correctly replace"
