diff options
-rw-r--r-- | os_net_config/impl_ifcfg.py | 46 | ||||
-rw-r--r-- | os_net_config/tests/test_impl_ifcfg.py | 23 |
2 files changed, 57 insertions, 12 deletions
diff --git a/os_net_config/impl_ifcfg.py b/os_net_config/impl_ifcfg.py index 0fe6ae1..1142a6e 100644 --- a/os_net_config/impl_ifcfg.py +++ b/os_net_config/impl_ifcfg.py @@ -58,6 +58,7 @@ class IfcfgNetConfig(os_net_config.NetConfig): super(IfcfgNetConfig, self).__init__(noop, root_dir) self.interface_data = {} self.ivsinterface_data = {} + self.vlan_data = {} self.route_data = {} self.route6_data = {} self.bridge_data = {} @@ -281,7 +282,7 @@ class IfcfgNetConfig(os_net_config.NetConfig): logger.info('adding vlan: %s' % vlan.name) data = self._add_common(vlan) logger.debug('vlan data: %s' % data) - self.interface_data[vlan.name] = data + self.vlan_data[vlan.name] = data if vlan.routes: self._add_routes(vlan.name, vlan.routes) @@ -353,7 +354,6 @@ class IfcfgNetConfig(os_net_config.NetConfig): logger.info('adding linux bond: %s' % bond.name) data = self._add_common(bond) logger.debug('bond data: %s' % data) - self.interface_data[bond.name] = data self.linuxbond_data[bond.name] = data if bond.routes: self._add_routes(bond.name, bond.routes) @@ -395,7 +395,9 @@ class IfcfgNetConfig(os_net_config.NetConfig): """ logger.info('applying network configs...') restart_interfaces = [] + restart_vlans = [] restart_bridges = [] + restart_linux_bonds = [] update_files = {} all_file_names = [] ivs_uplinks = [] # ivs physical uplinks @@ -409,6 +411,7 @@ class IfcfgNetConfig(os_net_config.NetConfig): route6_path = self.root_dir + route6_config_path(interface_name) all_file_names.append(interface_path) all_file_names.append(route_path) + all_file_names.append(route6_path) if "IVS_BRIDGE" in iface_data: ivs_uplinks.append(interface_name) all_file_names.append(route6_path) @@ -426,10 +429,13 @@ class IfcfgNetConfig(os_net_config.NetConfig): for interface_name, iface_data in self.ivsinterface_data.iteritems(): route_data = self.route_data.get(interface_name, '') + route6_data = self.route6_data.get(interface_name, '') interface_path = self.root_dir + ifcfg_config_path(interface_name) route_path = self.root_dir + route_config_path(interface_name) + route6_path = self.root_dir + route6_config_path(interface_name) all_file_names.append(interface_path) all_file_names.append(route_path) + all_file_names.append(route6_path) ivs_interfaces.append(interface_name) if (utils.diff(interface_path, iface_data) or utils.diff(route_path, route_data)): @@ -437,9 +443,31 @@ class IfcfgNetConfig(os_net_config.NetConfig): restart_interfaces.extend(self.child_members(interface_name)) update_files[interface_path] = iface_data update_files[route_path] = route_data + update_files[route6_path] = route6_data + else: logger.info('No changes required for ivs interface: %s' % interface_name) + for vlan_name, vlan_data in self.vlan_data.iteritems(): + route_data = self.route_data.get(vlan_name, '') + route6_data = self.route6_data.get(vlan_name, '') + vlan_path = self.root_dir + ifcfg_config_path(vlan_name) + vlan_route_path = self.root_dir + route_config_path(vlan_name) + vlan_route6_path = self.root_dir + route6_config_path(vlan_name) + all_file_names.append(vlan_path) + all_file_names.append(vlan_route_path) + all_file_names.append(vlan_route6_path) + if (utils.diff(vlan_path, vlan_data) or + utils.diff(vlan_route_path, route_data)): + restart_vlans.append(vlan_name) + restart_vlans.extend(self.child_members(vlan_name)) + update_files[vlan_path] = vlan_data + update_files[vlan_route_path] = route_data + update_files[vlan_route6_path] = route6_data + else: + logger.info('No changes required for vlan interface: %s' % + vlan_name) + for bridge_name, bridge_data in self.bridge_data.iteritems(): route_data = self.route_data.get(bridge_name, '') route6_data = self.route6_data.get(bridge_name, '') @@ -492,7 +520,7 @@ class IfcfgNetConfig(os_net_config.NetConfig): if (utils.diff(bond_path, bond_data) or utils.diff(bond_route_path, route_data) or utils.diff(bond_route6_path, route6_data)): - restart_interfaces.append(bond_name) + restart_linux_bonds.append(bond_name) restart_interfaces.extend(self.child_members(bond_name)) update_files[bond_path] = bond_data update_files[bond_route_path] = route_data @@ -512,9 +540,15 @@ class IfcfgNetConfig(os_net_config.NetConfig): self.remove_config(ifcfg_file) if activate: + for vlan in restart_vlans: + self.ifdown(vlan) + for interface in restart_interfaces: self.ifdown(interface) + for linux_bond in restart_linux_bonds: + self.ifdown(linux_bond) + for bridge in restart_bridges: self.ifdown(bridge, iftype='bridge') @@ -530,6 +564,9 @@ class IfcfgNetConfig(os_net_config.NetConfig): self.write_config(location, data) if activate: + for linux_bond in restart_linux_bonds: + self.ifup(linux_bond) + for bridge in restart_bridges: self.ifup(bridge, iftype='bridge') @@ -553,4 +590,7 @@ class IfcfgNetConfig(os_net_config.NetConfig): self.execute(msg, '/usr/bin/systemctl', 'restart', 'ivs') + for vlan in restart_vlans: + self.ifup(vlan) + return update_files diff --git a/os_net_config/tests/test_impl_ifcfg.py b/os_net_config/tests/test_impl_ifcfg.py index 3500e4c..fa85de7 100644 --- a/os_net_config/tests/test_impl_ifcfg.py +++ b/os_net_config/tests/test_impl_ifcfg.py @@ -179,11 +179,11 @@ BOOTPROTO=none """ _VLAN_LINUX_BRIDGE = _BASE_VLAN_OVS + """VLAN=yes +PHYSDEV=em1 BRIDGE=br-ctlplane BOOTPROTO=none """ - _OVS_BOND_DHCP = """# This file is autogenerated by os-net-config DEVICE=bond0 ONBOOT=yes @@ -246,6 +246,12 @@ class TestIfcfgNetConfig(base.TestCase): def get_interface_config(self, name='em1'): return self.provider.interface_data[name] + def get_vlan_config(self, name='vlan1'): + return self.provider.vlan_data[name] + + def get_linux_bond_config(self, name='bond0'): + return self.provider.linuxbond_data[name] + def get_route_config(self, name='em1'): return self.provider.route_data.get(name, '') @@ -430,19 +436,19 @@ class TestIfcfgNetConfig(base.TestCase): def test_add_vlan(self): vlan = objects.Vlan('em1', 5) self.provider.add_vlan(vlan) - self.assertEqual(_VLAN_NO_IP, self.get_interface_config('vlan5')) + self.assertEqual(_VLAN_NO_IP, self.get_vlan_config('vlan5')) def test_add_vlan_ovs(self): vlan = objects.Vlan('em1', 5) vlan.ovs_port = True self.provider.add_vlan(vlan) - self.assertEqual(_VLAN_OVS, self.get_interface_config('vlan5')) + self.assertEqual(_VLAN_OVS, self.get_vlan_config('vlan5')) def test_add_vlan_mtu_1500(self): vlan = objects.Vlan('em1', 5, mtu=1500) self.provider.add_vlan(vlan) expected = _VLAN_NO_IP + 'MTU=1500\n' - self.assertEqual(expected, self.get_interface_config('vlan5')) + self.assertEqual(expected, self.get_vlan_config('vlan5')) def test_add_ovs_bridge_with_vlan(self): vlan = objects.Vlan('em1', 5) @@ -450,16 +456,15 @@ class TestIfcfgNetConfig(base.TestCase): members=[vlan]) self.provider.add_vlan(vlan) self.provider.add_bridge(bridge) - self.assertEqual(_VLAN_OVS_BRIDGE, self.get_interface_config('vlan5')) + self.assertEqual(_VLAN_OVS_BRIDGE, self.get_vlan_config('vlan5')) def test_add_linux_bridge_with_vlan(self): - vlan = objects.Vlan(None, 5) + vlan = objects.Vlan('em1', 5) bridge = objects.LinuxBridge('br-ctlplane', use_dhcp=True, members=[vlan]) self.provider.add_vlan(vlan) self.provider.add_bridge(bridge) - self.assertEqual(_VLAN_LINUX_BRIDGE, - self.get_interface_config('vlan5')) + self.assertEqual(_VLAN_LINUX_BRIDGE, self.get_vlan_config('vlan5')) def test_ovs_bond(self): interface1 = objects.Interface('em1') @@ -489,7 +494,7 @@ BOOTPROTO=none members=[interface1, interface2]) self.provider.add_linux_bond(bond) self.assertEqual(_LINUX_BOND_DHCP, - self.get_interface_config('bond0')) + self.get_linux_bond_config('bond0')) def test_interface_defroute(self): interface1 = objects.Interface('em1') |