def register_mac_address(fqdn, main_ip_address, main_mac_address, admin_ip_address, admin_mac_address): main_mac_address = main_mac_address.replace('-', ':').upper() admin_mac_address = admin_mac_address.replace('-', ':').upper() if main_ip_address: Host.objects.filter(fqdn=fqdn).update(main_ip_address=main_ip_address, main_mac_address=main_mac_address) Record.objects.filter(name=fqdn).update(content=main_ip_address) if admin_ip_address and admin_mac_address: domain_name = '%s%s' % (settings.PDNS_ADMIN_PREFIX, settings.PENATES_DOMAIN) long_admin_hostname = '%s.%s' % (fqdn.partition('.')[0], domain_name) Host.objects.filter(fqdn=fqdn) \ .update(admin_ip_address=admin_ip_address, admin_mac_address=admin_mac_address) Domain.ensure_auto_record(admin_ip_address, long_admin_hostname, unique=True, override_reverse=False)
def get_host_keytab(request, hostname): """Register a computer: - create Kerberos principal - create private key - create public SSH key - create x509 certificate - create PTR DNS record - create A or AAAA DNS record - create SSHFP DNS record - return keytab :param request: :type request: :param hostname: :type hostname: :return: :rtype: """ admin_ip_address = request.GET.get('ip_address') ip_address = request.META.get('HTTP_X_FORWARDED_FOR') short_hostname = hostname.partition('.')[0] domain_name = settings.PENATES_DOMAIN fqdn = '%s.%s%s' % (short_hostname, settings.PDNS_INFRA_PREFIX, domain_name) # valid FQDN # create Kerberos principal principal = principal_from_hostname(fqdn, settings.PENATES_REALM) if principal_exists(principal): return HttpResponse('', status=403) else: add_principal(principal) Host.objects.get_or_create(fqdn=fqdn) # create private key, public key, public certificate, public SSH key entry = entry_from_hostname(fqdn) pki = PKI() pki.ensure_certificate(entry) # create DNS records if ip_address: Domain.ensure_auto_record(ip_address, fqdn, unique=True, override_reverse=True) Host.objects.filter(fqdn=fqdn).update(main_ip_address=ip_address) if admin_ip_address: admin_fqdn = '%s.%s%s' % (short_hostname, settings.PDNS_ADMIN_PREFIX, domain_name) Domain.ensure_auto_record(admin_ip_address, admin_fqdn, unique=True, override_reverse=False) Host.objects.filter(fqdn=fqdn).update(admin_ip_address=admin_ip_address) if settings.OFFER_HOST_KEYTABS: return KeytabResponse(principal) return HttpResponse('', content_type='text/plain', status=201)
def set_dhcp(request, mac_address): hostname = hostname_from_principal(request.user.username) mac_address = mac_address.replace('-', ':').upper() remote_addr = request.META.get('HTTP_X_FORWARDED_FOR', '') admin_mac_address = request.GET.get('mac_address') admin_ip_address = request.GET.get('ip_address') admin_mac_address = admin_mac_address.replace('-', ':').upper() if remote_addr: Host.objects.filter(fqdn=hostname).update(main_ip_address=remote_addr, main_mac_address=mac_address) Record.objects.filter(name=hostname).update(content=remote_addr) if admin_ip_address and admin_mac_address: domain_name = '%s%s' % (settings.PDNS_ADMIN_PREFIX, settings.PENATES_DOMAIN) long_admin_hostname = '%s.%s' % (hostname.partition('.')[0], domain_name) Host.objects.filter(fqdn=hostname)\ .update(admin_ip_address=admin_ip_address, admin_mac_address=admin_mac_address) Domain.ensure_auto_record(admin_ip_address, long_admin_hostname, unique=True, override_reverse=False) return HttpResponse(status=201)
def register_host(short_hostname, main_ip_address=None, admin_ip_address=None): fqdn = '%s.%s%s' % (short_hostname, settings.PDNS_INFRA_PREFIX, settings.PENATES_DOMAIN) principal = principal_from_hostname(fqdn, settings.PENATES_REALM) add_principal(principal) Host.objects.get_or_create(fqdn=fqdn) # create private key, public key, public certificate, public SSH key entry = entry_from_hostname(fqdn) pki = PKI() pki.ensure_certificate(entry) # create DNS records if main_ip_address: Domain.ensure_auto_record(main_ip_address, fqdn, unique=True, override_reverse=True) Host.objects.filter(fqdn=fqdn).update(main_ip_address=main_ip_address) if admin_ip_address: admin_fqdn = '%s.%s%s' % (short_hostname, settings.PDNS_ADMIN_PREFIX, settings.PENATES_DOMAIN) Domain.ensure_auto_record(admin_ip_address, admin_fqdn, unique=True, override_reverse=False) Host.objects.filter(fqdn=fqdn).update(admin_ip_address=admin_ip_address) return principal