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
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
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({})
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