def map_config_to_obj(module): config = get_config(module, flags=['| section interface']) configobj = NetworkConfig(indent=1, contents=config) match = re.findall(r'^interface (\S+)', config, re.M) if not match: return list() instances = list() for item in set(match): ipv4 = parse_config_argument(configobj, item, 'ip address') if ipv4: # eg. 192.168.2.10 255.255.255.0 -> 192.168.2.10/24 address = ipv4.strip().split(' ') if len(address) == 2 and is_netmask(address[1]): ipv4 = '{0}/{1}'.format(address[0], to_text(to_masklen(address[1]))) obj = { 'name': item, 'ipv4': ipv4, 'ipv6': parse_config_argument(configobj, item, 'ipv6 address'), 'state': 'present' } instances.append(obj) return instances
def map_config_to_obj(module): compare = module.params['check_running_config'] config = get_config(module, flags=['| begin interface'], compare=compare) configobj = NetworkConfig(indent=1, contents=config) match = re.findall(r'^interface (\S+ \S+)', config, re.M) if not match: return list() instances = list() for item in set(match): ipv4 = parse_config_argument(configobj, item, 'ip address') if ipv4: address = ipv4.strip().split(' ') if len(address) == 2 and is_netmask(address[1]): ipv4 = '{0}/{1}'.format(address[0], to_text(to_masklen(address[1]))) obj = { 'name': item, 'ipv4': ipv4, 'ipv6': parse_config_argument(configobj, item, 'ipv6 address'), 'state': 'present' } instances.append(obj) return instances
def map_config_to_obj(module): config = get_config(module) configobj = NetworkConfig(indent=1, contents=config) match = re.findall(r"^interface (\S+)", config, re.M) if not match: return list() instances = list() for item in set(match): ipv4 = parse_config_argument(configobj, item, "ip address") if ipv4: # eg. 192.168.2.10 255.255.255.0 -> 192.168.2.10/24 address = ipv4.strip().split(" ") if len(address) == 2 and is_netmask(address[1]): ipv4 = "{0}/{1}".format( address[0], to_text(to_masklen(address[1])) ) obj = { "name": item, "ipv4": ipv4, "ipv6": parse_config_argument(configobj, item, "ipv6 address"), "state": "present", } instances.append(obj) return instances
def map_config_to_obj(self, config): results = [] match = re.findall(r'^interface\s+(\S+)', config, re.M) if not match: return results configobj = NetworkConfig(indent=1, contents=config) for intf_name in set(match): obj = {'state': 'present', 'name': intf_name} # ip addressで始まっている設定コマンドをリスト化する # これにはsecondaryも含まれる # ip address 3.3.3.3 255.255.255.0 # ip address 33.33.33.33 255.255.255.0 secondary cmds = self.parse_config_argument(configobj, intf_name, 'ip address') ipv4 = None secondary_list = [] for cmd in cmds: tokens = cmd.strip().split(' ') if len(tokens) >= 2 and is_netmask(tokens[1]): prefix = '{0}/{1}'.format(tokens[0], to_text(to_masklen(tokens[1]))) is_secondary = bool( len(tokens) == 3 and tokens[2] == 'secondary') if is_secondary: secondary_list.append(prefix) else: ipv4 = prefix obj['ipv4'] = ipv4 obj['ipv4_secondary'] = secondary_list ipv6_list = self.parse_config_argument(configobj, intf_name, 'ipv6 address') obj['ipv6'] = ipv6_list results.append(obj) return results
def test_is_netmask(): assert is_netmask('255.255.255.255') assert not is_netmask(24) assert not is_netmask('foo')