]> gitweb.fluxo.info Git - kvmx.git/commitdiff
Support for disposable guests
authorSilvio Rhatto <rhatto@riseup.net>
Sun, 4 Nov 2018 15:18:19 +0000 (13:18 -0200)
committerSilvio Rhatto <rhatto@riseup.net>
Sun, 4 Nov 2018 15:18:19 +0000 (13:18 -0200)
kvmx

diff --git a/kvmx b/kvmx
index 85e5c4c35508f82d372b3148a796db64e29b01e4..b902ba3b5c206686b6e6a4009bd48eeb1cb0166b 100755 (executable)
--- a/kvmx
+++ b/kvmx
@@ -1185,6 +1185,7 @@ function kvmx_clone {
 
   FOLDER="$1"
   DEST="`basename $FOLDER`"
+  OPT="$2"
 
   if [ -z "$FOLDER" ]; then
     kvmx_usage
@@ -1215,7 +1216,11 @@ function kvmx_clone {
   # Copy image and configuration
   echo "Copying basebox..."
   if which rsync &> /dev/null; then
-    rsync -ah --sparse --progress $STORAGE/ $FOLDER/
+    if [ "$OPT" == "--skell" ]; then
+      local exclude="--exclude=box.img"
+    fi
+
+    rsync -ah --sparse --progress $exclude $STORAGE/ $FOLDER/
   else
     cp -r --sparse=always $STORAGE/ $FOLDER/
   fi
@@ -2040,6 +2045,35 @@ function kvmx_create {
   fi
 }
 
+# Disposable guest
+function kvmx_disposable {
+  local date="`date +%Y%m%d%I%M%S`"
+  local disposable="$VM-disposable-$date"
+
+  # Clone and ensure we use a backing file
+  kvmx clone $VM $disposable --skell || exit 1
+  echo "basebox=$VM"      >> $GLOBAL_USER_CONFIG_FOLDER/$disposable
+  echo 'backing_file="1"' >> $GLOBAL_USER_CONFIG_FOLDER/$disposable
+
+  kvmx up $disposable
+
+  echo "Waiting for the VM $disposable to stop before erasing it..."
+
+  local image="`kvmx list_image $disposable`"
+  local folder="`dirname $image`"
+
+  # Remove VM after it stopped
+  while true; do
+    if ! kvmx running $disposable; then
+      kvmx purge $disposable
+      rm -rf $folder
+      exit
+    fi
+
+    sleep 10
+  done
+}
+
 # Dispatch
 if type kvmx_$ACTION 2> /dev/null | grep -q "kvmx_$ACTION ()"; then
   __kvmx_initialize $*