summaryrefslogtreecommitdiffstats
path: root/os-plugins/plugins/vmgrid/files
diff options
context:
space:
mode:
authorMichael Janczyk2010-03-19 17:33:58 +0100
committerMichael Janczyk2010-03-19 17:33:58 +0100
commit0da1acc25f8d5f36c660f2d2fa83d1c0240c3909 (patch)
tree233449e24758c5c903faa8aa84189962e31a0581 /os-plugins/plugins/vmgrid/files
parentvirtualbox, vmgrix und xen anpassungen (diff)
downloadcore-0da1acc25f8d5f36c660f2d2fa83d1c0240c3909.tar.gz
core-0da1acc25f8d5f36c660f2d2fa83d1c0240c3909.tar.xz
core-0da1acc25f8d5f36c660f2d2fa83d1c0240c3909.zip
virtualbox, vmgrix und xen anpassungen, jetzt auch geadded
Diffstat (limited to 'os-plugins/plugins/vmgrid/files')
-rw-r--r--os-plugins/plugins/vmgrid/files/run-vmgrid.sh310
-rw-r--r--os-plugins/plugins/vmgrid/files/vmgrid195
-rwxr-xr-xos-plugins/plugins/vmgrid/files/xmlfilter.sh50
3 files changed, 555 insertions, 0 deletions
diff --git a/os-plugins/plugins/vmgrid/files/run-vmgrid.sh b/os-plugins/plugins/vmgrid/files/run-vmgrid.sh
new file mode 100644
index 00000000..c8ebb1a1
--- /dev/null
+++ b/os-plugins/plugins/vmgrid/files/run-vmgrid.sh
@@ -0,0 +1,310 @@
+#!/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
+# - This is the generic wrapper for the several virtualization solutions...
+################################################################################
+
+. /etc/opt/openslx/openslx.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
+}
+
+################################################################################
+### Define default dirs / get configs
+################################################################################
+
+PLUGINCONFROOT=${OPENSLX_DEFAULT_CONFDIR}/plugins
+PLUGINCONFVMGRID=${PLUGINCONFROOT}/vmgrid
+# include general configuration from vmgrid
+[ -f ${PLUGINCONFVMGRID}/vmgrid.conf ] && \
+ . ${PLUGINCONFVMGRID}/vmgrid.conf
+#[ -f ${PLUGINCONFVMGRID}/vmgrid.include ] && \
+# . ${PLUGINCONFVMGRID}/vmgrid.include
+# get the vmchooser_active var
+[ -f ${PLUGINCONFROOT}/vmchooser/vmchooser.conf ] && \
+ . ${PLUGINCONFROOT}/vmchooser/vmchooser.conf
+
+################################################################################
+### Get XML file and dir
+################################################################################
+
+# check if forcemem set
+if [ "$1" = "--forcemem" ]; then
+ forcemem=$2
+ xmlfile=${3##*/}
+else
+ xmlfile=${1##*/}
+fi
+
+# absolute or relative path?
+if ls ${1} 2>/dev/null | grep '/' >/dev/null 2>&1; then
+ xmlpath=$(dirname ${1})
+else
+ xmlpath=${vmgrid_xmlpath}
+fi
+# full path
+xmlfile="${xmlpath}/${xmlfile%.xml}.xml"
+
+################################################################################
+### Sanity checks
+################################################################################
+
+# test if the xml file is valid
+if ! [ -r "${xmlfile}" ]; then
+ echo -e "Usage: run-vmgrid.sh [--forcemem <memorysize in MB>] \c"
+ echo -e "[/path/]filename[.xml]"
+ exit 1
+fi
+
+# test how many instances running
+runningvms=$(ps aux | grep "run-vmgrid.sh " | grep -v grep | wc -l)
+runningvms=$(expr ${runningvms} - 1)
+# check value
+if [ $runningvms -le 0 ]; then
+ writelog "Error in value: Running VMs: ${runningvms}. Exit!"
+ exit 1
+fi
+# check if vmchooser plugin installed
+if [ ${vmchooser_active} = "1" 2>/dev/null] && [ ${runningvms} -gt 1 ]; then
+ # only allow one instance of vmgrid
+ writelog "Already 1 VMs running and vmchooser plugin is active."
+ writelog "Can't start ${xmlfile}, exiting!"
+ exit 1
+# else allow max. 4 instances
+elif [ ${runningvms} -gt 4 ]; then
+ writelog "Already 4 VMs running, exiting!"
+ exit 1
+fi
+VM_ID="0${runningvms}"
+
+# test if XML file
+if ! grep '<?xml' "${xmlfile}" >/dev/null 2>&1; then
+ writelog \
+ "Submitted configuration file ${xmlfile} seems to have wrong XML format"
+ exit 1
+fi
+
+################################################################################
+### Logo for console
+################################################################################
+
+cat <<EOL
+
+ __ __
+ .----.--.--.-----.___.--.--.--------.-----.----.|__|.--| |
+ | _| | | |___| | | | _ | _|| || _ |
+ |__| |_____|__|__| \___/|__|__|__|___ |__| |__||_____|
+ |_____|
+ OpenSLX virtual machine environment preparation script ...
+
+EOL
+
+################################################################################
+### Read needed variables from XML file
+################################################################################
+
+writelog "Starting configuration..."
+writelog "\tVM-ID:\t\t\t${VM_ID}"
+writelog "\tLogfile:\t\t${OPENSLX_DEFAULT_LOGDIR}/run-vmgrid.${USER}.$$.log"
+writelog "\t$(df -h | grep " /tmp$" | awk '{print $2}') \c"
+writelog "/tmp info:\t\t$(grep "/tmp " /proc/mounts | sed -e "s,/tmp ,,")"
+writelog "\tVM XML dir:\t\t${vmgrid_xmlpath}"
+writelog "\tVM Image dir:\t\t${vmgrid_imgpath}"
+writelog "VM config:"
+
+if ! grep '<?xml' "${xmlfile}" >/dev/null 2>&1; then
+ writelog \
+ "\tSubmitted configuration file ${xmlfile} seems to have wrong XML format"
+ exit 1
+fi
+
+writelog "\tXML file:\t\t$xmlfile"
+
+imgpath=${vmgrid_imgpath}
+
+# name of the virt image of dir
+imgname=$(grep -io 'image_name param=.*"' ${xmlfile} | sed -e "s/&.*;/; /g" | \
+ awk -F '"' '{ print $2 }')
+# full path
+vmpath=${imgpath}/${imgname}
+
+# check if virtual machine container file exists
+if ! [ -e $vmpath ]; then
+ writelog "\tVirtual machine image or directory ${vmpath} not found!"
+ exit 1
+fi
+
+writelog "\tVM file/dir:\t\t$vmpath"
+
+# name of the virt machine, sed because of Windows formatting
+vm_name=$(grep -o 'short_description param=.*"' ${xmlfile} | \
+ sed -e "s/&.*;/; /g" | awk -F '"' '{print $2}')
+
+# is there an additional configuration provided?
+additional_config=$(grep -o 'additional_config param=.*"' ${xmlfile} | \
+ sed -e "s/&.*;/; /g" | awk -F '"' '{print $2}')
+
+# if ${vm_name} not defined use ${imgname}
+vm_name=${vm_name:-"${imgname%.*}"}
+displayname=${vm_name}
+# remove blanks
+
+# image is for the following virtual machine
+xmlvirt=$(grep -o 'virtualmachine param=.*"' ${xmlfile} | \
+ sed -e "s/&.*;/; /g" | awk -F '"' '{print $2}')
+
+# make a guess from the filename extension if ${xmlvirt} is empty
+# (not set within the XML file)
+if [ -z "${xmlvirt}" ] && [ -n "${additional_config}" ]; then
+ writelog "\tNo virtual machine parameter defined in ${xmlfile}"
+ writelog "\tTrying to guess VM...\c"
+ case "$(cat ${additional_config} | tr [A-Z] [a-z])" in
+ *config.version*|*virtualhw.version*|*independent-nonpersistent*|*vmdk*)
+ xmlvirt="vmware"
+ ;;
+ *innotek*|*virtualbox*)
+ xmlvirt="virtualbox"
+ ;;
+ *qemu*|*kvm*)
+ xmlvirt="qemukvm"
+ ;;
+ *)
+ xmlvirt="none"
+ ;;
+ esac
+elif [ -z "${xmlvirt}" ]; then
+ case "$(echo ${imgname##*.} | tr [A-Z] [a-z])" in
+ vmdk)
+ xmlvirt="vmware"
+ ;;
+ vbox)
+ xmlvirt="virtualbox"
+ ;;
+ img|qcow*)
+ xmlvirt="qemukvm"
+ ;;
+ *)
+ xmlvirt="none"
+ ;;
+ esac
+ writelog "result:\t${xmlvirt}"
+fi
+
+# TODO: confs von openvz lesen?
+if [ "${vmgrid_virt}" != "${xmlvirt}" ]; then
+ writelog "\tThe virtual machine specified in ${xmlfile}"
+ writelog "\tdoes not match the virtualization used here (${vmgrid_virt})"
+ exit 1
+fi
+
+# definition of the client system
+vmostype=$(grep -io '<os param=.*"' ${xmlfile} | awk -F '"' '{ print $2 }')
+
+# definition of the networking the client system is connected to
+network_kind=$(grep -io 'network param=.*"' ${xmlfile} | \
+ awk -F '"' '{ print $2 }')
+network_card=$(grep -io 'netcard param=.*"' ${xmlfile} | \
+ awk -F '"' '{ print $2 }')
+
+writelog "\tVirtualization:\t\t$xmlvirt"
+writelog "\tVM Name:\t\t$vm_name"
+writelog "\tVM Displayname:\t\t$displayname"
+
+###############################################################################
+### Declaration of default variables
+###############################################################################
+
+# TODO: cpu cores
+#vmgrid::maxvcpus
+#vmgrid::minvcpus
+#cpu_cores="${cpu_cores}"
+
+# check for CPU virtualization flags
+#vmgrid::hvm
+
+# get total amount of memory installed in your machine
+totalmem=$(expr $(grep -i "memtotal" /proc/meminfo | awk '{print $2}') / 1024)
+permem=60
+mem=$(expr ${totalmem} / 100 \* ${permem} / 4 \* 4)
+#vmgrid::maxram
+#vmgrid::minram
+
+# configuring ethernet mac address: first 3 bytes are fixed (00:50:56)
+# 4th byte is the VM-ID
+# last two bytes are taken from the bridge of the host
+# define one MAC per guest
+macguestpart="00:50:56:${VM_ID}"
+machostpart=$($(which ifconfig) br0 | grep br0 | sed -e "s/ //g" | \
+ awk -F ":" '{print $(NF-1)":"$NF}')
+macaddr=$(echo "${macguestpart}:${machostpart}" | tr [a-z] [A-Z])
+
+# ide is expected default, test for the virtual disk image type should
+# be done while creating the runscripts ...
+# TODO: cdrom / floppy?
+ide="TRUE"
+scsi="FALSE"
+hddrv="ide"
+
+# TODO: vncclient IP:55101
+
+# set hostname: using original hostname and adding string
+hostname="vmgrid${VM_ID}-$(hostname)"
+
+writelog "\tVM Hostname:\t\t$hostname"
+
+################################################################################
+### Setup the rest of the environment and run the configured vm
+################################################################################
+
+# Copy guest configuration (with added information) config.xml to be accessed
+# via virtual floppy
+# TODO: virt-floppy needed?
+
+# Get all virtual machine specific stuff from the respective include file
+# TODO: rename to run-vuirt.include
+if [ -e ${PLUGINCONFROOT}/${vmgrid_virt}/run-virt.include ] ; then
+ writelog "Strating ${vmgrid_virt} specific part ..."
+ self=${vmgrid_virt}
+ . ${PLUGINCONFROOT}/${vmgrid_virt}/run-virt.include
+else
+ writelog "Failed because of missing ${vmgrid_virt} plugin"
+ exit 1
+fi
+
+# start headless
+if [ -n "${VIRTCMDHL}" ]; then
+ writelog "Starting ${vmgrid_virt} head-less..."
+ ${VIRTCMDHL} ${VIRTCMDOPTSHL}
+else
+ writelog "${vmgrid_virt}: No headless mode defined, exiting!"
+ exit 1
+fi
+
+writelog "${vmgrid_virt} exited. Cleanning up...\c"
+if echo "${RMDIRS}" 2>/dev/null | grep ${vmgrid_virt} >/dev/null 2>&1; then
+ rm -rf ${RMDIRS} >/dev/null 2>&1
+fi
+writelog "done"
+writelog "Bye."
+
+exit 0
diff --git a/os-plugins/plugins/vmgrid/files/vmgrid b/os-plugins/plugins/vmgrid/files/vmgrid
new file mode 100644
index 00000000..66291aea
--- /dev/null
+++ b/os-plugins/plugins/vmgrid/files/vmgrid
@@ -0,0 +1,195 @@
+#!/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 "Usage: vmgrid [[/path/]filename[.xml]]"
+ exit 0
+ else
+ run-vmgrid.sh $1 &
+ exit 0
+ fi
+fi
+
+################################################################################
+### 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
+}
+
+################################################################################
+### Define default dirs / get configs
+################################################################################
+
+PLUGINCONFROOT=${OPENSLX_DEFAULT_CONFDIR}/plugins
+PLUGINCONFDIR=${PLUGINCONFROOT}/vmgrid
+# 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
+
+################################################################################
+### Configure VMs for autostart and set RAM
+################################################################################
+
+# 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 [ ${vmchooser_active} -eq 1 ]; 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]} &
+ # wait 5 secs for the next vm to start
+ sleep 5
+ 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
diff --git a/os-plugins/plugins/vmgrid/files/xmlfilter.sh b/os-plugins/plugins/vmgrid/files/xmlfilter.sh
new file mode 100755
index 00000000..5196992c
--- /dev/null
+++ b/os-plugins/plugins/vmgrid/files/xmlfilter.sh
@@ -0,0 +1,50 @@
+#!/bin/bash
+# -----------------------------------------------------------------------------
+# Copyright (c) 2007..2009 - RZ Uni FR
+# Copyright (c) 2007..2009 - 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/
+# -----------------------------------------------------------------------------
+# xmlfilter.sh
+# - This script is invoked by the vmchooser tool. It simply filters xml-
+# files (taking the path to these files in $1). You might modify it in any
+# way to match your needs, e.g. ask some database instead. You can re-
+# implement it in any other programming language too. You simply have to
+# return a list of proper xml files to be interpreted by the vmchooser
+# binary). Please check for vmchooser.sh too ...
+# -----------------------------------------------------------------------------
+
+# This script .
+#
+# currently:
+# - filter for slxgrp (which comes from /etc/machine-setup)
+#
+
+# include default directories
+. /etc/opt/openslx/openslx.conf
+
+if [ -f ${OPENSLX_DEFAULT_CONFDIR}/plugins/vmchooser/vmchooser.conf ]; then
+ . ${OPENSLX_DEFAULT_CONFDIR}/plugins/vmchooser/vmchooser.conf
+fi
+
+for FILE in $1/*.xml; do
+ # filter all xmls which aren't set active
+ if [ $(grep "<active param=.*true.*" ${FILE} | wc -l) -eq 1 ]; then
+ if [ -n ${vmchooser_env} ]; then
+ # filter all xmls with pool-param not equal to vmchooser::env
+ if [ $(grep "<pools param=\"${vmchooser_env}\"" ${FILE} | wc -l) -eq 1 ];\
+ then
+ echo ${FILE};
+ fi
+ else
+ # if there is no pool set, just take all available xmls
+ echo -e ${active}
+ fi
+ fi
+done