diff options
| author | Silvio Rhatto <rhatto@riseup.net> | 2017-12-31 00:08:25 -0200 | 
|---|---|---|
| committer | Silvio Rhatto <rhatto@riseup.net> | 2017-12-31 00:08:25 -0200 | 
| commit | 49c42178e30d8453dbd53a5f0f04f0db751fa432 (patch) | |
| tree | 34286e52176b8cda6d42caf35fb8c2b703253dc2 | |
| parent | d2263b94f93e0c0b7549c5a84c18834f8e6e8f58 (diff) | |
| download | kvmx-49c42178e30d8453dbd53a5f0f04f0db751fa432.tar.gz kvmx-49c42178e30d8453dbd53a5f0f04f0db751fa432.tar.bz2 | |
Better command-line argument handling and additional action checks
| -rwxr-xr-x | kvmx | 109 | ||||
| -rw-r--r-- | kvmxfile | 4 | 
2 files changed, 84 insertions, 29 deletions
| @@ -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 @@ -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" | 
