Exemplo n.º 1
0
    def get_expected_generate_directives(self, network):
        ip_parts = network.network.format().split(".")
        ip_parts[-1] = "$"
        expected_hostname = "%s" % "-".join(ip_parts)
        expected_address = ".".join(ip_parts)

        first_address = IPAddress(network.first).format()
        first_address_parts = first_address.split(".")
        last_address = IPAddress(network.last).format()
        last_address_parts = last_address.split(".")

        if network.size < 256:
            iterator_low = int(first_address_parts[-1])
            iterator_high = int(last_address_parts[-1])
        else:
            iterator_low = 0
            iterator_high = 255

        expected_iterator_values = "%s-%s" % (iterator_low, iterator_high)

        directives_needed = network.size // 256
        if directives_needed == 0:
            directives_needed = 1
        expected_directives = []
        for num in range(directives_needed):
            ip_parts[-2] = str(num + int(ip_parts[-2]))
            expected_address = ".".join(ip_parts)
            expected_hostname = "%s" % "-".join(ip_parts)
            expected_directives.append((expected_iterator_values,
                                        expected_hostname, expected_address))
        return expected_directives
Exemplo n.º 2
0
 def short_name(ip, network):
     long_name = IPAddress(ip).reverse_dns
     if network.version == 4:
         short_name = ".".join(
             long_name.split(".")[:(31 - network.prefixlen) // 8 + 1])
     else:
         short_name = ".".join(
             long_name.split(".")[:(127 - network.prefixlen) // 4 + 1])
     return short_name
Exemplo n.º 3
0
def create_endpoint():
    data = request.get_json(force=True)
    app.logger.debug('CreateEndpoint JSON=%s', data)

    endpoint_id = data['EndpointID']
    network_id = data['NetworkID']
    interface = data['Interface']

    app.logger.info('Creating endpoint %s', endpoint_id)

    # docker sent me 172.19.0.3/16 ...
    address_ip4 = interface.get('Address', None)
    if address_ip4 and '/' in address_ip4:
        address_ip4 = IPAddress(address_ip4.split('/', 1)[0])

    network = Network.get(network_id)

    if not network:
        error_message = "CreateEndpoint called but network doesn\'t exist" \
                        " Endpoint ID: %s Network ID: %s" % \
                        (endpoint_id, network_id)
        app.logger.error(error_message)
        raise Exception(error_message)

    network.acquire_ip(endpoint_id, hostname, ip=address_ip4)
    app.logger.debug('CreateEndpoint response JSON=%s', {})
    return jsonify({})
Exemplo n.º 4
0
    def get_expected_generate_directives(self, network, domain):
        ip_parts = network.network.format().split(".")
        relevant_ip_parts = ip_parts[:-2]

        first_address = IPAddress(network.first).format()
        first_address_parts = first_address.split(".")

        if network.size < 256:
            last_address = IPAddress(network.last).format()
            iterator_low = int(first_address_parts[-1])
            iterator_high = last_address.split(".")[-1]
        else:
            iterator_low = 0
            iterator_high = 255

        second_octet_offset = int(first_address_parts[-2])
        expected_generate_directives = []
        directives_needed = network.size // 256

        if directives_needed == 0:
            directives_needed = 1
        for num in range(directives_needed):
            expected_address_base = "%s-%s" % tuple(relevant_ip_parts)
            expected_address = "%s-%s-$" % (
                expected_address_base,
                num + second_octet_offset,
            )
            relevant_ip_parts.reverse()
            expected_rdns_base = "%s.%s.in-addr.arpa." % tuple(
                relevant_ip_parts
            )
            if network.size >= 256:
                expected_rdns_template = "$.%s.%s" % (
                    num + second_octet_offset,
                    expected_rdns_base,
                )
            else:
                expected_rdns_template = "$"
            expected_generate_directives.append(
                (
                    "%s-%s" % (iterator_low, iterator_high),
                    expected_rdns_template,
                    "%s.%s." % (expected_address, domain),
                )
            )
            relevant_ip_parts.reverse()
        return expected_generate_directives