From a101740ac3346ae3645dbbff4df8b8f333a59b67 Mon Sep 17 00:00:00 2001 From: Dan Prince Date: Wed, 2 Jul 2014 11:21:09 -0400 Subject: ENI fixes for v4/v6 ips. DHCP test fixes. Updates the ENI format so it creates multiple config sections for a single os-net-config interface object if both v4 and v6 IP addresses are defined. Also, fixes several of the test so that DHCP is not enabled on OvsPorts. If an OVS port is part of a bridge that is itself using DHCP we don't also need to run DHCP on the OvsPort interface. --- os_net_config/impl_eni.py | 49 ++++++++++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 20 deletions(-) (limited to 'os_net_config/impl_eni.py') diff --git a/os_net_config/impl_eni.py b/os_net_config/impl_eni.py index 20677da..56cb3bf 100644 --- a/os_net_config/impl_eni.py +++ b/os_net_config/impl_eni.py @@ -27,7 +27,7 @@ def _network_config_path(): class ENINetConfig(os_net_config.NetConfig): - """Ubuntu/Debian implementation for network config + """Debian/Ubuntu implementation for network config Configure iface/bridge/routes using debian/ubuntu /etc/network/interfaces format. @@ -38,20 +38,27 @@ class ENINetConfig(os_net_config.NetConfig): self.routes = {} self.bridges = {} - def _addCommon(self, interface): + def _addCommon(self, interface, static_addr=None): - def _static_addresses(_v4, _v6): - addr = _v4 + _v6 - address_data = "" - if addr: - address_data += "address %s\n" % addr[0].ip - address_data += "netmask %s\n" % addr[0].netmask - return address_data + data = "" + address_data = "" + if static_addr: + address_data += " address %s\n" % static_addr.ip + address_data += " netmask %s\n" % static_addr.netmask + else: + v4_addresses = interface.v4_addresses() + if v4_addresses: + data += self._addCommon(interface, v4_addresses[0]) + + v6_addresses = interface.v6_addresses() + if v6_addresses: + data += self._addCommon(interface, v6_addresses[0]) + + if data: + return data - _v6 = interface.v6_addresses() - _v4 = interface.v4_addresses() _iface = "iface %s " % interface.name - if _v6: + if static_addr and static_addr.version == 6: _iface += "inet6 " else: _iface += "inet " @@ -61,27 +68,29 @@ class ENINetConfig(os_net_config.NetConfig): _iface += "static\n" else: _iface += "manual\n" - data = "" if isinstance(interface, objects.OvsBridge): data += "allow-ovs %s\n" % interface.name data += _iface - data += _static_addresses(_v4, _v6) - data += "ovs_type OVSBridge\n" + data += address_data + data += " ovs_type OVSBridge\n" if interface.members: - data += "ovs_ports" + data += " ovs_ports" for i in interface.members: data += " %s" % i.name data += "\n" + for i in interface.members: + data += " pre-up ip addr flush dev %s\n" % i.name elif interface.ovs_port: + data += "auto %s\n" % interface.name data += "allow-%s %s\n" % (interface.bridge_name, interface.name) data += _iface - data += _static_addresses(_v4, _v6) - data += "ovs_bridge %s\n" % interface.bridge_name - data += "ovs_type OVSPort\n" + data += address_data + data += " ovs_bridge %s\n" % interface.bridge_name + data += " ovs_type OVSPort\n" else: data += "auto %s\n" % interface.name data += _iface - data += _static_addresses(_v4, _v6) + data += address_data return data def addInterface(self, interface): -- cgit 1.2.3-korg