
#!/bin/sh
# File	: clone_vol-lun.sh
# By	: Maarten.deBoer@Atos.net, 201022
# Subject	: Script to clone a volume (with LUNs) and map the LUN
PGM=`basename $0|cut -d\. -f1`
VER="0.1"
LOG="${HOME}/log/${PGM}.log"
SSH="/usr/bin/ssh -n"

VOLNAME="bc_atl02_vol002"
SNAPLIST=""
SNAPNAME="nightly.1"
FILER="alnlfas3170b-mgt"
#LUNHOST="ALNLCLN012"
LUNHOST="ALNLCLN021"
LUNLIST="alnlcluster02/LUN_CLUSTER02_2_CSV1 alnlcluster02/LUN_CLUSTER02_4_CSV3"
CLONENAME=""
REMOVE=""
LIST=""

USAGE()
{
  echo "Usage: ${PGM} [<options>]"
  echo "  Version: ${VER}"
  echo "  options              :"
  echo "    -h | --help        : this help"
  echo "    -f | --filer       : Filer (7mode system) name (${FILER})"
  echo "    --lunlist          : define a list with LUNs (${LUNLIST}) (space, comma / semicolon separated)"
  echo "    -s | --snaplist    : Snapshot list"
  echo "    -n | --snapname    : snapName (${SNAPNAME})"
  echo "    -v | --vol         : Volumename"
  echo "    --remove           : Remove LUN-MAPs & Clone"
  echo "    -V                 : Version"
  echo "    -x                 : set -x"
}
# Check options
if [ $# -eq 0 ]; then
  echo "No option(s) given. So not to know what to do. Exiting..."; echo; USAGE;
  exit 1
fi
while [ ${#} -ge 1 ]
  do
  case ${1} in
    -h | --help) USAGE; exit 1 ;;
    -f | --filer) VOLNAME="${2}" ; shift ;;
    -v | --vol) VOLNAME="${2}" ; shift ;;
# change the ";" & "," into " " in LUNLIST entry
    --lunlist) LUNLIST=`echo "${2}"|sed 's/\;/ /g'|sed 's/\,/ /g'` ; shift ;;
    -n | --snapname) SNAPNAME="${2}" ; shift ;;
    -s | --snaplist) SNAPLIST=1 ;;
    -l | --list) LIST=1 ;;
    --remove) REMOVE=1 ;;
    -V) echo "${PGM}: v${VER}"; exit 3 ;;
    -x)  set -x ;;
    *)  echo "Option ${1} not known."; USAGE; exit 1 ;;
  esac
    shift
done


# $ ssh alnlfas3170b-mgt 'vol clone create bc_atl02_vol002_clone_nightly1 -s none -b bc_atl02_vol002 nightly.1'
# $ ssh alnlfas3170b-mgt 'lun online /vol/bc_atl02_vol002_clone_nightly1/alnlcluster02/LUN_CLUSTER02_2_CSV1'
# $ ssh alnlfas3170b-mgt 'lun online /vol/bc_atl02_vol002_clone_nightly1/alnlcluster02/LUN_CLUSTER02_4_CSV3'
# $ ssh alnlfas3170b-mgt 'lun map /vol/bc_atl02_vol002_clone_nightly1/alnlcluster02/LUN_CLUSTER02_2_CSV1 ALNLCLN021'
# $ ssh alnlfas3170b-mgt 'lun map /vol/bc_atl02_vol002_clone_nightly1/alnlcluster02/LUN_CLUSTER02_4_CSV3 ALNLCLN021'


echo "`date` ${PGM} v${VER} started."|tee -a ${LOG}
echo "FILER=${FILER}"
echo "LIST=${LIST}"
echo "LUNLIST=${LUNLIST}"
echo "LUNHOST=${LUNHOST}"
echo "SNAPLIST=${SNAPLIST}"
echo "SNAPNAME=${SNAPNAME}"
echo "CLONENAME=${CLONENAME}"
echo "REMOVE=${REMOVE}"
echo "VOLNAME=${VOLNAME}"
sleep 1

if [ "${VOLNAME}" = "" ]; then
  echo "  NO volumename (-v | --vol) defined. Exiting ..."|tee -a ${LOG}
  exit 2
fi  # VOLNAME

if [ "${SNAPNAME}" = "" ]; then
  echo "  NO snapname (-n | --snapname) defined. Exiting ..."|tee -a ${LOG}
  exit 3
fi  # VOLNAME

# Define the (new) CloneVolumeName
# Remove the "." in the SnapName
SNAPNAME2=`echo "${SNAPNAME}"|sed 's/\.//g'`
CLONENAME="/vol/${VOLNAME}_clone_${SNAPNAME2}"
echo "CLONENAME=${CLONENAME}"
sleep 1

# Check volumename
ANSW=`${SSH} ${FILER} "vol status ${VOLNAME}"` 1> /dev/null 2>&1
if [ "${ANSW}"  != "" ]; then
  echo "${ANSW}"
  if [ ${SNAPLIST} ]; then
    ${SSH} ${FILER} "snap list ${VOLNAME}"
    exit 0
  fi  # SNAPLIST
# Check clonevolumename
  ANSW=`${SSH} ${FILER} "vol status ${CLONENAME}"` 1> /dev/null 2>&1
  if [ "${ANSW}" = "" ]; then
    echo "  Cloning volume ${VOLNAME} to ${CLONENAME} ..."|tee -a ${LOG}
    ${SSH} ${FILER} "vol clone create ${CLONENAME} -s none -b ${VOLNAME} ${SNAPNAME}"

    for LUN in ${LUNLIST} 
    do
      echo "LUN: ${CLONENAME}/${LUN} "
      ${SSH} ${FILER} "lun show ${CLONENAME}/${LUN}"

      ${SSH} ${FILER} "lun online ${CLONENAME}/${LUN}"
      ${SSH} ${FILER} "lun map ${CLONENAME}/${LUN} ${LUNHOST}"

      ${SSH} ${FILER} "lun show -v ${CLONENAME}/${LUN}"



    done  # LUN

  else  # CLONENAME
    echo "  Clone(volume)name (${CLONENAME}) found at filer ${FILER}."|tee -a ${LOG}
    echo "${ANSW}"
# List the LUNs
    if [ ${LIST} ]; then
      echo ""
      echo "  LIST of LUNs:"
      ${SSH} ${FILER} "lun show" | grep "${CLONENAME}"
      echo ""
    fi  # LIST

# When REMOVE, then remove clone
    if [ ${REMOVE} ]; then

      echo "  Removing (offline & destroy) clone volume ${CLONENAME} ..."|tee -a ${LOG}
      ${SSH} ${FILER} "vol offline ${CLONENAME}"
      ${SSH} ${FILER} "vol destroy ${CLONENAME} -f"

    fi  # REMOVE

  fi  # ${CLONENAME}
else  # ${VOLNAME}
  echo "  Volumename (${VOLNAME}) NOT found at filer ${FILER}. Exiting ..."|tee -a ${LOG}
  exit 5
fi  # ${VOLNAME}





echo "`date` ${PGM} v${VER} finished."|tee -a ${LOG}
exit 0

