From a2758e838163b47582ce3f770d7bc9e973ecd57c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Dunand?= <aurelien.dunand@tdf.fr> Date: Fri, 4 May 2018 16:41:00 +0200 Subject: [PATCH] Add VM install mode support --- cloudcontrol/node/config.py | 4 ++++ cloudcontrol/node/hypervisor/__init__.py | 24 +++++++++++++++++++ .../node/hypervisor/domains/vm_tags.py | 16 ++++++++----- 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/cloudcontrol/node/config.py b/cloudcontrol/node/config.py index 207e90d..c251892 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 d5607e7..608b5f0 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 2bb7eff..a949f48 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): -- GitLab