summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Harlow <harlowja@yahoo-inc.com>2014-12-01 12:32:46 -0800
committerJoshua Harlow <harlowja@yahoo-inc.com>2014-12-01 12:32:46 -0800
commit9c2933d9cad323b786adc8338f045cb71cd258da (patch)
tree59e3284b31e92435edabc0251bf5db485413c60b
parent26af82a55325c460fdeb7eb6dceef7d433671e47 (diff)
parent07c2684be477cdc6341646469d4ae365b52a0c1e (diff)
downloadvyos-cloud-init-9c2933d9cad323b786adc8338f045cb71cd258da.tar.gz
vyos-cloud-init-9c2933d9cad323b786adc8338f045cb71cd258da.zip
Cleanups for netinfo.py
- Handle ipv6 route information not existing gracefully (for systems that don't have it) - Fix the getgateway function (broken due to ipv4/ipv6 keys now existing in route info) - Separate the centering of the route info ipv4 information from the centering of the ipv6 information so that this looks prettier... - Use try: except: else instead of settings value to None and then later checking for None (more pythonic this way)
-rw-r--r--cloudinit/netinfo.py110
1 files changed, 54 insertions, 56 deletions
diff --git a/cloudinit/netinfo.py b/cloudinit/netinfo.py
index d891315b..fb40cc0d 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'] = []
@@ -108,7 +107,6 @@ def route_info():
if not line:
continue
toks = line.split()
-
# FreeBSD shows 6 items in the routing table:
# Destination Gateway Flags Refs Use Netif Expire
# default 10.65.0.1 UGS 0 34920 vtnet0
@@ -120,13 +118,11 @@ def route_info():
toks[0] == "Destination" or toks[0] == "Internet" or
toks[0] == "Internet6" or toks[0] == "Routing"):
continue
-
if len(toks) < 8:
toks.append("-")
toks.append("-")
toks[7] = toks[5]
toks[5] = "-"
-
entry = {
'destination': toks[0],
'gateway': toks[1],
@@ -137,39 +133,42 @@ def route_info():
'use': toks[6],
'iface': toks[7],
}
-
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
def getgateway():
- routes = []
try:
routes = route_info()
except:
pass
- for r in routes:
- if r['flags'].find("G") >= 0:
- return "%s[%s]" % (r['gateway'], r['iface'])
+ else:
+ for r in routes.get('ipv4', []):
+ if r['flags'].find("G") >= 0:
+ return "%s[%s]" % (r['gateway'], r['iface'])
return None
@@ -179,14 +178,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 +200,34 @@ 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']])
+ route_s = tbl_v6.get_string()
+ max_len = len(max(route_s.splitlines(), key=len))
+ header = util.center("Route IPv6 info", "+", max_len)
+ lines.extend([header, route_s])
return "\n".join(lines)