Last active
August 29, 2015 14:03
-
-
Save kylestev/735e0633b5ab729979fe to your computer and use it in GitHub Desktop.
cloudinit is, on average, twice as complex as ironic or the ironic-python-agent projects. Example of complex method included.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
➜ work radon cc -a ironic/ironic | tail -2 | |
2845 blocks (classes, functions, methods) analyzed. | |
Average complexity: A (1.96379613357) | |
➜ work radon cc -a cloud-init/cloudinit | tail -2 | |
960 blocks (classes, functions, methods) analyzed. | |
Average complexity: A (3.91145833333) | |
➜ work radon cc -a ironic-python-agent/ironic_python_agent | tail -2 | |
494 blocks (classes, functions, methods) analyzed. | |
Average complexity: A (2.10526315789) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def translate_network(settings): | |
# Get the standard cmd, args from the ubuntu format | |
entries = [] | |
for line in settings.splitlines(): | |
line = line.strip() | |
if not line or line.startswith("#"): | |
continue | |
split_up = line.split(None, 1) | |
if len(split_up) <= 1: | |
continue | |
entries.append(split_up) | |
# Figure out where each iface section is | |
ifaces = [] | |
consume = {} | |
for (cmd, args) in entries: | |
if cmd == 'iface': | |
if consume: | |
ifaces.append(consume) | |
consume = {} | |
consume[cmd] = args | |
else: | |
consume[cmd] = args | |
# Check if anything left over to consume | |
absorb = False | |
for (cmd, args) in consume.iteritems(): | |
if cmd == 'iface': | |
absorb = True | |
if absorb: | |
ifaces.append(consume) | |
# Now translate | |
real_ifaces = {} | |
for info in ifaces: | |
if 'iface' not in info: | |
continue | |
iface_details = info['iface'].split(None) | |
dev_name = None | |
if len(iface_details) >= 1: | |
dev = iface_details[0].strip().lower() | |
if dev: | |
dev_name = dev | |
if not dev_name: | |
continue | |
iface_info = {} | |
if len(iface_details) >= 3: | |
proto_type = iface_details[2].strip().lower() | |
# Seems like this can be 'loopback' which we don't | |
# really care about | |
if proto_type in ['dhcp', 'static']: | |
iface_info['bootproto'] = proto_type | |
# These can just be copied over | |
for k in ['netmask', 'address', 'gateway', 'broadcast']: | |
if k in info: | |
val = info[k].strip().lower() | |
if val: | |
iface_info[k] = val | |
# Name server info provided?? | |
if 'dns-nameservers' in info: | |
iface_info['dns-nameservers'] = info['dns-nameservers'].split() | |
# Name server search info provided?? | |
if 'dns-search' in info: | |
iface_info['dns-search'] = info['dns-search'].split() | |
# Is any mac address spoofing going on?? | |
if 'hwaddress' in info: | |
hw_info = info['hwaddress'].lower().strip() | |
hw_split = hw_info.split(None, 1) | |
if len(hw_split) == 2 and hw_split[0].startswith('ether'): | |
hw_addr = hw_split[1] | |
if hw_addr: | |
iface_info['hwaddress'] = hw_addr | |
real_ifaces[dev_name] = iface_info | |
# Check for those that should be started on boot via 'auto' | |
for (cmd, args) in entries: | |
if cmd == 'auto': | |
# Seems like auto can be like 'auto eth0 eth0:1' so just get the | |
# first part out as the device name | |
args = args.split(None) | |
if not args: | |
continue | |
dev_name = args[0].strip().lower() | |
if dev_name in real_ifaces: | |
real_ifaces[dev_name]['auto'] = True | |
return real_ifaces |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment