=== modified file 'cloudinit/CloudConfig/cc_disable_ec2_metadata.py' --- cloudinit/CloudConfig/cc_disable_ec2_metadata.py 2012-01-18 14:07:33 +0000 +++ cloudinit/CloudConfig/cc_disable_ec2_metadata.py 2012-02-01 21:10:00 +0000 @@ -26,5 +26,5 @@ def handle(_name, cfg, _cloud, _log, _args): if util.get_cfg_option_bool(cfg, "disable_ec2_metadata", False): - fwall = "route add -host 169.254.169.254 reject" + fwall = "ip route add unreachable 169.254.169.254 scope host" subprocess.call(fwall.split(' ')) === modified file 'cloudinit/netinfo.py' --- cloudinit/netinfo.py 2012-01-30 14:24:30 +0000 +++ cloudinit/netinfo.py 2012-02-01 22:09:42 +0000 @@ -22,70 +22,37 @@ import subprocess -def netdev_info(empty=""): - fields = ("hwaddr", "addr", "bcast", "mask") - ifcfg_out = str(subprocess.check_output(["ifconfig", "-a"])) +def netdev_info(empty=None): + fields = ("inet", "inet6", "link/ether") + ifcfg_out = str(subprocess.check_output(["ip", "-o", "addr"])) 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} + toks = line.split() + if len(toks) > 1 and toks[1].endswith(":"): + # toks[1] is an interface name + curdev = toks[1][:-1] + # toks[2] are flags + devs[curdev] = {"up": "UP" in toks[2]} 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: - 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: - pass - elif toks[i].startswith("%s:" % field): - devs[curdev][target] = toks[i][len(field) + 1:] - - if empty != "": - for (_devname, dev) in devs.iteritems(): - for field in dev: - if dev[field] == "": - dev[field] = empty - + devs[curdev][field] = [] + for index, token in enumerate(toks): + if token in fields: + devs[curdev][token].append(toks[index + 1]) + for devinfo in devs.itervalues(): + for field in fields: + if len(devinfo[field]) == 0 and empty: + devinfo[field] = [empty] return(devs) def route_info(): - route_out = str(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) - + return subprocess.check_output(["ip", "-o", "route"]).splitlines() def getgateway(): for r in route_info(): - if r[3].find("G") >= 0: - return("%s[%s]" % (r[1], r[7])) + r = r.split() + if len(r) > 0 and r[0] == "default": + return "%s[%s]" % (r[2], r[4]) return(None) @@ -98,17 +65,16 @@ 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"])) + (pre, dev, d["up"], ", ".join(map(str, d["inet"])), + ", ".join(map(str, d["inet6"])), + ", ".join(map(str, d["link/ether"])))) try: routes = route_info() except Exception: 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 + for (index, route) in enumerate(routes): + lines.append("%sroute-%d: %s" % (pre, index, route)) return('\n'.join(lines))