
When 'cloud-init start' (network) runs, it will print information about the systems network info to the console. This will help in debugging instances.
84 lines
2.5 KiB
Python
84 lines
2.5 KiB
Python
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()
|