From af110352f8f61f68c4758f2c8c0846f9691e6bf1 Mon Sep 17 00:00:00 2001 From: Dan Prince Date: Mon, 9 Jun 2014 16:38:34 -0400 Subject: Initial ifcfg implementation for interfaces/routes Ifcfg formatted persistence for interfaces and routes. --- os_net_config/impl_ifcfg.py | 93 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 os_net_config/impl_ifcfg.py (limited to 'os_net_config/impl_ifcfg.py') diff --git a/os_net_config/impl_ifcfg.py b/os_net_config/impl_ifcfg.py new file mode 100644 index 0000000..c4fbde4 --- /dev/null +++ b/os_net_config/impl_ifcfg.py @@ -0,0 +1,93 @@ +# -*- coding: utf-8 -*- + +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + + +def ifcfg_config_path(name): + return "/etc/sysconfig/network-scripts/ifcfg-%s" % name + + +def route_config_path(name): + return "/etc/sysconfig/network-scripts/route-%s" % name + + +def writeConfig(filename, data): + with open(filename, "w") as f: + f.write(str(data)) + + +def get_config(filename): + with open(filename, "r") as f: + return f.read() + + +def diff(filename, data): + return get_config(filename) == data + + +class IfcfgNetwork(object): + """Configure network interfaces using the ifcfg format.""" + + def __init__(self): + self.interfaces = {} + self.routes = {} + + def addInterface(self, interface): + data = "DEVICE=%s\n" % interface.name + data += "ONBOOT=yes\n" + data += "HOTPLUG=no\n" + if interface.type == 'ovs': + data += "DEVICETYPE=ovs\n" + if interface.bridge: + data += "TYPE=OVSPort\n" + data += "OVS_BRIDGE=%s\n" % interface.bridge + data += "BOOTPROTO=none\n" + if interface.mtu != 1500: + data += "MTU=%i\n" % interface.mtu + if interface.use_dhcp: + data += "BOOTPROTO=dhcp\n" + if interface.use_dhcpv6 or interface.v6_addresses(): + data += "IPV6INIT=yes\n" + if interface.mtu != 1500: + data += "IPV6_MTU=%i\n" % interface.mtu + if interface.use_dhcpv6: + data += "DHCPV6C=yes\n" + elif interface.addresses: + #TODO(dprince): support multiple addresses for each type + v4_addresses = interface.v4_addresses() + if v4_addresses: + first_v4 = v4_addresses[0] + data += "BOOTPROTO=static\n" + data += "IPADDR=%s\n" % first_v4.ip + data += "NETMASK=%s\n" % first_v4.netmask + + v6_addresses = interface.v6_addresses() + if v6_addresses: + first_v6 = v6_addresses[0] + data += "IPV6_AUTOCONF=no\n" + data += "IPV6ADDR=%s\n" % first_v6.ip + + self.interfaces[interface.name] = data + + def addRoutes(self, interface_name, routes=[]): + data = "" + first_line = "" + for route in routes: + if route.default: + first_line = "default %s dev %s\n" % (route.next_hop, + interface_name) + else: + data += "%s via %s dev %s" % (route.ip_netmask, + route.next_hop, + interface_name) + self.routes[interface_name] == first_line + data -- cgit 1.2.3-korg