summaryrefslogtreecommitdiff
path: root/cloudinit/netinfo.py
diff options
context:
space:
mode:
Diffstat (limited to 'cloudinit/netinfo.py')
-rw-r--r--cloudinit/netinfo.py83
1 files changed, 83 insertions, 0 deletions
diff --git a/cloudinit/netinfo.py b/cloudinit/netinfo.py
new file mode 100644
index 00000000..1b6af7e2
--- /dev/null
+++ b/cloudinit/netinfo.py
@@ -0,0 +1,83 @@
+import subprocess
+
+def netdev_info():
+ fields = ( "hwaddr", "addr", "bcast", "mask" )
+ ifcfg_out = subprocess.check_output(["ifconfig", "-a"])
+ devs = { }
+ for line in ifcfg_out.splitlines():
+ if len(line) == 0:
+ continue
+ if line[0] not in ("\t", " "):
+ curdev = line.split()[0]
+ devs[curdev] = { "up": False }
+ for field in fields:
+ devs[curdev][field] = ""
+ toks = line.lower().strip().split()
+ if toks[0] == "up":
+ devs[curdev]['up'] = True
+
+ fieldpost = ""
+ if toks[0] == "inet6":
+ fieldpost = "6"
+
+ for i in range(len(toks)):
+ if toks[i] == "hwaddr":
+ try:
+ devs[curdev]["hwaddr"] = toks[i+1]
+ except IndexError as e:
+ pass
+ for field in ("addr", "bcast", "mask"):
+ target = "%s%s" % (field, fieldpost)
+ if devs[curdev].get(target,""):
+ continue
+ if toks[i] == "%s:" % field:
+ try:
+ devs[curdev][target] = toks[i+1]
+ except IndexError as e:
+ pass
+ elif toks[i].startswith("%s:" % field):
+ devs[curdev][target] = toks[i][len(field)+1:]
+ return(devs)
+
+def route_info():
+ route_out = subprocess.check_output(["route", "-n"])
+ routes = [ ]
+ for line in route_out.splitlines()[1:]:
+ if not line:
+ continue
+ toks = line.split()
+ if toks[0] == "Kernel" or toks[0] == "Destination":
+ continue
+ routes.append(toks)
+ return(routes)
+
+def getgateway():
+ for r in route_info():
+ if r[3].find("G") >= 0:
+ return("%s[%s]" % (r[1],r[7]))
+ return(None)
+
+def debug_info(pre="ci-info: "):
+ lines = [ ]
+ try:
+ netdev = netdev_info()
+ except Exception as e:
+ lines.append("netdev_info failed!")
+ netdev = []
+ for (dev, d) in netdev.iteritems():
+ lines.append("%s%-6s: %i %-15s %-15s %s" %
+ (pre, dev, d["up"], d["addr"],d["mask"], d["hwaddr"]))
+ try:
+ routes = route_info()
+ except Exception as e:
+ lines.append("route_info failed")
+ routes = []
+ n = 0
+ for r in routes:
+ lines.append("%sroute-%d: %-15s %-15s %-15s %-6s %s" %
+ (pre, n, r[0], r[1], r[2], r[7], r[3]))
+ n = n+1
+ return('\n'.join(lines))
+
+if __name__ == '__main__':
+ print debug_info()