From 0b1ba88624641cd72be00e75ab1b7382c736e516 Mon Sep 17 00:00:00 2001 From: Antoine Millet Date: Mon, 15 Jun 2015 14:19:59 +0200 Subject: [PATCH] Implemented vm_rescue and vm_unrescue VM handlers --- cloudcontrol/node/config.py | 2 ++ cloudcontrol/node/hypervisor/__init__.py | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/cloudcontrol/node/config.py b/cloudcontrol/node/config.py index 125a93d..d008ae1 100644 --- a/cloudcontrol/node/config.py +++ b/cloudcontrol/node/config.py @@ -111,6 +111,8 @@ class NodeConfigParser(object): # Path to define script default_define_script = 'hkvm-define' self.define_script = config.get('node', 'define_script', default_define_script) + default_rescue_script = 'hkvm-rescue' + self.rescue_script = config.get('node', 'rescue_script', default_rescue_script) # RPC handler ACLs acl_section_name = 'node_handler' diff --git a/cloudcontrol/node/hypervisor/__init__.py b/cloudcontrol/node/hypervisor/__init__.py index bbbdafe..a1a615e 100644 --- a/cloudcontrol/node/hypervisor/__init__.py +++ b/cloudcontrol/node/hypervisor/__init__.py @@ -246,6 +246,30 @@ class Handler(HostHandler): return vm.lv_dom.XMLDesc(0) + @libvirt_handler + def vm_rescue(self, name): + logger.debug('VM rescue %s', name) + if name in self.hypervisor.domains: + rcode, output = execute(self.main, [self.main.config.rescue_script, '-r', name]) + if rcode != 0: + raise RuntimeError(output.strip().split('\n')[-1].strip()) + else: + msg = 'Cannot rescue VM %s because it is not defined' % name + logger.error(msg) + raise UndefinedDomain(msg) + + @libvirt_handler + def vm_unrescue(self, name): + logger.debug('VM unrescue %s', name) + if name in self.hypervisor.domains: + rcode, output = execute(self.main, [self.main.config.rescue_script, '-u', name]) + if rcode != 0: + raise RuntimeError(output.strip().split('\n')[-1].strip()) + else: + msg = 'Cannot unrescue VM %s because it is not defined' % name + logger.error(msg) + raise UndefinedDomain(msg) + @libvirt_handler def vm_stop(self, name): logger.debug('VM stop %s', name) -- GitLab