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.")
Exemplo n.º 3
0
 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."
     )
Exemplo n.º 5
0
 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
Exemplo n.º 6
0
 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
Exemplo n.º 7
0
    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))