diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py index c4ebcf931e0..e23782091e9 100644 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -1014,8 +1014,8 @@ def poll_rebooting_instances(self, timeout): def poll_rescued_instances(self, timeout): pass - def _enable_hairpin(self, instance): - interfaces = self.get_interfaces(instance['name']) + def _enable_hairpin(self, xml): + interfaces = self.get_interfaces(xml) for interface in interfaces: utils.execute('tee', '/sys/class/net/%s/brport/hairpin_mode' % interface, @@ -1846,6 +1846,7 @@ def _create_domain(self, xml=None, domain=None, launch_flags=0): if xml: domain = self._conn.defineXML(xml) domain.createWithFlags(launch_flags) + self._enable_hairpin(domain.XMLDesc(0)) return domain def _create_domain_and_network(self, xml, instance, network_info, @@ -1866,7 +1867,6 @@ def _create_domain_and_network(self, xml, instance, network_info, self.firewall_driver.setup_basic_filtering(instance, network_info) self.firewall_driver.prepare_instance_filter(instance, network_info) domain = self._create_domain(xml) - self._enable_hairpin(instance) self.firewall_driver.apply_instance_filter(instance, network_info) return domain @@ -1908,14 +1908,12 @@ def get_disks(self, instance_name): [target.get("dev") for target in doc.findall('devices/disk/target')]) - def get_interfaces(self, instance_name): + def get_interfaces(self, xml): """ - Note that this function takes an instance name. + Note that this function takes an domain xml. Returns a list of all network interfaces for this instance. """ - domain = self._lookup_by_name(instance_name) - xml = domain.XMLDesc(0) doc = None try: