first commit of shellscript
This commit is contained in:
parent
9af522893e
commit
525277385e
|
@ -0,0 +1,163 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#getting the config
|
||||||
|
source /etc/nlvmi/nlvmi.conf
|
||||||
|
if [ $LOGLEVEL -gt "1" ]; then echo "configuration loaded"; fi
|
||||||
|
|
||||||
|
#checking directories
|
||||||
|
if [ ! -d $VMDIRECTORY ]; then echo "VMDIRECTORY wrong, $VMDIRECTORY does not exist"; exit 1; fi
|
||||||
|
if [ ! -d $RUNDIRECTORY ]; then if [ $LOGLEVEL -gt "1" ]; then echo "creating $RUNDIRECTORY"; fi; mkdir -p $RUNDIRECTORY; fi
|
||||||
|
|
||||||
|
|
||||||
|
#checking database
|
||||||
|
function checkdb {
|
||||||
|
if [ $DATABASETYPE == "sqlite" ]; then
|
||||||
|
if [ ! -e $SQLITEFILE ]; then echo "sqlite configured, but db-file not present! create the db first!"; exit 1; fi
|
||||||
|
SQCHECK=`sqlite3 $SQLITEFILE "SELECT name FROM sqlite_master WHERE type='table' AND name='vms'"`
|
||||||
|
if [ $SQCHECK == "vms" ]; then
|
||||||
|
if [ $LOGLEVEL -gt "1" ]; then echo "DB ready to use"; fi
|
||||||
|
else
|
||||||
|
echo "error accessing sqlite!"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
echo "sqlite ready to use";
|
||||||
|
elif [ $DATABASETYPE == "mariadb" ]; then
|
||||||
|
DBCON="mysql --disable-pager -u $MARIAUSER -p$MARIAPASS -h $MARIAHOST $MARIADB"
|
||||||
|
declare -a DBC=`echo "SHOW TABLES FROM $MARIADB; " | $DBCON | sed 1d`
|
||||||
|
if [ -z $DBC ]; then
|
||||||
|
echo "mariadb connection failed"; exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#creating database
|
||||||
|
function createdb {
|
||||||
|
if [ $LOGLEVEL -gt "1" ]; then echo "going to create the db"; fi
|
||||||
|
if [ $DATABASETYPE == "sqlite" ]; then
|
||||||
|
sqlite3 $SQLITEFILE "CREATE TABLE vms (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
vmname VARCHAR(50) NOT NULL,
|
||||||
|
server VARCHAR(50),
|
||||||
|
user VARCHAR(50) NOT NULL,
|
||||||
|
autostart INTEGER,
|
||||||
|
bootoption VARCHAR(2) NOT NULL,
|
||||||
|
drive1 VARCHAR(50),
|
||||||
|
drive2 VARCHAR(50),
|
||||||
|
drive3 VARCHAR(50),
|
||||||
|
cdrom VARCHAR(50),
|
||||||
|
arch VARCHAR(50) NOT NULL,
|
||||||
|
mac VARCHAR(50),
|
||||||
|
brdev1 VARCHAR(50),
|
||||||
|
brdev2 VARCHAR(50),
|
||||||
|
brdev3 VARCHAR(50),
|
||||||
|
tapdev1 VARCHAR(50),
|
||||||
|
tapdev2 VARCHAR(50),
|
||||||
|
tapdev3 VARCHAR(50),
|
||||||
|
vncport VARCHAR(50),
|
||||||
|
websocket INTEGER,
|
||||||
|
vncpasswort VARCHAR(50),
|
||||||
|
usbdev1 VARCHAR(50),
|
||||||
|
usbdev2 VARCHAR(50),
|
||||||
|
usbdev3 VARCHAR(50),
|
||||||
|
kblang VARCHAR(50)
|
||||||
|
);"
|
||||||
|
fi
|
||||||
|
checkdb && echo "DB creation successful!" || (echo "Failed to create the DB"; exit 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
#autostart VMs
|
||||||
|
function vmautostart {
|
||||||
|
if [ $DATABASETYPE == "sqlite" ]; then
|
||||||
|
sqlite3 $SQLITEFILE "SELECT id FROM vms WHERE autostart=1" | while read line; do
|
||||||
|
IFS='|' read -r -a array <<< "$line"
|
||||||
|
vmstart ${array[0]}
|
||||||
|
done
|
||||||
|
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function vmstart {
|
||||||
|
if [ -z $1 ]; then echo "function start needs an id!"; exit 1; fi
|
||||||
|
if [ $LOGLEVEL -gt "1" ]; then echo "startvm function entered for vmid $1"; fi
|
||||||
|
sqlite3 $SQLITEFILE "SELECT * FROM vms WHERE id=$1" | while read line; do
|
||||||
|
IFS='|' read -r -a array <<< "$line"
|
||||||
|
if [ ${array[6]}=="" ]; then
|
||||||
|
DRIVE1=""; fi
|
||||||
|
if [ ${array[6]}!="" ]; then
|
||||||
|
DRIVE1="-drive file=${array[6]},cache=none,format=raw,if=virtio,aio=native"; fi
|
||||||
|
if [ ${array[7]}=="" ]; then
|
||||||
|
DRIVE2=""; fi
|
||||||
|
if [ ${array[7]}!="" ]; then
|
||||||
|
DRIVE2="-drive file=${array[7]},cache=none,format=raw,if=virtio,aio=native"; fi
|
||||||
|
if [ ${array[8]}=="" ]; then
|
||||||
|
DRIVE3=""; fi
|
||||||
|
if [ ${array[8]}!="" ]; then
|
||||||
|
DRIVE3="-drive file=${array[8]},cache=none,format=raw,if=virtio,aio=native"; fi
|
||||||
|
if [ ${array[9]}=="" ]; then
|
||||||
|
CDROM=""; fi
|
||||||
|
if [ ${array[9]}!="" ]; then
|
||||||
|
CDROM="-cdrom file=${array[9]}"; fi
|
||||||
|
if [ ${array[11]}=="" ]; then
|
||||||
|
NETDEV1=""; fi
|
||||||
|
if [ ${array[11]}!="" ]; then
|
||||||
|
NETDEV1="-net nic,macaddr=${array[11]},model=virtio,netdev=net0"; fi
|
||||||
|
if [ ${array[15]}=="" ]; then
|
||||||
|
TAPDEV1=""; fi
|
||||||
|
if [ ${array[15]}!="" ]; then
|
||||||
|
TAPDEV1="-netdev tap,ifname=${array[15]},script=no,id=net0"; fi
|
||||||
|
if [ ${array[16]}=="" ]; then
|
||||||
|
TAPDEV2=""; fi
|
||||||
|
if [ ${array[16]}!="" ]; then
|
||||||
|
TAPDEV2="-netdev tap,ifname=${array[16]},script=no,id=net0"; fi
|
||||||
|
if [ ${array[17]}=="" ]; then
|
||||||
|
TAPDEV3=""; fi
|
||||||
|
if [ ${array[17]}!="" ]; then
|
||||||
|
TAPDEV3="-netdev tap,ifname=${array[17]},script=no,id=net0"; fi
|
||||||
|
if [ ${array[18]}=="" ]; then
|
||||||
|
VNCPORT=""; fi
|
||||||
|
if [ ${array[18]}!="" ]; then
|
||||||
|
VNCPORT="-vnc ${array[18]},websocket=${array[19]},password"; fi
|
||||||
|
if [ ${array[21]}=="" ]; then
|
||||||
|
USBDEV1=""; fi
|
||||||
|
if [ ${array[21]}!="" ]; then
|
||||||
|
USBDEV1="-usbdevice ${array[21]}"; fi
|
||||||
|
if [ ${array[22]}=="" ]; then
|
||||||
|
USBDEV2=""; fi
|
||||||
|
if [ ${array[22]}!="" ]; then
|
||||||
|
USBDEV2="-usbdevice ${array[22]}"; fi
|
||||||
|
if [ ${array[23]}=="" ]; then
|
||||||
|
USBDEV3=""; fi
|
||||||
|
if [ ${array[23]}!="" ]; then
|
||||||
|
USBDEV3="-usbdevice ${array[22]}"; fi
|
||||||
|
echo "su ${array[3]} -c \"${array[10]} -enable-kvm -cpu host -m 1024 -smp 2 -boot ${array[5]} $USBDEV1 $USBDEV2 $USBDEV3 -k ${array[24]} -daemonize $DRIVE1 $DRIVE2 $DRIVE3 $CDROM $NETDEV1 $TAPDEV1 $TAPDEV2 $TAPDEV3 $VNCPORT\""
|
||||||
|
done
|
||||||
|
export VMFOUND="yes"
|
||||||
|
}
|
||||||
|
|
||||||
|
#mainloop
|
||||||
|
if [ $# -gt 0 ]; then
|
||||||
|
if [ $1 == "createdb" ]; then
|
||||||
|
createdb
|
||||||
|
elif [ $1 == "autostart" ]; then
|
||||||
|
vmautostart
|
||||||
|
elif [ $1 == "start" ]; then
|
||||||
|
if [ -z $2 ]; then echo "start needs a vmname!"; exit 1; fi
|
||||||
|
VMFOUND="no"
|
||||||
|
if [ $LOGLEVEL -gt "1" ]; then echo "searching for vmname $2"; fi
|
||||||
|
sqlite3 $SQLITEFILE "SELECT id FROM vms WHERE vmname='$2'" | (while read line; do
|
||||||
|
IFS='|' read -r -a arrays <<< "$line"
|
||||||
|
declare VMFOUND="yes"
|
||||||
|
export "$VMFOUND"
|
||||||
|
vmstart $arrays
|
||||||
|
done
|
||||||
|
if [[ $VMFOUND == "no" ]]; then echo "no VM with that name found!"; exit 1; fi)
|
||||||
|
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
checkdb
|
||||||
|
fi
|
Loading…
Reference in New Issue