From eb356897bb20103e57962e1574075aa68d6d7ccc Mon Sep 17 00:00:00 2001 From: Markus Hauschild Date: Sun, 15 Dec 2013 16:38:55 +0100 Subject: [PATCH] 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):