summaryrefslogtreecommitdiffstats
path: root/os-plugins/plugins/vmgrid/files/vmgrid
diff options
context:
space:
mode:
authorMichael Janczyk2010-04-06 20:03:28 +0200
committerMichael Janczyk2010-04-06 20:03:28 +0200
commit4661a054dca2bf0844c8bd283829b68328c7fed3 (patch)
treec9fb9c71fd5033f5b666b1deee432ea5d5f36126 /os-plugins/plugins/vmgrid/files/vmgrid
parentcumulative commit of local branch, many changes regarding virtualization (diff)
downloadcore-4661a054dca2bf0844c8bd283829b68328c7fed3.tar.gz
core-4661a054dca2bf0844c8bd283829b68328c7fed3.tar.xz
core-4661a054dca2bf0844c8bd283829b68328c7fed3.zip
cumulative commit of local branch, xen modifications and vmgrid plugin
Diffstat (limited to 'os-plugins/plugins/vmgrid/files/vmgrid')
-rw-r--r--os-plugins/plugins/vmgrid/files/vmgrid208
1 files changed, 208 insertions, 0 deletions
diff --git a/os-plugins/plugins/vmgrid/files/vmgrid b/os-plugins/plugins/vmgrid/files/vmgrid
new file mode 100644
index 00000000..b75b5341
--- /dev/null
+++ b/os-plugins/plugins/vmgrid/files/vmgrid
@@ -0,0 +1,208 @@
+#!/bin/bash
+# -----------------------------------------------------------------------------
+# Copyright (c) 2007..2010 - RZ Uni FR
+# Copyright (c) 2007..2010 - OpenSLX GmbH
+#
+# This program is free software distributed under the GPL version 2.
+# See http://openslx.org/COPYING
+#
+# If you have any feedback please consult http://openslx.org/feedback and
+# send your suggestions, praise, or complaints to feedback@openslx.org
+#
+# General information about OpenSLX can be found at http://openslx.org/
+# -----------------------------------------------------------------------------
+# vmgrid
+# - Script for autostarts defined in vmgrid::startvms
+################################################################################
+
+# include default directories
+. /etc/opt/openslx/openslx.conf
+
+################################################################################
+### Manual Start
+################################################################################
+
+if [ -n "$1" ]; then
+ if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
+ echo -e "Usage: vmgrid [[-g] [--forcemem <memorysize in MB>] \c"
+ echo -e "[/path/]filename[.xml]]"
+ exit 0
+ else
+ echo "Starting run-vmgrid.sh with options '$@'"
+ run-vmgrid.sh $@ 2>/dev/null
+ exit
+ fi
+fi
+
+################################################################################
+### Define default dirs / get configs
+################################################################################
+
+PLUGINCONFROOT=${OPENSLX_DEFAULT_CONFDIR}/plugins
+PLUGINCONFDIR=${PLUGINCONFROOT}/vmgrid
+RWSHARE=/var/opt/openslx/plugins/vmgrid/share
+# include general configuration from vmgrid
+[ -f ${PLUGINCONFDIR}/vmgrid.conf ] && \
+ . ${PLUGINCONFDIR}/vmgrid.conf
+# get the vmchooser_active var
+[ -f ${PLUGINCONFROOT}/vmchooser/vmchooser.conf ] && \
+ . ${PLUGINCONFROOT}/vmchooser/vmchooser.conf
+
+################################################################################
+### Functions used throughout the script
+################################################################################
+
+# function to write to stdout and logfile
+writelog () {
+ # write to stdout
+ echo -e "$1"
+ # log into file
+ echo -e "$1" >> ${OPENSLX_DEFAULT_LOGDIR}/run-vmgrid.${USER}.$$.log
+ # log into share dir, so that log is available in vm as well
+ echo -e "$1" >> ${vmgrid_rwmnt}/logs/run-vmgrid.${USER}.$$.log
+}
+
+################################################################################
+### Configure VMs for autostart and set RAM
+################################################################################
+
+# start to log, create shrare log dir
+mkdir -m 1777 -p ${vmgrid_rwmnt}/logs
+mkdir -m 1777 -p /tmp/vmgrid
+mkdir -p /tmp/vmgrid/${USER}
+echo "Starting to log at $(date)" \
+ >${vmgrid_rwmnt}/logs/run-vmgrid.${USER}.$$.log
+
+# remove blanks
+vmgrid_memratio=$(echo ${vmgrid_memratio} | sed -e "s, *,,g")
+vmgrid_startvms=$(echo ${vmgrid_startvms} | sed -e "s, *,,g")
+
+# get total amount of memory installed in your machine
+# TODO: stage 3? virtaulization plugin
+totalmem=$(expr $(grep -i "memtotal" /proc/meminfo | awk '{print $2}') / 1024)
+
+# get hostmem
+hostratio=$(echo ${vmgrid_memratio} | awk -F ',' '{print $6}')
+hostmem=$(expr ${totalmem} \* ${hostratio} / 100 2>/dev/null)
+if [ ${hostmem} -lt 256 2>/dev/null ]; then
+ hostmem=256
+ writelog "${hostmem} MB RAM reserved for host"
+fi
+
+# get other vm mem
+if [ -n "${vmchooser_active}" ]; then
+ othervmratio=$(echo ${vmgrid_memratio} | awk -F ',' '{print $5}')
+ othervmmem=$(expr ${totalmem} \* ${othervmratio} / 100 2>/dev/null)
+ if [ ${othervmmem} -lt 512 2>/dev/null ]; then
+ othervmmem=512
+ writelog "${othervmmem} MB RAM reserved for other virtualization solutions"
+ fi
+else
+ othervmratio=0
+ othervmmem=0
+fi
+
+# calculate freemem
+freemem=$(expr ${totalmem} - ${hostmem} - ${othervmmem} 2>/dev/null)
+if [ ${freemem} -lt 512 2>/dev/null ]; then
+ writelog "Not enough free RAM for this plugin, free: ${freemem} MB"
+ exit 1
+fi
+
+# ratio minus other vms and host
+restratio=$(expr 100 - ${hostratio} - ${othervmratio})
+
+# get clients mem ratio
+vmsumratios=0
+for i in {1..4}; do
+ vm[$i]=$(echo ${vmgrid_startvms} | awk -F ',' '{print $1}')
+ # remove ${vm[$i]} from list because of '{print $1}'
+ vmgrid_startvms=$(echo ${vmgrid_startvms} | sed -e "s,${vm[$i]}\,*,,")
+ vmratio[$i]=$(echo ${vmgrid_memratio} | awk -F ',' '{print $1}')
+ # remove ${vmratio[$i]} from list because of '{print $1}'
+ vmgrid_memratio=$(echo ${vmgrid_memratio} | sed -e "s/${vmratio[$i]},*//")
+ vmsumratios=$(expr ${vmsumratios} + ${vmratio[$i]} 2>/dev/null)
+done
+
+# ratio test: 100 - host - other vm + grid ratios
+ratiotest=$(expr 100 - ${restratio} + ${vmsumratios} 2>/dev/null)
+if [ ${ratiotest} -gt 100 ]; then
+ #writelog "you managed to get over 100% in ratio Einstein: ${ratiotest}%"
+ exit 1
+fi
+
+for i in {1..4}; do
+ # calculate vms mem: mem = $freemem * $vmratio/100 * 100/$restratio
+ # multiple of 4
+ vmmem[$i]=$(expr ${freemem} \* ${vmratio[$i]} / ${restratio} / 4 \* 4 \
+ 2>/dev/null)
+ if [ -n "${vm[$i]}" ] && [ ${vmmem[$i]} -lt 512 2>/dev/null ]; then
+ writelog "Not enough free RAM for ${vm[$i]} (min. 512 MB), \c"
+ writelog "free: ${vmmem[$i]} MB"
+ unset vm[$i]
+ fi
+done
+
+################################################################################
+### Start the VMs
+################################################################################
+
+# start vms
+for i in {1..4}; do
+ if [ -n "${vm[$i]}" ]; then
+ alreadyrunning=$(ps aux | grep run-vmgrid.sh | grep -v grep | \
+ grep "${vm[$i]}" | wc -l)
+ if [ ${alreadyrunning} -gt 0 2>/dev/null ]; then
+ writelog "${vm[$i]} already running, skipping!"
+ else
+ writelog "Starting ${vm[$i]} via run-vmgrid.sh with ${vmmem[$i]} MB RAM"
+ run-vmgrid.sh --forcemem ${vmmem[$i]} ${vm[$i]} 2>/dev/null &
+ echo $! > /tmp/vmgrid/${USER}/vmgrid.pids
+ # wait 5 secs for the next vm to start
+ sleep 10
+ fi
+ fi
+done
+
+exit 0
+
+################################################################################
+### old stuff with xml files
+################################################################################
+#
+#filter_autostart=$(grep -i "active param" ${vmgrid_xmlpath}/*.xml | \
+# grep -E "true|1" | awk -F ":" '{print $1}')
+#
+## wozu mehrere starten -> siehe cherkasova
+#
+#filter_virt=
+#for i in ${filter_autostart}; do
+# filter_temp=
+# filter_temp=$(cat $i | grep -i "virtualmachine param.*${vmgrid_virt}" | \
+# wc -l)
+# if [ ${filter_temp} -eq 1 ]; then
+# filter_virt="${filter_virt} $i"
+# fi
+#done
+#
+## remove already started ${vmgrid_startvm}
+#filter_virt=$(echo $filter_virt | \
+# sed -e "s,${vmgrid_xmlpath}/${vmgrid_startvm%.xml}.xml,,g")
+#
+#sort_virt=$(grep 'priority param' ${vmgrid_xmlpath}/*.xml | sort -n | \
+# awk -F ":" '{print $1}')
+#
+#for i in ${sort_virt}; do
+# j=$(echo $filter_virt | grep $i | wc -l)
+# if [ $j -eq 1 ]; then
+# filter_virt=$(echo $filter_virt | sed -e "s,$i,,g")
+# vmgrid ${i#${vmgrid_xmlpath}/}
+# fi
+#done
+#
+## start vms /wo priority
+#for i in ${filter_virt}; do
+# vmgrid ${i#${vmgrid_xmlpath}/}
+#done
+#
+#exit 0