#!/bin/bash

set -o errexit
set -o nounset
set -o pipefail
#set -o xtrace

zkk_crypt_conf=/etc/zkk-crypt/zkk-crypt.conf

if [ ! -f ${zkk_crypt_conf} ] ; then
  echo "${zkk_crypt_conf} missing"
  exit 11
fi

. ${zkk_crypt_conf}

usage () {
  echo "usage:$0 <hostname> <disk> <size> <crypt> [<disk> <size> <crypt> ...]"
  echo "example: create-virsh-host-disks zzzz root 5G y boot 512m N"
  # y=encrypt, N=no encryption
  exit 10
}

zkk_standard_lv_opts=""

if [ $# -lt 3 ] ; then
  usage
fi

my_host=$1
shift
if [ $(($# % 3 )) -ne 0 ] ; then
  usage
fi

declare -a disk
i=1
j=1
for arg ; do
  if [ $i -eq 4 ] ; then i=1 ; ((j++)) ; fi
  if [ $i -eq 2 ] && ! [[ "$arg" =~ ^[0-9]+[mMgG]$ ]] ; then
    echo "size must be a number followed by [mg]"
    exit 9
  elif [ $i -eq 3 ] && ! [[ "$arg" =~ ^[yYnN]$ ]] ; then
    echo "crypt must be 'y' or 'n'"
    exit 8
  elif [ $i -eq 4 ] ; then
    i=1
    ((j++))
  fi
  [[ -n ${disk[$j]+x} ]] && disk[$j]="${disk[$j]} $arg"
  [[ -z ${disk[$j]+x} ]] && disk[$j]="$arg"
  ((i++))
done

for i in $(seq 1 $j) ; do
  name=$(echo ${disk[$i]}|awk '{print $1}')
  size=$(echo ${disk[$i]}|awk '{print $2}')
  cryp=$(echo ${disk[$i]}|awk '{print $3}')
  device=/dev/${zkk_vg}/${zkk_vm_prefix}${my_host}.${name}
  if [[ "$cryp" =~ ^[yY]$ ]] ; then
    if ! [ -e ${device}_enc ] ; then
      ./resources/cssrv02/crypt-lvcreate -n ${zkk_vm_prefix}${my_host}.${name} -L ${size} ${zkk_vg}
    fi
  else
    if ! [ -e ${device} ] ; then
      lvcreate ${zkk_standard_lv_opts} -n ${zkk_vm_prefix}${my_host}.${name} -L ${size} ${zkk_vg}
    fi
  fi
done
