def dst_subnet(self): dst_subnet = self._values['destination'].get('subnet', None) if dst_subnet is None: return None if is_valid_ip_network(dst_subnet): return dst_subnet raise F5ModuleError("Specified 'subnet' is not a valid subnet.")
def src_subnet(self): src_subnet = self._values['source'].get('subnet', None) if src_subnet is None: return None if is_valid_ip_network(src_subnet): return src_subnet raise F5ModuleError("Specified 'subnet' is not a valid subnet.")
def encode_address_from_dict(self, record): if is_valid_ip_network(record['key']): key = ip_network(u"{0}".format(str(record['key']))) elif is_valid_ip(record['key']): key = ip_address(u"{0}".format(str(record['key']))) elif is_valid_ip_interface(record['key']): key = ip_interface(u"{0}".format(str(record['key']))) else: raise F5ModuleError( "When specifying an 'address' type, the value to the left of the separator must be an IP." ) if key and 'value' in record: try: # Only ip_address's have max_prefixlen if key.max_prefixlen in [32, 128]: return self.encode_host(str(key), record['value']) except ValueError: return self.encode_network(str(key.network_address), key.prefixlen, record['value']) elif key: try: # Only ip_address's have max_prefixlen if key.max_prefixlen in [32, 128]: return self.encode_host(str(key), str(key)) except ValueError: return self.encode_network(str(key.network_address), key.prefixlen, str(key.network_address))
def _test_subnet(self, item): if item is None: return None if is_valid_ip_network(item): return item raise F5ModuleError( "Specified 'subnet' is not a valid subnet." )
def addresses(self): if self._values['addresses'] is None: return None for x in self._values['addresses']: if is_valid_ip(x) or is_valid_ip_network( x) or is_valid_ip_interface(x): continue else: raise F5ModuleError( "Address {0} must be either an IPv4 or IPv6 address or network." .format(x)) result = [str(x) for x in self._values['addresses']] result = sorted(result) return result
def _convert_address(self, item, mask=None): if item == 'any': return '0.0.0.0/0' if not is_valid_ip(item): raise F5ModuleError('The provided IP address is not a valid IP address.') if mask: msk = self._convert_netmask(mask) network = '{0}/{1}'.format(item, msk) if is_valid_ip_network(u'{0}'.format(network)): return network else: raise F5ModuleError( 'The provided IP and Mask are not a valid IP network.' ) host = ip_interface(u'{0}'.format(item)) return host.with_prefixlen
def encode_address_from_string(self, record): if self._network_pattern.match(record): # network 192.168.0.0 prefixlen 16 := "Network3", # network 2402:9400:1000:0:: prefixlen 64 := "Network4", return record elif self._host_pattern.match(record): # host 172.16.1.1/32 := "Host3" # host 2001:0db8:85a3:0000:0000:8a2e:0370:7334 := "Host4" return record else: # 192.168.0.0/16 := "Network3", # 2402:9400:1000:0::/64 := "Network4", parts = record.split(self._separator) if is_valid_ip_network(parts[0]): key = ip_network(u"{0}".format(str(parts[0]))) elif is_valid_ip(parts[0]): key = ip_address(u"{0}".format(str(parts[0]))) elif is_valid_ip_interface(parts[0]): key = ip_interface(u"{0}".format(str(parts[0]))) elif parts[0] == '': pass else: raise F5ModuleError( "When specifying an 'address' type, the value to the left of the separator must be an IP." ) if len(parts) == 2: try: # Only ip_address's have max_prefixlen if key.max_prefixlen in [32, 128]: return self.encode_host(str(key), parts[1]) except ValueError: return self.encode_network(str(key.network_address), key.prefixlen, parts[1]) elif len(parts) == 1 and parts[0] != '': try: # Only ip_address's have max_prefixlen if key.max_prefixlen in [32, 128]: return self.encode_host(str(key), str(key)) except ValueError: return self.encode_network(str(key.network_address), key.prefixlen, str(key.network_address))