From 5335f5f4cb748540c29d3487942b16d2c9ab5bb1 Mon Sep 17 00:00:00 2001 From: Antoine Millet Date: Tue, 1 Mar 2016 14:02:42 +0100 Subject: [PATCH] Implemented vm_set_vlans VM handler --- cloudcontrol/node/config.py | 2 ++ cloudcontrol/node/hypervisor/__init__.py | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/cloudcontrol/node/config.py b/cloudcontrol/node/config.py index d008ae1..179167a 100644 --- a/cloudcontrol/node/config.py +++ b/cloudcontrol/node/config.py @@ -113,6 +113,8 @@ 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_vlan_script = 'hkvm-vlan' + self.vlan_script = config.get('node', 'vlan_script', default_vlan_script) # RPC handler ACLs acl_section_name = 'node_handler' diff --git a/cloudcontrol/node/hypervisor/__init__.py b/cloudcontrol/node/hypervisor/__init__.py index 3360c79..8e92dff 100644 --- a/cloudcontrol/node/hypervisor/__init__.py +++ b/cloudcontrol/node/hypervisor/__init__.py @@ -256,6 +256,24 @@ class Handler(HostHandler): 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) + if name in self.hypervisor.domains: + if mac_address is None: + rcode, output = execute(self.main, [self.main.config.vlan_script, + name, vlan_update_format]) + else: + rcode, output = execute(self.main, [self.main.config.vlan_script, + '--iface-macaddr', mac_address, + name, vlan_update_format]) + if rcode != 0: + raise RuntimeError(output.strip().split('\n')[-1].strip()) + else: + msg = 'Cannot set vlans on 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