diff --git a/src/hostinfo/ifconfig.py b/src/hostinfo/ifconfig.py index 3163ab48560d864116342e950d26c8e9fe9917da..6fc900c75bc66d79db35c9ec2e9a89bba7b6f47a 100755 --- a/src/hostinfo/ifconfig.py +++ b/src/hostinfo/ifconfig.py @@ -17,37 +17,49 @@ def get_uuid(device): pass -def is_static(interface): - if interface._static_: +def interface_is_static(i): + if i._static_: return True - if interface._ip_._dhcpserver_: + if i._ip_._dhcpserver_: return True - if interface._ipv6_._dhcpserver_: + if i._ipv6_._dhcpserver_: + return True + return False + +def address_is_static(a): + if interface_is_static(a._parent): + return True + if a.static[0] != None and a.static[0].lower() in [ 'yes', '1' ]: return True return False def generate_ifcfgv4(tree, interface, search, nameservers): config = [] - - if not is_static(interface): + + if not interface_is_static(interface): config.append('BOOTPROTO=dhcp') pass else: config.append('BOOTPROTO=none') - index = '' - for ip in filter(util.address, interface._ip_): - a = util.address(ip) - netmask = None - network = None - broadcast = None - gateway = None - for s in filter(util.network, tree._subnet_ ): - n = util.network(s) - if a in n: - netmask = n.netmask - network = n.network - broadcast = n.broadcast - gateway = s.gateway[0] + pass + + index = '' + for ip in filter(util.address, interface._ip_): + if not address_is_static(ip): + continue + a = util.address(ip) + netmask = None + network = None + broadcast = None + gateway = None + for s in filter(util.network, tree._subnet_ ): + n = util.network(s) + if a in n: + netmask = n.netmask + network = n.network + broadcast = n.broadcast + gateway = s.gateway[0] + if interface_is_static(interface): if s.name_servers[0]: nameservers.extend(re.split('[, ]+', s.name_servers[0])) pass @@ -56,33 +68,33 @@ def generate_ifcfgv4(tree, interface, search, nameservers): pass pass pass - if ip.netmask[0]: netmask = ip.netmask[0] - if ip.network[0]: network = ip.network[0] - if ip.broadcast[0]: broadcast = ip.broadcast[0] - if ip.gateway[0]: gateway = ip.gateway[0] - if ip.search[0]: search.update(ip.search[0].split()) - config.append('IPADDR%s=%s' % (index, a)) - if netmask: - config.append('NETMASK%s=%s' % (index, netmask)) - pass - if gateway: - config.append('GATEWAY%s=%s' % (index, gateway)) - pass - if network: - config.append('NETWORK%s=%s' % (index, network)) - pass - if broadcast: - config.append('BROADCAST%s=%s' % (index, broadcast)) - pass - index = int('0%s' % index)+1 pass + if ip.netmask[0]: netmask = ip.netmask[0] + if ip.network[0]: network = ip.network[0] + if ip.broadcast[0]: broadcast = ip.broadcast[0] + if ip.gateway[0]: gateway = ip.gateway[0] + if ip.search[0]: search.update(ip.search[0].split()) + config.append('IPADDR%s=%s' % (index, a)) + if netmask: + config.append('NETMASK%s=%s' % (index, netmask)) + pass + if gateway: + config.append('GATEWAY%s=%s' % (index, gateway)) + pass + if network: + config.append('NETWORK%s=%s' % (index, network)) + pass + if broadcast: + config.append('BROADCAST%s=%s' % (index, broadcast)) + pass + index = int('0%s' % index)+1 pass return config def generate_ifcfgv6(tree, interface, search, nameservers): config = [] - if not is_static(interface): + if not interface_is_static(interface): config.append('IPV6INIT=yes') config.append('IPV6_AUTOCONF=yes') config.append('IPV6_DEFROUTE=yes')