From 411c6457222f9b33d2fa272dc61fb0c56e3a8be3 Mon Sep 17 00:00:00 2001 From: Joshua Harlow <harlowja@gmail.com> Date: Sun, 30 Nov 2014 21:26:14 -0800 Subject: Be more tolerant of missing information Instead of failing when IPv6 information is not found we should be more tolerant of said information not existing so that we behave like the pre IPv6 addition. --- cloudinit/netinfo.py | 98 +++++++++++++++++++++++++++------------------------- 1 file changed, 50 insertions(+), 48 deletions(-) diff --git a/cloudinit/netinfo.py b/cloudinit/netinfo.py index d891315b..473b5fd6 100644 --- a/cloudinit/netinfo.py +++ b/cloudinit/netinfo.py @@ -97,7 +97,6 @@ def netdev_info(empty=""): def route_info(): (route_out, _err) = util.subp(["netstat", "-rn"]) - (route_out6, _err6) = util.subp(["netstat", "-A inet6", "-n"]) routes = {} routes['ipv4'] = [] @@ -140,24 +139,29 @@ def route_info(): routes['ipv4'].append(entry) - entries6 = route_out6.splitlines()[1:] - for line in entries6: - if not line: - continue - toks = line.split() - - if (len(toks) < 6 or toks[0] == "Kernel" or - toks[0] == "Proto" or toks[0] == "Active"): - continue - entry = { - 'proto': toks[0], - 'recv-q': toks[1], - 'send-q': toks[2], - 'local address': toks[3], - 'foreign address': toks[4], - 'state': toks[5], - } - routes['ipv6'].append(entry) + try: + (route_out6, _err6) = util.subp(["netstat", "-A", "inet6", "-n"]) + except util.ProcessExecutionError: + pass + else: + entries6 = route_out6.splitlines()[1:] + for line in entries6: + if not line: + continue + toks = line.split() + + if (len(toks) < 6 or toks[0] == "Kernel" or + toks[0] == "Proto" or toks[0] == "Active"): + continue + entry = { + 'proto': toks[0], + 'recv-q': toks[1], + 'send-q': toks[2], + 'local address': toks[3], + 'foreign address': toks[4], + 'state': toks[5], + } + routes['ipv6'].append(entry) return routes @@ -179,14 +183,14 @@ def netdev_pformat(): netdev = netdev_info(empty=".") except Exception: lines.append(util.center("Net device info failed", '!', 80)) - netdev = None - if netdev is not None: + else: fields = ['Device', 'Up', 'Address', 'Mask', 'Scope', 'Hw-Address'] tbl = PrettyTable(fields) for (dev, d) in netdev.iteritems(): tbl.add_row([dev, d["up"], d["addr"], d["mask"], ".", d["hwaddr"]]) - if d["addr6"]: - tbl.add_row([dev, d["up"], d["addr6"], ".", d["scope6"], d["hwaddr"]]) + if d.get('addr6'): + tbl.add_row([dev, d["up"], + d["addr6"], ".", d.get("scope6"), d["hwaddr"]]) netdev_s = tbl.get_string() max_len = len(max(netdev_s.splitlines(), key=len)) header = util.center("Net device info", "+", max_len) @@ -201,35 +205,33 @@ def route_pformat(): except Exception as e: lines.append(util.center('Route info failed', '!', 80)) util.logexc(LOG, "Route info failed: %s" % e) - routes = None - if routes is not None: - fields_v4 = ['Route', 'Destination', 'Gateway', - 'Genmask', 'Interface', 'Flags'] - - if routes.get('ipv6') is not None: - fields_v6 = ['Route', 'Proto', 'Recv-Q', 'Send-Q', 'Local Address', - 'Foreign Address', 'State'] - - tbl_v4 = PrettyTable(fields_v4) - for (n, r) in enumerate(routes.get('ipv4')): - route_id = str(n) - tbl_v4.add_row([route_id, r['destination'], - r['gateway'], r['genmask'], - r['iface'], r['flags']]) - route_s = tbl_v4.get_string() - if fields_v6: + else: + if routes.get('ipv4'): + fields_v4 = ['Route', 'Destination', 'Gateway', + 'Genmask', 'Interface', 'Flags'] + tbl_v4 = PrettyTable(fields_v4) + for (n, r) in enumerate(routes.get('ipv4')): + route_id = str(n) + tbl_v4.add_row([route_id, r['destination'], + r['gateway'], r['genmask'], + r['iface'], r['flags']]) + route_s = tbl_v4.get_string() + max_len = len(max(route_s.splitlines(), key=len)) + header = util.center("Route IPv4 info", "+", max_len) + lines.extend([header, route_s]) + if routes.get('ipv6'): + fields_v6 = ['Route', 'Proto', 'Recv-Q', 'Send-Q', + 'Local Address', 'Foreign Address', 'State'] tbl_v6 = PrettyTable(fields_v6) for (n, r) in enumerate(routes.get('ipv6')): route_id = str(n) tbl_v6.add_row([route_id, r['proto'], - r['recv-q'], r['send-q'], - r['local address'], r['foreign address'], - r['state']]) - route_s = route_s + tbl_v6.get_string() - - max_len = len(max(route_s.splitlines(), key=len)) - header = util.center("Route info", "+", max_len) - lines.extend([header, route_s]) + r['recv-q'], r['send-q'], + r['local address'], r['foreign address'], + r['state']]) + header = util.center("Route IPv6 info", "+", max_len) + route_s = tbl_v6.get_string() + lines.extend([header, route_s]) return "\n".join(lines) -- cgit v1.2.3