diff --git a/cloudcontrol/node/config.py b/cloudcontrol/node/config.py index 207e90dd21971be830e74a87806a5328cc49104b..c2518926da83012428c0e8c8c605b2ddd433828e 100644 --- a/cloudcontrol/node/config.py +++ b/cloudcontrol/node/config.py @@ -113,6 +113,10 @@ class NodeConfigParser(object): 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) + default_install_script = 'hkvm-install' + self.install_script = config.get('node', 'install_script', default_install_script) + default_mode_script = 'hkvm-mode' + self.mode_script = config.get('node', 'mode_script', default_mode_script) default_vlan_script = 'hkvm-vlan' self.vlan_script = config.get('node', 'vlan_script', default_vlan_script) default_attach_script = 'hkvm-attach' diff --git a/cloudcontrol/node/hypervisor/__init__.py b/cloudcontrol/node/hypervisor/__init__.py index d5607e7ba317d8bc259b4b12093a867e1d3af4ec..608b5f024a452c7b4cd0178a43111e143f45e7eb 100644 --- a/cloudcontrol/node/hypervisor/__init__.py +++ b/cloudcontrol/node/hypervisor/__init__.py @@ -258,6 +258,30 @@ class Handler(HostHandler): logger.error(msg) raise UndefinedDomain(msg) + @libvirt_handler + def vm_install(self, name): + logger.debug('VM install %s', name) + if name in self.hypervisor.domains: + rcode, output = execute(self.main, [self.main.config.install_script, '-i', name]) + if rcode != 0: + raise RuntimeError(output.strip().split('\n')[-1].strip()) + else: + msg = 'Cannot install VM %s because it is not defined' % name + logger.error(msg) + raise UndefinedDomain(msg) + + @libvirt_handler + def vm_uninstall(self, name): + logger.debug('VM uninstall %s', name) + if name in self.hypervisor.domains: + rcode, output = execute(self.main, [self.main.config.install_script, '-u', name]) + if rcode != 0: + raise RuntimeError(output.strip().split('\n')[-1].strip()) + else: + msg = 'Cannot uninstall VM %s because it is not defined' % name + logger.error(msg) + raise UndefinedDomain(msg) + @libvirt_handler def vm_set_vlans(self, name, vlan_update_format, mac_address=None): logger.debug('VM set vlan %s', name) diff --git a/cloudcontrol/node/hypervisor/domains/vm_tags.py b/cloudcontrol/node/hypervisor/domains/vm_tags.py index 2bb7effa47925b7c57baa03a928223e366ccdfa8..a949f488c90d07dd7a7d9b85b148936003ca23de 100644 --- a/cloudcontrol/node/hypervisor/domains/vm_tags.py +++ b/cloudcontrol/node/hypervisor/domains/vm_tags.py @@ -60,14 +60,18 @@ def uuid(dom): @background(max_concurrent=3) -def rescue(dom): - """Is rescue mode enabled or not""" - rescue_path = dom.hypervisor.handler.main.config.rescue_script - rcode, output = execute(dom.hypervisor.handler.main, [rescue_path, '-s', dom.name]) +def mode(dom): + """Retrieve VM mode""" + mode_path = dom.hypervisor.handler.main.config.mode_script + rcode, output = execute(dom.hypervisor.handler.main, [mode_path, '-m', dom.name]) if rcode == 0: - return output.strip() + try: + res = output.rsplit(':', 1)[-1].strip() + except IndexError: + res = 'error' else: - return 'error' + res= 'error' + return res def status(dom):