#!/bin/bash

#############################################################
# script description:
# filesystem(-f):
# | -- btrfs -- | -- ext4 -- |
# volumeGroup(-v):
# | -- vg0 -- | -- vg1 -- |
# sizeG(-s): unit:g
# | -- 1000g -- | -- 2000g -- |
# auth: jalin
# time: 2019-05-01
# copyright: terra-master tec
#############################################################
source /etc/tos/scripts/scripts

script_get_lock > /dev/null
[ $? -ne 0 ] && exit 1

#########################
# The command line help #
#########################
display_help() {
    echo "Usage:`basename $0` -f[filesystem] -s[sizeG] -u[uuid] -v[Raid]"
    echo "\tuuid: use uuidgen -t -r to generate."
    echo "\tsizeG: unit:GB or percent"
    script_put_lock > /dev/null
    exit 1
}

# get parameter list
TOS_FILESYSTEM="btrfs"
TOS_RAID=""
TOS_SIZEG="100%"
# create new uuid
TOS_UUID=`uuidgen -t -r`
TOS_LABEL="TOS_VOL_$(date +'%Y%m%d')"
while getopts "f:v:s:u:" opt
do
    case $opt in
        f) TOS_FILESYSTEM=$OPTARG ;; # get filesystem
        v) TOS_RAID=$OPTARG ;; # get volumeGroup
        s) TOS_SIZEG=$OPTARG ;; # get sizeG (unit:g)
        u) TOS_UUID=$OPTARG ;; # get uuid
    esac
done

if [ -z "$TOS_RAID" ]; then
    echo -e $usage
    script_put_lock > /dev/null
    exit 1
fi
# fix 4.19.165 bug
check_raid0_default_layout

TOS_VOLUME_ROOT=/tmp/volume
[ ! -e $TOS_VOLUME_ROOT ] && mkdir $TOS_VOLUME_ROOT

TOS_RAID_NAME=`basename $TOS_RAID`
TOS_RAID_UUID=`uuidgen -t -r`
TOS_VOLUMEGROUP=`pvs -o vg_name $TOS_LVM_OPTS $TOS_RAID 2>/dev/null|sed s/[[:space:]]//g`
if [ -z "$TOS_VOLUMEGROUP" ]; then
    TOS_VOLUMEGROUP=vg${TOS_RAID_NAME:2}
    vgcreate -y --addtag ${TOS_RAID_UUID} ${TOS_VOLUMEGROUP} ${TOS_RAID} >/dev/null
fi
# read vg_free (unit:g)...
VG_FREE=`vgs -o vg_free $TOS_LVM_OPTS --units g $TOS_VOLUMEGROUP|sed s/[[:space:]]//g`
if [ $? -ne 0 ]; then # storage pool isn't exists...
    echo -e $usage
    script_put_lock > /dev/null
    exit 1
fi
TOS_RAID_UUID=`vgs -o vg_tags $TOS_LVM_OPTS $TOS_VOLUMEGROUP|sed s/[[:space:]]//g`
# get lvname
TOS_KEY=0
while [ 1 ]; do
    TOS_LV_NAME=lv${TOS_KEY}
    check_name_exists ${TOS_KEY}
    [ $? -eq 0 ] && break
    let TOS_KEY=TOS_KEY+1
done
TOS_BLK=/dev/mapper/${TOS_VOLUMEGROUP}-${TOS_LV_NAME}
TOS_MNT_PATH=/Volume${TOS_KEY}
iniparse -a -f /etc/volume/storage.conf -s "$TOS_RAID_UUID" -system

# 取得debug
debugFile="$TOS_VOLUME_ROOT/${TOS_LV_NAME}"
process=0
echo "makeRaid:${TOS_BLK}:${TOS_MNT_PATH}:$TOS_UUID:0:${process}" > $debugFile
if [ "$TOS_SIZEG" = "100%" ]; then
    lvcreate -y -l 100%FREE -n $TOS_LV_NAME $TOS_VOLUMEGROUP >/dev/null
else
    /etc/tos/scripts/compareSpace ${VG_FREE:0:0-1}  ${TOS_SIZEG:0:0-1}
    if [ $? -eq 0 ]; then
        lvcreate -y -L $TOS_SIZEG -n $TOS_LV_NAME $TOS_VOLUMEGROUP >/dev/null
    else
        lvcreate -y -l 100%FREE -n $TOS_LV_NAME $TOS_VOLUMEGROUP >/dev/null
    fi
fi
process=60
echo "makeRaid:${TOS_BLK}:${TOS_MNT_PATH}:$TOS_UUID:0:${process}" > $debugFile

formatDevice(){
	local fs=$1
	local blk=$2
	if [ "$fs" = "btrfs" ]; then
		mkfs.btrfs -f -L "$TOS_LABEL" -U "$TOS_UUID" $blk
		mount -t btrfs -o $MNTOPT_BTRFS $blk $TOS_MNT_PATH
        if [ $? -eq 0 ]; then
            iniparse -a -f /etc/volume/volume.conf -s "$TOS_UUID" -system
        fi
	elif [ "$fs" = "xfs" ]; then
        mkfs.xfs -f -b size=4096 -L "xfs_$(date +'%Y%m%d')" -m uuid="$TOS_UUID" $blk
    	mount -t xfs -o $MNTOPT_XFS $blk $TOS_MNT_PATH
    	if [ $? -eq 0 ]; then
      		iniparse -a -f /etc/volume/volume.conf -s "$TOS_UUID" -system
      		quotacheck -uvgmf $TOS_MNT_PATH
      		quotaon -a
    	if
	else
  		echo -e "y\n" | mke2fs -t ext4 -m .5 -b 4096 -L "$TOS_LABEL" -U "$TOS_UUID" $blk
  		wait $!
  		mount -t ext4 -o $MNTOPT_EXT4 $blk $TOS_MNT_PATH
  		if [ $? -eq 0 ]; then
			iniparse -a -f /etc/volume/volume.conf -s "$TOS_UUID" -system
    		quotacheck -uvgmf $TOS_MNT_PATH
    		quotaon -a
  		fi
	fi
    /etc/init.d/nas/mkbase
}

if [ -b $TOS_BLK ]; then
    [ ! -e $TOS_MNT_PATH ] && mkdir -m 777 -p $TOS_MNT_PATH
    process=80
    echo "makeRaid:${TOS_BLK}:${TOS_MNT_PATH}:$TOS_UUID:0:${process}" > $debugFile
    # format block device...
    formatDevice "$TOS_FILESYSTEM" "$TOS_BLK"

    df-json | grep "$TOS_MNT_PATH$" > /dev/null
    # mount successful to init /usr/local/...
    if [ $? -eq 0 ]; then
      for svrname in $(ls /etc/sc.d/); do
          [ "$svrname" = "nginx" -o "$svrname" = "ssh.service" ] && continue
          in_Array "$svrname"
          [ $? -eq 0 ] && continue
          ter_service $svrname restart >/dev/null 2>&1
      done
      process=100
      echo "makeRaid:${TOS_BLK}:${TOS_MNT_PATH}:$TOS_UUID:0:${process}" > $debugFile
    else
        echo "makeRaid:${TOS_BLK}:${TOS_MNT_PATH}:$TOS_UUID:1:failed" > $debugFile
        # all process over
        script_put_lock > /dev/null
        exit 1
    fi
fi

sleep 1
# all process over
script_put_lock > /dev/null
exit 0
