diff --git a/cloudcontrol/node/config.py b/cloudcontrol/node/config.py index cc326c893e696b764a3ade9e73378c3e78af28bf..207e90dd21971be830e74a87806a5328cc49104b 100644 --- a/cloudcontrol/node/config.py +++ b/cloudcontrol/node/config.py @@ -119,6 +119,8 @@ class NodeConfigParser(object): self.attach_script = config.get('node', 'attach_script', default_attach_script) default_detach_script = 'hkvm-detach' self.detach_script = config.get('node', 'detach_script', default_detach_script) + default_boot_order_script = 'hkvm-boot-order' + self.boot_order_script = config.get('node', 'boot_order_script', default_boot_order_script) # RPC handler ACLs acl_section_name = 'node_handler' diff --git a/cloudcontrol/node/hypervisor/__init__.py b/cloudcontrol/node/hypervisor/__init__.py index 5aa9a6fc616f1565e5aafdf5195b2f29caf7512c..37f5a604962dab2c09307c1af5a9cd1cf0d86f20 100644 --- a/cloudcontrol/node/hypervisor/__init__.py +++ b/cloudcontrol/node/hypervisor/__init__.py @@ -304,6 +304,20 @@ class Handler(HostHandler): logger.error(msg) raise UndefinedDomain(msg) + @libvirt_handler + def vm_boot_order(self, name, order): + logger.debug('VM boot order %s -> %s', name, order) + if name in self.hypervisor.domains: + args_order = ['%s:%s' % tuple(x) for x in order] + rcode, output = execute(self.main, [self.main.config.boot_order_script, + name] + args_order) + if rcode != 0: + raise RuntimeError(output.strip().split('\n')[-1].strip()) + else: + msg = 'Cannot change boot order of 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)