diff options
author | Dominique Martinet <dominique.martinet@cea.fr> | 2020-05-24 11:38:04 +0200 |
---|---|---|
committer | Dominique Martinet <dominique.martinet@cea.fr> | 2020-05-24 11:38:04 +0200 |
commit | 565e17394b3d6f8eef83374a8cbaf9928e85f1dc (patch) | |
tree | b18319df8e7e0efb044059c737b1bf95b318c2fc | |
parent | 56be3c4226302defe482861ae1d04eb1487112e9 (diff) |
refactor kvm_start_vm to prepare for other start methods
-rwxr-xr-x | kvm-wrapper.sh | 56 |
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" |