#!/usr/bin/env bash # # kvmx-supervise handles all registered kvmx instances in a system # # Copyright (C) 2017 Silvio Rhatto - rhatto at riseup.net # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published # by the Free Software Foundation, either version 3 of the License, # or any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # Parameters BASENAME="`basename $0`" DIRNAME="`dirname $0`" INSTANCES="`ls -1 /home/*/.config/kvmx/*`" ACTION="$1" # Load basic functions export APP_BASE="`$DIRNAME/kvmx app_base`" source $APP_BASE/lib/kvmx/functions || exit 1 # Calculate version VERSION="`$APP_BASE/kvmx version`" # Initialize function __kvmx_supervise_initialize { #if [ "`whoami`" != "root" ]; then # echo "$BASENAME: needs root privileges" # exit 1 #fi # Put startup code here true } # Display usage function kvmx_supervise_usage { echo "$BASENAME $VERSION - virtual machine supervisor" echo "" echo "usage: $BASENAME [options]" echo "" echo "available actions:" echo "" grep "^function kvmx_supervise_" $0 | cut -d ' ' -f 2 | \ sed -e 's/kvmx_supervise_//' | sort | xargs -L 6 | column -t -c 6 | sed -e 's/^/\t/' echo "" #local list="`kvmx_supervise_list`" #if [ ! -z "$list" ]; then # echo "available virtual machines:" # echo "" # echo "$list" | sed -e 's/^/\t/' # echo "" #fi exit 1 } # Call function kvmx_supervise_call { local user="$1" local vm="$2" shift 2 local params=($*) # Check parameters if [ -z "$vm" ]; then kvmx_supervise_usage exit 1 fi # Check for existing VM if [ ! -e "/home/$user/.config/kvmx/$2" ]; then kvmx_supervise_usage exit 1 fi # When running as root, operate only with VMs configured with supervise_manage=1 # Specify /bin/bash to avoid restricted shells like kvmx-shell if [ "`whoami`" == "root" ]; then supervise_manage="`su $user -s /bin/bash -c "kvmx config $vm supervise_manage"`" else supervise_manage="1" fi # Dispatch if [ "$supervise_manage" == "1" ]; then if [ "`whoami`" == "root" ]; then su $user -s /bin/bash -c "kvmx ${params[0]} $vm ${params[@]:1}" else if [ "`whoami`" == "$user" ]; then kvmx ${params[0]} $vm ${params[@]:1} fi fi fi } # Foreach function kvmx_supervise_foreach { local user local vm for instance in $INSTANCES; do user="`echo $instance | cut -d / -f 3`" vm="`basename $instance`" #echo "$BASENAME: $vm guest..." kvmx_supervise_call $user $vm $* done } # Status function kvmx_supervise_status { kvmx_supervise_foreach status } # Start function kvmx_supervise_start { kvmx_supervise_foreach start } # Stop function kvmx_supervise_poweroff { kvmx_supervise_foreach poweroff } # Restart function kvmx_supervise_restart { kvmx_supervise_foreach restart } # Dispatch if type kvmx_supervise_$ACTION 2> /dev/null | grep -q "kvmx_supervise_$ACTION ()"; then __kvmx_supervise_initialize $* shift kvmx_supervise_$ACTION $* else kvmx_supervise_usage fi