EVOLUTION-MANAGER
Edit File: utils.py
import socket from ansible.module_utils.six import iteritems def search_obj_in_list(name, lst, identifier): for o in lst: if o[identifier] == name: return o return None def flatten_dict(x): result = {} if not isinstance(x, dict): return result for key, value in iteritems(x): if isinstance(value, dict): result.update(flatten_dict(value)) else: result[key] = value return result def validate_ipv4_addr(address): address = address.split('/')[0] try: socket.inet_aton(address) except socket.error: return False return address.count('.') == 3 def validate_ipv6_addr(address): address = address.split('/')[0] try: socket.inet_pton(socket.AF_INET6, address) except socket.error: return False return True def normalize_interface(name): """Return the normalized interface name """ if not name: return def _get_number(name): digits = '' for char in name: if char.isdigit() or char in '/.': digits += char return digits if name.lower().startswith('et'): if_type = 'Ethernet' elif name.lower().startswith('vl'): if_type = 'Vlan' elif name.lower().startswith('lo'): if_type = 'loopback' elif name.lower().startswith('po'): if_type = 'port-channel' elif name.lower().startswith('nv'): if_type = 'nve' else: if_type = None number_list = name.split(' ') if len(number_list) == 2: number = number_list[-1].strip() else: number = _get_number(name) if if_type: proper_interface = if_type + number else: proper_interface = name return proper_interface def get_interface_type(interface): """Gets the type of interface """ if interface.upper().startswith('ET'): return 'ethernet' elif interface.upper().startswith('VL'): return 'svi' elif interface.upper().startswith('LO'): return 'loopback' elif interface.upper().startswith('MG'): return 'management' elif interface.upper().startswith('MA'): return 'management' elif interface.upper().startswith('PO'): return 'portchannel' elif interface.upper().startswith('NV'): return 'nve' else: return 'unknown' def remove_rsvd_interfaces(interfaces): """Exclude reserved interfaces from user management """ return [i for i in interfaces if get_interface_type(i['name']) != 'management'] def vlan_range_to_list(vlans): result = [] if vlans: for part in vlans.split(','): if part == 'none': break if '-' in part: a, b = part.split('-') a, b = int(a), int(b) result.extend(range(a, b + 1)) else: a = int(part) result.append(a) return numerical_sort(result) return result def numerical_sort(string_int_list): """Sorts list of integers that are digits in numerical order. """ as_int_list = [] for vlan in string_int_list: as_int_list.append(int(vlan)) as_int_list.sort() return as_int_list