def get_dhcpd_conf(request): # noinspection PyUnusedLocal request = request try: fqdn = hostname_from_principal(request.user.username) except ValueError: return HttpResponse(status=401, content='Unable to get configuration: invalid username') if Service.objects.filter(fqdn=fqdn, scheme='dchp')[0:1].count() == 0: hosts = [] else: hosts = Host.objects.all() def get_ip_or_none(scheme): values = list(Service.objects.filter(scheme=scheme)[0:1]) if not values: return None return Record.local_resolve(values[0].fqdn) or values[0].hostname def get_ip_list(scheme, protocol='udp'): values = list(Service.objects.filter(scheme=scheme, protocol=protocol)) return [Record.local_resolve(x.fqdn) or x.hostname for x in values] template_values = { 'penates_subnets': get_subnets(), 'penates_domain': settings.PENATES_DOMAIN, 'admin_prefix': settings.PDNS_ADMIN_PREFIX, 'infra_prefix': settings.PDNS_INFRA_PREFIX, 'hosts': hosts, 'tftp': get_ip_or_none('tftp'), 'dns_list': get_ip_list('dns'), 'ntp': get_ip_or_none('ntp'), } return render_to_response('dhcpd/dhcpd.conf', template_values, status=200, content_type='text/plain')
def ensure_record(self, source, target, unique=False, override_reverse=True): """ :param override_reverse: :param source: orignal name (fqdn of the machine, or IP address) :param target: DNS alias to create :param unique: if True, remove any previous :rtype: :class:`penatesserver.powerdns.models.Domain` """ record_name, sep, domain_name = target.partition('.') if sep != '.' or domain_name != self.name: return False if source == target: return True try: add = netaddr.IPAddress(source) record_type = 'A' if add.version == 4 else 'AAAA' except netaddr.core.AddrFormatError: record_type = 'CNAME' add = None if not unique and Record.objects.filter(domain=self, name=target, type=record_type, content=source).count() > 0: return True if record_type == 'A' or record_type == 'AAAA': for subnet_obj in get_subnets(): if add.version != subnet_obj.network.version or add not in subnet_obj.network: continue reverse_record_name, sep, reverse_domain_name = add.reverse_dns.partition('.') reverse_domain_name = reverse_domain_name[:-1] reverse_target = add.reverse_dns[:-1] reverse_domain = self.ensure_subdomain(reverse_domain_name) query = Record.objects.filter(domain=reverse_domain, name=reverse_target, type='PTR') if (override_reverse and query.update(content=target) == 0) or \ (not override_reverse and query.count() == 0): Record(domain=reverse_domain, name=reverse_target, type='PTR', content=target, ttl=3600).save() assert isinstance(reverse_domain, Domain) reverse_domain.update_soa() if Record.objects.filter(domain=self, name=target, type__in=['A', 'AAAA', 'CNAME'])\ .update(type=record_type, content=source, ttl=3600) == 0: Record(domain=self, name=target, type=record_type, content=source, ttl=3600).save() return True
def get_dhcpd_conf(request): def get_ip_or_none(scheme): values = list(Service.objects.filter(scheme=scheme)[0:1]) if not values: return None return Record.local_resolve(values[0].fqdn) or values[0].hostname def get_ip_list(scheme): values = list(Service.objects.filter(scheme=scheme)) return [Record.local_resolve(x.fqdn) or x.hostname for x in values] template_values = { 'penates_subnets': get_subnets(), 'penates_domain': settings.PENATES_DOMAIN, 'admin_prefix': settings.PDNS_ADMIN_PREFIX, 'infra_prefix': settings.PDNS_INFRA_PREFIX, 'hosts': Host.objects.all(), 'tftp': get_ip_or_none('tftp'), 'dns_list': get_ip_list('dns'), 'ntp': get_ip_or_none('ntp'), } return render_to_response('dhcpd/dhcpd.conf', template_values, status=200, content_type='text/plain')
def get_dhcpd_conf(request): # noinspection PyUnusedLocal request = request try: fqdn = hostname_from_principal(request.user.username) except ValueError: return HttpResponse( status=401, content='Unable to get configuration: invalid username') if Service.objects.filter(fqdn=fqdn, scheme='dchp')[0:1].count() == 0: hosts = [] else: hosts = Host.objects.all() def get_ip_or_none(scheme): values = list(Service.objects.filter(scheme=scheme)[0:1]) if not values: return None return Record.local_resolve(values[0].fqdn) or values[0].hostname def get_ip_list(scheme, protocol='udp'): values = list(Service.objects.filter(scheme=scheme, protocol=protocol)) return [Record.local_resolve(x.fqdn) or x.hostname for x in values] template_values = { 'penates_subnets': get_subnets(), 'penates_domain': settings.PENATES_DOMAIN, 'admin_prefix': settings.PDNS_ADMIN_PREFIX, 'infra_prefix': settings.PDNS_INFRA_PREFIX, 'hosts': hosts, 'tftp': get_ip_or_none('tftp'), 'dns_list': get_ip_list('dns'), 'ntp': get_ip_or_none('ntp'), } return render_to_response('dhcpd/dhcpd.conf', template_values, status=200, content_type='text/plain')