summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominique Martinet <dominique.martinet@cea.fr>2020-05-24 11:38:04 +0200
committerDominique Martinet <dominique.martinet@cea.fr>2020-05-24 11:38:04 +0200
commit565e17394b3d6f8eef83374a8cbaf9928e85f1dc (patch)
treeb18319df8e7e0efb044059c737b1bf95b318c2fc
parent56be3c4226302defe482861ae1d04eb1487112e9 (diff)
refactor kvm_start_vm to prepare for other start methods
-rwxr-xr-xkvm-wrapper.sh56
1 files changed, 32 insertions, 24 deletions
diff --git a/kvm-wrapper.sh b/kvm-wrapper.sh
index b212ba2..499fa44 100755
--- a/kvm-wrapper.sh
+++ b/kvm-wrapper.sh
@@ -690,29 +690,25 @@ function kvm_shutdown ()
done
}
-# Main function: start a virtual machine
-function kvm_start_vm ()
+function cleanup ()
{
- CLEANUP=( )
- CLEANUP_FD=( )
+ local LAST_ELEMENT
+ local FD
+ local i
- cleanup()
- {
- local LAST_ELEMENT
- local FD
- local i
+ echo "Cleaning up"
+ for FD in "${CLEANUP_FD[@]}"; do
+ eval "exec $FD<&-"
+ done
+ while read -r i; do
+ eval ${CLEANUP[i]}
+ done < <(printf "%s\n" "${!FOO[@]}" | tac)
+}
- echo "Cleaning up"
- for FD in "${CLEANUP_FD[@]}"; do
- eval "exec $FD<&-"
- done
- if [ ${#CLEANUP[*]} -gt 0 ]; then
- LAST_ELEMENT=$((${#CLEANUP[*]}-1))
- for i in `seq $LAST_ELEMENT -1 0`; do
- eval ${CLEANUP[$i]}
- done
- fi
- }
+function kvm_start_vm_prep ()
+{
+ CLEANUP=( )
+ CLEANUP_FD=( )
trap cleanup EXIT
@@ -903,15 +899,18 @@ function kvm_start_vm ()
}
# Monitor/serial devices
- KVM_MONITORDEV="-monitor unix:$MONITOR_FILE,server,nowait"
- KVM_SERIALDEV="-serial chardev:char1 -chardev socket,id=char1,path=$SERIAL_FILE,server,nowait,telnet"
- KVM_RNGDEV="-device virtio-rng-pci,max-bytes=1024,period=1000"
+ local KVM_MONITORDEV="-monitor unix:$MONITOR_FILE,server,nowait"
+ local KVM_SERIALDEV="-serial chardev:char1 -chardev socket,id=char1,path=$SERIAL_FILE,server,nowait,telnet"
+ local KVM_RNGDEV="-device virtio-rng-pci,max-bytes=1024,period=1000"
# Build kvm exec string
- local EXEC_STRING="$KVM_PINNING $KVM_BIN -name $VM_NAME,process=\"kvm-$VM_NAME\" $KVM_MEMORY -smp $KVM_CPU_NUM $KVM_PREPEND_PARAMS $KVM_PCIASSIGN $KVM_VFIO $KVM_NET $KVM_DRIVES $KVM_BOOTDEVICE $KVM_KEYMAP $KVM_OUTPUT $LINUXBOOT $KVM_MONITORDEV $KVM_SERIALDEV $KVM_RNGDEV -pidfile $PID_FILE $KVM_ADDITIONNAL_PARAMS"
+ EXEC_STRING="$KVM_PINNING $KVM_BIN -name $VM_NAME,process=\"kvm-$VM_NAME\" $KVM_MEMORY -smp $KVM_CPU_NUM $KVM_PREPEND_PARAMS $KVM_PCIASSIGN $KVM_VFIO $KVM_NET $KVM_DRIVES $KVM_BOOTDEVICE $KVM_KEYMAP $KVM_OUTPUT $LINUXBOOT $KVM_MONITORDEV $KVM_SERIALDEV $KVM_RNGDEV -pidfile $PID_FILE $KVM_ADDITIONNAL_PARAMS"
CLEANUP+=("rm -f \"$PID_FILE\" \"$MONITOR_FILE\" \"$SERIAL_FILE\"")
+}
+function kvm_start_vm_here()
+{
# Now run kvm
echo $EXEC_STRING
echo ""
@@ -929,6 +928,15 @@ function kvm_start_vm ()
return $KVM_RETURN_VALUE
}
+# Main function: start a virtual machine
+function kvm_start_vm ()
+{
+ local EXEC_STRING
+
+ kvm_start_vm_prep
+ kvm_start_vm_here
+}
+
function kvm_stop_vm ()
{
test_exist "$PID_FILE" || fail_exit "VM $VM_NAME doesn't seem to be running.\nPID file $PID_FILE not found"