summaryrefslogblamecommitdiffstats
path: root/os-plugins/plugins/vmgrid/files/vmgrid
blob: 2bb91481e90d68e46c591a64d720963b0b0532b0 (plain) (tree)
1
2
3
4

                                                                               

                                   





















                                                                                
                                                                
                                                           

















                                                                                


                                                                









                                                                                
                                                                 
                                                              
                                                            





                                                                                
                                    



                                     






                                                                           
 





                                                                           
               
                                                             
                                                             
 


                                                       
 
                                                           
                   
                                                                     




                                                                     











                                                                            
                   
                                                                     

                                                                         
                          













                                                                                






                                                                           



                                                                              
                                                              
                                               
                                             





              
#!/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 <memory size in MB>] \c"
    echo -e "[--nice <nice level>] [/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