aboutsummaryrefslogtreecommitdiff
path: root/kvmx-supervise
diff options
context:
space:
mode:
authorSilvio Rhatto <rhatto@riseup.net>2017-12-31 16:33:35 -0200
committerSilvio Rhatto <rhatto@riseup.net>2017-12-31 16:33:35 -0200
commitc12e7ec593a82ece79bda46415d03022c7c6c5b3 (patch)
tree20704d20970a8bdaee4834ce11cbd100121a9bb0 /kvmx-supervise
parent4d78c576128c8be6f5d1756b68ee23edc7bffccd (diff)
downloadkvmx-c12e7ec593a82ece79bda46415d03022c7c6c5b3.tar.gz
kvmx-c12e7ec593a82ece79bda46415d03022c7c6c5b3.tar.bz2
Adds kvmx-supervise
Diffstat (limited to 'kvmx-supervise')
-rwxr-xr-xkvmx-supervise134
1 files changed, 134 insertions, 0 deletions
diff --git a/kvmx-supervise b/kvmx-supervise
new file mode 100755
index 0000000..b7f9e7f
--- /dev/null
+++ b/kvmx-supervise
@@ -0,0 +1,134 @@
+#!/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 <http://www.gnu.org/licenses/>.
+#
+
+# Parameters
+BASENAME="`basename $0`"
+DIRNAME="`dirname $0`"
+GLOBAL_USER_CONFIG_FILE="$HOME/.config/kvmxconfig"
+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
+}
+
+# Display usage
+function kvmx_supervise_usage {
+ echo "$BASENAME $VERSION - virtual machine supervisor"
+ echo ""
+ echo "usage: $BASENAME <action> [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
+
+ # 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
+
+ # Operate only with VMs configured with supervise_manage=1
+ supervise="`su $user -c "kvmx config supervise_manage"`"
+
+ # Dispatch
+ if [ "$supervise_manage" == "1" ]; then
+ su $user -c "kvmx $vm $*"
+ 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`"
+
+ 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 $*
+
+ kvmx_supervise_$ACTION $*
+else
+ kvmx_supervise_usage
+fi