From eb356897bb20103e57962e1574075aa68d6d7ccc Mon Sep 17 00:00:00 2001 From: Markus Hauschild Date: Sun, 15 Dec 2013 16:38:55 +0100 Subject: [PATCH 1/2] add untested code to allow resuming of a hibernated VM --- VMHelper.py | 11 +++++++++-- manager.py | 9 +++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/VMHelper.py b/VMHelper.py index 22473b0..3e83e3a 100644 --- a/VMHelper.py +++ b/VMHelper.py @@ -76,7 +76,7 @@ class VMHelper: else: raise Exception("Missing VMs config section!") - def startVM(self, vmid, managerpath): + def startVM(self, vmid, managerpath, hibernate_ignore=False): self.setupNetwork(vmid) cmd = [] @@ -88,13 +88,20 @@ class VMHelper: cmd.append(managerpath) cmd.append(self.config['kvm']['executable']) cmd.append(vmid) - + cmd.append("-pidfile") cmd.append(self.config['kvm']['pidfile'].replace("$VMID", vmid)) cmd.append("-qmp") cmd.append("unix:" + self.config['kvm']['qmpsocket'].replace("$VMID", vmid) + ",server,nowait") + hibernate_file = self.config['kvm']['hibernatefile'].replace("$VMID", vmid) + # check if ignore hibernate file flag is set + if (not hibernate_ignore): + if (os.path.isfile(hibernate_file)): + cmd.append("-incoming") + cmd.append("\"exec: cat " + hibernate_file + "\"") + if "runas" in self.config["kvm"]: cmd.append("-runas") cmd.append(self.config["kvm"]["runas"]) diff --git a/manager.py b/manager.py index 0f4196e..d11484b 100755 --- a/manager.py +++ b/manager.py @@ -39,19 +39,24 @@ def vmm_start(args): print("VM {0} is already running!".format(args.vmid)) return - #TODO: pass ignore hibernation file flag print('Starting VM {0.vmid}.'.format(args)) fullpath_manager = os.path.realpath(sys.argv[0]) - helper.startVM(args.vmid,fullpath_manager) + + if (args.i is not None and args.i >= 1): + helper.startVM(args.vmid, fullpath_manager, True) + else: + helper.startVM(args.vmid, fullpath_manager) #print("Successfully started: " + ("yes" if helper.process_running(args.vmid) else "no")) def vmm_shutdown(args): + print('Shutting down all VMs.') timeout = SHUTDOWN_TIMEOUT if args.t is None or args.t < 0 else args.t stCallback = lambda vmid, st : print("VM {0}: {1}".format(vmid, stopStatusToMessage[st])) helper.shutdownVMs(timeout, args.s is None or args.s < 1, statusCallback=stCallback) def vmm_hibernate(args): + print('Hibernating all VMs.') #TODO: implement ;) def vmm_stop(args): From fe76eda41b1e08af88f6c6fd108b58627b4fc038 Mon Sep 17 00:00:00 2001 From: Markus Hauschild Date: Sun, 15 Dec 2013 17:50:11 +0100 Subject: [PATCH 2/2] black magic escapint stuff ... thanks davidk --- VMHelper.py | 2 +- qemu-wrapper.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/VMHelper.py b/VMHelper.py index 3e83e3a..63ae79c 100644 --- a/VMHelper.py +++ b/VMHelper.py @@ -100,7 +100,7 @@ class VMHelper: if (not hibernate_ignore): if (os.path.isfile(hibernate_file)): cmd.append("-incoming") - cmd.append("\"exec: cat " + hibernate_file + "\"") + cmd.append("exec: cat " + hibernate_file) if "runas" in self.config["kvm"]: cmd.append("-runas") diff --git a/qemu-wrapper.sh b/qemu-wrapper.sh index 2d93942..54b48aa 100755 --- a/qemu-wrapper.sh +++ b/qemu-wrapper.sh @@ -10,5 +10,5 @@ shift vmid=$1 shift -$QEMU $@ +$QEMU "$@" $python $manager cleanup $vmid