diff options
author | Michael Janczyk | 2010-04-06 20:03:28 +0200 |
---|---|---|
committer | Michael Janczyk | 2010-04-06 20:03:28 +0200 |
commit | 4661a054dca2bf0844c8bd283829b68328c7fed3 (patch) | |
tree | c9fb9c71fd5033f5b666b1deee432ea5d5f36126 /os-plugins/plugins/vmgrid/files/vmgrid | |
parent | cumulative commit of local branch, many changes regarding virtualization (diff) | |
download | core-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/vmgrid | 208 |
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 |