introduce image management
This commit is contained in:
@@ -7,10 +7,10 @@ if [ $LOGLEVEL -gt "2" ]; then echo "configuration loaded"; fi
|
||||
#check if we are root and wrap if we are not
|
||||
U=`/usr/bin/whoami`
|
||||
if [ $U != "root" ]; then
|
||||
if [ ! -z $1 ]; then A=$1; else A="bla"; fi
|
||||
if [ ! -z $2 ]; then B=$2; else B="bla"; fi
|
||||
if [ ! -z $3 ]; then C=$3; else C="bla"; fi
|
||||
/usr/bin/wrap-nlvmi $A $B $C && exit
|
||||
if [ ! -z $1 ]; then A="$1"; else A="bla"; fi
|
||||
if [ ! -z $2 ]; then B="$2"; else B="bla"; fi
|
||||
if [ ! -z $3 ]; then C="$3"; else C="bla"; fi
|
||||
/usr/bin/wrap-nlvmi \"$A\" \"$B\" \"$C\" && exit
|
||||
fi
|
||||
if [ ! -d $RUNDIRECTORY ]; then if [ $LOGLEVEL -gt "1" ]; then echo "creating $RUNDIRECTORY"; fi; mkdir -p $RUNDIRECTORY; chown root:nlvmi -R $RUNDIRECTORY; chmod g+w $RUNDIRECTORY; fi
|
||||
|
||||
@@ -172,8 +172,8 @@ function vmstart {
|
||||
if [ ! -z ${array[30]} ]; then WPORT=$((${array[30]} + 5700)); WEBSOCK=",websocket=$WPORT"; else WEBSOCK=""; fi
|
||||
if [ ! -z ${array[31]} ]; then VNCPASS=",password"; fi
|
||||
if [ ! -z ${array[29]} ]; then VNCPORT="-vnc :${array[29]}$WEBSOCK$VNCPASS"; fi
|
||||
echo "which ${array[4]} && QEMUCONNAMD=${array[4]} || QEMUCOMMAND=/usr/libexec/qemu-kvm" >>$TMPF
|
||||
COMMAND=(su - ${array[2]} -s /bin/bash -c \"\$QEMUCOMMAND -name ${array[1]} -enable-kvm ${array[10]} $CPUTYPE $MEMORY $SMP -device virtio-rng-pci -boot ${array[11]} $USBDEV $KB -daemonize $DRIVE1$FORMAT1 $DRIVE2$FORMAT2 $DRIVE3$FORMAT3 $CDROM $MACADDR1 $TAPDEV1 $MACADDR2 $TAPDEV2 $MACADDR3 $TAPDEV3 $VNCPORT $CUSTOM -pidfile $RUNDIRECTORY/${array[1]}.pid -monitor unix:$RUNDIRECTORY/${array[1]}.mon,server,nowait\")
|
||||
# echo "which ${array[4]} && QEMUCOMMAND=/usr/bin/${array[4]} || QEMUCOMMAND=/usr/libexec/qemu-kvm" >>$TMPF
|
||||
COMMAND=(su - ${array[2]} -s /bin/bash -c \"which ${array[4]} \&\& QEMUCOMMAND=/usr/bin/${array[4]} \|\| QEMUCOMMAND=/usr/libexec/qemu-kvm\; \\\$QEMUCOMMAND -name ${array[1]} -enable-kvm ${array[10]} $CPUTYPE $MEMORY $SMP -device virtio-rng-pci -boot ${array[11]} $USBDEV $KB -daemonize $DRIVE1$FORMAT1 $DRIVE2$FORMAT2 $DRIVE3$FORMAT3 $CDROM $MACADDR1 $TAPDEV1 $MACADDR2 $TAPDEV2 $MACADDR3 $TAPDEV3 $VNCPORT $CUSTOM -pidfile $RUNDIRECTORY/${array[1]}.pid -monitor unix:$RUNDIRECTORY/${array[1]}.mon,server,nowait\")
|
||||
if [ $LOGLEVEL -gt "1" ]; then echo ${COMMAND[@]}; fi
|
||||
echo "${COMMAND[@]}" >>$TMPF
|
||||
#Set VNC Password
|
||||
@@ -283,21 +283,131 @@ function stopall {
|
||||
done
|
||||
}
|
||||
|
||||
function listdir {
|
||||
#echo $1 $2
|
||||
sqlite3 $SQLITEFILE "SELECT $2,connectstring FROM servers WHERE hostname='$1'" | while read line; do
|
||||
IFS='|' read -r -a array <<< "$line"
|
||||
IFS=';' read -r -a dirs <<< "${array[0]}"
|
||||
for di in ${dirs[@]}; do
|
||||
if [ -z ${array[1]} ]; then
|
||||
ls -lrt -d -1 $di/{*,.*}
|
||||
else
|
||||
su nlvmi -c "ssh ${array[1]} \"ls -lrt -d -1 $di/{*,.*}\""
|
||||
fi
|
||||
done
|
||||
function listdirs {
|
||||
if [ $2 == "isodirectory" ] || [ $2 == "vmdirectory" ]; then
|
||||
COLNAMES=$2
|
||||
MODE="vm"
|
||||
else
|
||||
COLNAMES="isodirectory,vmdirectory"
|
||||
MODE="img"
|
||||
fi
|
||||
sqlite3 $SQLITEFILE "SELECT $COLNAMES,connectstring FROM servers WHERE hostname='$1'" | while read line; do
|
||||
IFS='|' read -r -a array <<< "$line"
|
||||
if [ $MODE == "vm" ]; then
|
||||
IFS=';' read -r -a dirs <<< "${array[0]}"
|
||||
for di in ${dirs[@]}; do
|
||||
if [ -z ${array[1]} ]; then
|
||||
ls -lrt -d -1 $di/{*,.*}
|
||||
else
|
||||
su nlvmi -c "ssh ${array[1]} \"ls -lrt -d -1 $di/{*,.*}\""
|
||||
fi
|
||||
done
|
||||
elif [ $MODE == "img" ]; then
|
||||
IFS=';' read -r -a dirs <<< "${array[0]};${array[1]}"
|
||||
for di in ${dirs[@]}; do
|
||||
if [ $di == $2 ]; then
|
||||
if [ -z ${array[2]} ]; then
|
||||
ls -lrt -d -1 $di/{*,.*}
|
||||
else
|
||||
su nlvmi -c "ssh ${array[2]} \"ls -lrt -d -1 $di/{*,.*}\""
|
||||
fi
|
||||
fi
|
||||
done
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
function delimg {
|
||||
DDIR=`echo $2 | rev | cut -d "/" -f 2- | rev`
|
||||
sqlite3 $SQLITEFILE "SELECT vmdirectory,isodirectory,connectstring FROM servers WHERE hostname='$1'" | while read line; do
|
||||
IFS="|" read -r -a array <<< "$line"
|
||||
IFS=";" read -r -a dirs <<< "${array[0]};${array[1]}"
|
||||
for dir in ${dirs[@]}; do
|
||||
if [ $dir == $DDIR ]; then
|
||||
if [ -z ${array[2]} ]; then
|
||||
if [ -e $2 ]; then rm $2 && echo "delete completed"; fi
|
||||
else
|
||||
su nlvmi -c "ssh ${array[2]} \"if [ -e $2 ]; then rm $2 && echo delete completed; fi\""
|
||||
fi
|
||||
fi
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
function createimg {
|
||||
re='^[0-9]+$'
|
||||
if ! [[ $2 =~ $re ]] ; then
|
||||
echo "size argument is not numeric" >&2; exit 1
|
||||
fi
|
||||
IFS=';' read -r -a T <<< "$1"
|
||||
TDIR=`echo ${T[1]} | rev | cut -d "/" -f 2- | rev`
|
||||
TFOUND="no"
|
||||
declare -a A=`sqlite3 $SQLITEFILE "SELECT vmdirectory,connectstring FROM servers WHERE hostname='${T[0]}'" | while read line; do
|
||||
IFS="|" read -r -a array <<< "$line"
|
||||
IFS=";" read -r -a dirs <<< "${array[0]}"
|
||||
for di in ${dirs[@]}; do
|
||||
if [ $di == $TDIR ]; then
|
||||
TFOUND="yes"
|
||||
TCONN=${array[1]}
|
||||
fi
|
||||
done
|
||||
echo "($TFOUND $TCONN)"
|
||||
done`
|
||||
if [ ${A[0]} == "yes" ]; then
|
||||
if [ -z ${A[1]} ]; then
|
||||
qemu-img create -f qcow2 ${T[1]} ${2}G && echo "creatimg completed"
|
||||
else
|
||||
su nlvmi -c "ssh ${A[1]} \"qemu-img create -f qcow2 ${T[1]} ${2}G\"" && echo "createimg completed"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
function copyimg {
|
||||
IFS=';' read -r -a S <<< "$1"
|
||||
IFS=';' read -r -a T <<< "$2"
|
||||
SDIR=`echo ${S[1]} | rev | cut -d "/" -f 2- | rev`
|
||||
TDIR=`echo ${T[1]} | rev | cut -d "/" -f 2- | rev`
|
||||
SFOUND="no"
|
||||
TFOUND="no"
|
||||
for m in S T; do
|
||||
A="$m"DIR
|
||||
declare -a B=`sqlite3 $SQLITEFILE "SELECT vmdirectory,isodirectory,connectstring FROM servers WHERE hostname='${!m[0]}'" | while read line; do
|
||||
IFS='|' read -r -a array <<< "$line"
|
||||
IFS=';' read -r -a dirs <<< "${array[0]};${array[1]}"
|
||||
for di in ${dirs[@]}; do
|
||||
if [ $di == ${!A} ]; then
|
||||
if [ $m == "S" ]; then
|
||||
if [ -z ${array[2]} ]; then
|
||||
if [ -e ${S[1]} ]; then FOUND="yes"; CONN="empty"; fi
|
||||
else
|
||||
su nlvmi -c "ssh ${array[2]} \"if [ ! -e ${S[1]} ]; then exit 1; fi\"" && FOUND="yes"; CONN=${array[2]}
|
||||
fi
|
||||
elif [ $m == "T" ]; then FOUND="yes"; CONN=${array[2]}; if [ -z $CONN ]; then CONN="empty"; fi; fi
|
||||
fi
|
||||
done
|
||||
echo "($FOUND $CONN)"
|
||||
done`
|
||||
export ${m}FOUND=${B[0]}
|
||||
export ${m}CONN=${B[1]}
|
||||
done
|
||||
if [ $SFOUND == "yes" ] && [ $TFOUND == "yes" ]; then
|
||||
if [ $SCONN == "empty" ] && [ $TCONN == "empty" ]; then
|
||||
if [ -z $FID ]; then
|
||||
FID="nldebugger"
|
||||
fi
|
||||
rsync --progress ${S[1]} ${T[1]} >/tmp/$FID && echo done >/tmp/$FID || echo fail >/tmp/$FID
|
||||
elif [ $SCONN == "empty" ]; then
|
||||
su nlvmi -c "rsync --progress ${S[1]} $TCONN:${T[1]} >/tmp/$FID && echo done >/tmp/$FID || echo fail >/tmp/$FID"
|
||||
elif [ $SCONN == $TCONN ]; then
|
||||
su nlvmi -c "ssh $TCONN \"rsync --progress ${S[1]} ${T[1]}\"" >/tmp/$FID && echo done >/tmp/$FID || echo fail >/tmp/$FID
|
||||
elif [ $TCONN == "empty" ]; then
|
||||
su nlvmi -c "rsync --progress $SCONN:${S[1]} ${T[1]} >/tmp/$FID && echo done >/tmp/$FID || echo fail >/tmp/$FID"
|
||||
else
|
||||
su nlvmi -c "echo "noprogressavailable" >/tmp/$FID && scp -3 $SCONN:${S[1]} $TCONN:${T[1]}" && echo done >/tmp/$FID || echo fail >/tmp/$FID
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
#mainloop
|
||||
if [ $# -gt 0 ]; then
|
||||
if [ $1 == "createdb" ]; then
|
||||
@@ -343,9 +453,18 @@ if [ $# -gt 0 ]; then
|
||||
if [[ $VMFOUND == "no" ]]; then echo "no VM with that name found!"; exit 1; fi)
|
||||
elif [ $1 == "stopall" ]; then
|
||||
stopall
|
||||
elif [ $1 == "listdir" ]; then
|
||||
if [ -z $2 ] || [ -z $3 ]; then echo listdir needs two more arguments; exit 1; fi
|
||||
listdir $2 $3
|
||||
elif [ $1 == "listdirs" ]; then
|
||||
if [ -z $2 ] || [ -z $3 ]; then echo listdirs needs two arguments; exit 1; fi
|
||||
listdirs $2 $3
|
||||
elif [ $1 == "createimg" ]; then
|
||||
if [ -z $2 ] || [ -z $3 ]; then echo createimg needs two arguments; exit 1; fi
|
||||
createimg $2 $3
|
||||
elif [ $1 == "copyimg" ]; then
|
||||
if [ -z $2 ] || [ -z $3 ]; then echo copyimg needs two arguments; exit 1; fi
|
||||
copyimg $2 $3
|
||||
elif [ $1 == "delimg" ]; then
|
||||
if [ -z $2 ] || [ -z $3 ]; then echo delimg needs two arguments; exit 1; fi
|
||||
delimg $2 $3
|
||||
elif [ $1 == "remote" ]; then
|
||||
if [ ! -z $MASTERSERVER ]; then
|
||||
if `echo $SSH_CLIENT | grep "$MASTERSERVER " &>/dev/null`; then
|
||||
|
||||
Reference in New Issue
Block a user