aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSilvio Rhatto <rhatto@riseup.net>2017-12-31 00:08:25 -0200
committerSilvio Rhatto <rhatto@riseup.net>2017-12-31 00:08:25 -0200
commit49c42178e30d8453dbd53a5f0f04f0db751fa432 (patch)
tree34286e52176b8cda6d42caf35fb8c2b703253dc2
parentd2263b94f93e0c0b7549c5a84c18834f8e6e8f58 (diff)
downloadkvmx-49c42178e30d8453dbd53a5f0f04f0db751fa432.tar.gz
kvmx-49c42178e30d8453dbd53a5f0f04f0db751fa432.tar.bz2
Better command-line argument handling and additional action checks
-rwxr-xr-xkvmx109
-rw-r--r--kvmxfile4
2 files changed, 84 insertions, 29 deletions
diff --git a/kvmx b/kvmx
index 20afd02..5da8fca 100755
--- a/kvmx
+++ b/kvmx
@@ -23,7 +23,6 @@ VERSION="0.1.0"
BASENAME="`basename $0`"
DIRNAME="`dirname $0`"
ACTION="$1"
-VM="$2"
GLOBAL_USER_CONFIG_FOLDER="$HOME/.config/kvmx"
GLOBAL_USER_CONFIG_FILE="$HOME/.config/kvmxconfig"
@@ -96,8 +95,16 @@ function __kvmx_initialize {
return
fi
- if [ -z "$VM" ]; then
+ # Check if second argument is a VM name or option
+ if [ -z "$2" ]; then
VM="$(basename `pwd`)"
+ SHIFTARGS="1"
+ elif [ -e 'kvmxfile' ] && [ ! -e "$GLOBAL_USER_CONFIG_FOLDER/$2" ] && [ "$2" != "$(basename `pwd`)" ]; then
+ VM="$(basename `pwd`)"
+ SHIFTARGS="1"
+ else
+ VM="$2"
+ SHIFTARGS="2"
fi
# Default parameters
@@ -202,12 +209,17 @@ function kvmx_spice {
exit 1
fi
+ if [ "$spice" == "0" ]; then
+ echo "$BASENAME: spice is disabled for guest $VM"
+ exit 1
+ fi
+
# Ensure we have the right port configuration: we can also be
# running directly from command line.
PORT="`cat $PORTFILE`"
if [ -z "$PORT" ]; then
- echo "$BASENAME: cannot get spice port for $VM."
+ echo "$BASENAME: cannot get spice port for $VM"
exit 1
fi
@@ -425,8 +437,12 @@ function kvmx_up {
-S "kvmx-$VM" -t "kvmx-$VM" socat STDIO,raw,echo=0 "UNIX:${CONSOLEFILE},retry=30" &
if [ "$run_spice_client" == "1" ]; then
- sleep 1
- kvmx_spice
+ if [ "$spice" == "0" ]; then
+ echo "$BASENAME: spice is disabled for guest $VM"
+ else
+ sleep 1
+ kvmx_spice
+ fi
fi
if [ "$ssh_support" == "y" ]; then
@@ -508,6 +524,11 @@ function kvmx_hostname {
exit 1
fi
+ if [ "$ssh_support" != "y" ]; then
+ echo "$BASENAME: ssh_support is disabled for guest $VM"
+ exit 1
+ fi
+
echo "Setting hostname..."
$SSH_COMMAND -o ConnectTimeout=2 -p $SSH 127.0.0.1 <<EOF
##### BEGIN REMOTE SCRIPT #####
@@ -535,7 +556,7 @@ EOF
function kvmx_usage {
echo "$BASENAME $VERSION - virtual machine manager"
echo ""
- echo "usage: $BASENAME <action> <vm> [options]"
+ echo "usage: $BASENAME <action> [vm] [options]"
echo ""
echo "available actions:"
echo ""
@@ -577,13 +598,13 @@ function kvmx_ssh {
# Shift params according to how the program was called:
# either "kvmx ssh" or "kvmx ssh guest".
- if [ "$ACTION" == "ssh" ]; then
- if [ ! -z "$2" ]; then
- shift 2
- else
- shift 1
- fi
- fi
+ #if [ "$ACTION" == "ssh" ]; then
+ # if [ ! -z "$2" ]; then
+ # shift 2
+ # else
+ # shift 1
+ # fi
+ #fi
SSH="`cat $SSHFILE`"
#TERM=xterm $SSH_COMMAND -p $SSH 127.0.0.1 $*
@@ -754,8 +775,13 @@ function kvmx_rsync_to {
exit 1
fi
- ORIG="$3"
- DEST="$4"
+ if [ "$ssh_support" != "y" ]; then
+ echo "$BASENAME: ssh_support is disabled for guest $VM"
+ exit 1
+ fi
+
+ ORIG="$1"
+ DEST="$2"
if [ -z "$DEST" ]; then
# Error
@@ -781,8 +807,13 @@ function kvmx_rsync_from {
exit 1
fi
- ORIG="$3"
- DEST="$4"
+ if [ "$ssh_support" != "y" ]; then
+ echo "$BASENAME: ssh_support is disabled for guest $VM"
+ exit 1
+ fi
+
+ ORIG="$1"
+ DEST="$2"
if [ -z "$DEST" ]; then
# Error
@@ -808,8 +839,13 @@ function kvmx_scp_from {
exit 1
fi
- ORIG="$3"
- DEST="$4"
+ if [ "$ssh_support" != "y" ]; then
+ echo "$BASENAME: ssh_support is disabled for guest $VM"
+ exit 1
+ fi
+
+ ORIG="$1"
+ DEST="$2"
if [ -z "$DEST" ]; then
# Error
@@ -835,8 +871,13 @@ function kvmx_scp_to {
exit 1
fi
- ORIG="$3"
- DEST="$4"
+ if [ "$ssh_support" != "y" ]; then
+ echo "$BASENAME: ssh_support is disabled for guest $VM"
+ exit 1
+ fi
+
+ ORIG="$1"
+ DEST="$2"
if [ -z "$DEST" ]; then
# Error
@@ -874,7 +915,7 @@ function kvmx_upgrade {
# Initializes a new guest
function kvmx_init {
- FOLDER="$3"
+ FOLDER="$1"
if [ -z "$FOLDER" ]; then
if [ -z "$VM" ]; then
@@ -914,7 +955,7 @@ function kvmx_clone {
exit 1
fi
- FOLDER="$3"
+ FOLDER="$1"
DEST="`basename $FOLDER`"
if [ -z "$FOLDER" ]; then
@@ -1057,6 +1098,11 @@ function kvmx_provision {
#exit 1
fi
+ if [ "$ssh_support" != "y" ]; then
+ echo "$BASENAME: ssh_support is disabled for guest $VM"
+ exit 1
+ fi
+
if [ -z "$provision_command" ]; then
echo "$BASENAME: error: parameter provision_command is not configured for $VM."
exit 1
@@ -1168,8 +1214,8 @@ function kvmx_xpra {
exit 1
fi
- local action="$3"
- shift 3
+ local action="$1"
+ shift
SSH="`cat $SSHFILE`"
@@ -1304,7 +1350,7 @@ function kvmx_open {
exit 1
fi
- ORIG="$3"
+ ORIG="$1"
if [ -z "$ORIG" ]; then
echo "$BASENAME: missing file argument."
@@ -1344,7 +1390,7 @@ function kvmx_rename {
exit 1
fi
- FOLDER="$3"
+ FOLDER="$1"
DEST="`basename $FOLDER`"
if [ -z "$FOLDER" ]; then
@@ -1430,7 +1476,7 @@ function kvmx_install {
exit 1
fi
- local media="$3"
+ local media="$1"
if [ -z "$media" ]; then
echo "usage: $BASENAME install $VM <installation-media>"
@@ -1469,7 +1515,12 @@ function kvmx_serial {
# Dispatch
if type kvmx_$ACTION 2> /dev/null | grep -q "kvmx_$ACTION ()"; then
- __kvmx_initialize
+ __kvmx_initialize $*
+
+ if [ "$ACTION" != "app_base" ]; then
+ shift $SHIFTARGS
+ fi
+
kvmx_$ACTION $*
else
kvmx_usage
diff --git a/kvmxfile b/kvmxfile
index 5338f59..0137fe1 100644
--- a/kvmxfile
+++ b/kvmxfile
@@ -16,6 +16,7 @@ password="`head -c 20 /dev/urandom | base64`"
net="user"
# Set this is you want to be able to share a single folder between host and guest.
+# Needs ssh_support set to "y" and a workable SSH connection to the guest.
shared_folder="."
shared_folder_mountpoint="/home/$user/code/$VM"
#shared_folder_mountpoint="/srv/shared"
@@ -23,6 +24,7 @@ shared_folder_mountpoint="/home/$user/code/$VM"
#shared_folder_mountpoint="/vagrant"
# Set this is you want to be able to share multiple folders between host and guest.
+# Needs ssh_support set to "y" and a workable SSH connection to the guest.
# Format: <id1>:<host-folder1>:<guest-mountpoint1>,<id2>:<host-folder2>:<guest-mountpoint2>[,...]
#shared_folders="shared1:.:/home/$user/code/$VM,shared2:$HOME/.local/share/app:/home/$user/.local/share/app"
@@ -36,6 +38,7 @@ shared_folder_mountpoint="/home/$user/code/$VM"
#shared_folders_cache="none"
# Folder to sync during provisioning in the format "/host/folder1 /guest/folder1,/host/folder2 /guest/folder2[,...]".
+# Needs ssh_support set to "y" and a workable SSH connection to the guest.
#provision_rsync="$KVMX_BASE/share/provision/ /usr/local/share/kvmx/provision/"
#provision_rsync="puppet/ /etc/puppet/"
@@ -43,6 +46,7 @@ shared_folder_mountpoint="/home/$user/code/$VM"
#provision_rsync_opts="--exclude=somefolder"
# Absolute path for a provision script located inside the guest.
+# Needs ssh_support set to "y" and a workable SSH connection to the guest.
#provision_command="/usr/local/share/kvmx/provision/development && /etc/puppet/bin/provision && /etc/puppet/bin/deploy"
#provision_command="/usr/local/share/kvmx/provision/development && /etc/puppet/bin/deploy"
#provision_command="/usr/local/share/kvmx/provision/development && /home/$user/code/$VM/bin/custom-provisioner"