From 416ab8a37f1b07dc9f6c0fb3ff1a8ff2036510b5 Mon Sep 17 00:00:00 2001 From: Sebastian Schmelzer Date: Thu, 2 Sep 2010 17:50:49 +0200 Subject: change dir structure --- src/os-plugins/plugins/vmgrid/files/vmgrid | 154 +++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 src/os-plugins/plugins/vmgrid/files/vmgrid (limited to 'src/os-plugins/plugins/vmgrid/files/vmgrid') diff --git a/src/os-plugins/plugins/vmgrid/files/vmgrid b/src/os-plugins/plugins/vmgrid/files/vmgrid new file mode 100644 index 00000000..2bb91481 --- /dev/null +++ b/src/os-plugins/plugins/vmgrid/files/vmgrid @@ -0,0 +1,154 @@ +#!/bin/bash +# ----------------------------------------------------------------------------- +# Copyright (c) 2010 - RZ Uni FR +# Copyright (c) 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] [--mem ] \c" + echo -e "[--nice ] [/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 +# load general virtualization information +[ -f ${PLUGINCONFROOT}/virtualization/virtualization.conf ] && \ + . ${PLUGINCONFROOT}/virtualization/virtualization.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}/vmgrid.${USER}.$$.log + # log into share dir, so that log is available in vm as well + echo -e "$1" >> ${vmgrid_rwmnt}/logs/vmgrid.${USER}.$$.log +} + +################################################################################ +### Configure VMs for autostart and set RAM +################################################################################ + +# start to log, create share 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/vmgrid.${USER}.$$.log + +if [ -z "${hostratio}" ]; then + writelog "There has been an error in the memory configuration in stage 3" + writelog "Please check your memory ratio settings, exiting!" + exit 1 +fi + +if [ -z "${hostratio}" ]; then + writelog "There has been an error in the memory configuration in stage 3" + writelog "Please check your memory ratio settings, exiting!" + exit 1 +fi + +# remove blanks +vmgrid_startvms=$(echo ${vmgrid_startvms} | sed -e "s, *,,g") +vmgrid_memratio=$(echo ${vmgrid_memratio} | sed -e "s, *,,g") + +# hostmem, mainvirt from virtualization plugin +# ratio minus other vms and host +restratio=$(expr 100 - ${hostratio} - ${mainvirtratio}) + +# hostmem, totalmem, mainvirtmem from virtualization plugin +# calculate freemem +freemem=$(expr ${totalmem} - ${hostmem} - ${mainvirtmem} 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 + +# 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 + +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 Xen use different method + if [ "${vmgrid_virt}" = "xen" ]; then + alreadyrunning=$(xm list 2>/dev/null | grep -vE "Domain-0|Name.*ID" \ + | grep "${vm[$i]}-0.$" | wc -l) + fi + 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 --mem ${vmmem[$i]} ${vm[$i]} 2>/dev/null & + echo $! > /tmp/vmgrid/${USER}/vmgrid.pids + # wait 10 secs for the next vm to start + sleep 10 + fi + fi +done + +exit 0 -- cgit v1.2.3-55-g7522