コード例 #1
0
ファイル: views.py プロジェクト: d9pouces/Penates-Server
def set_dhcp(request, mac_address):
    try:
        hostname = hostname_from_principal(request.user.username)
    except ValueError:
        return HttpResponse(status=401, content='Unable to register IP and MAC addresses: invalid username')

    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')
    Host.register_mac_address(hostname, remote_addr, mac_address, admin_ip_address, admin_mac_address)
    return HttpResponse(status=201)
コード例 #2
0
ファイル: host.py プロジェクト: pombredanne/Penates-Server
 def handle(self, *args, **options):
     fqdn = options['fqdn']
     keys = {'owner', 'main_ip_address', 'main_mac_address', 'admin_ip_address', 'admin_mac_address', 'serial',
             'model_name', 'location', 'os_name', 'bootp_filename', 'proc_model', 'proc_count', 'core_count',
             'memory_size', 'disk_size', }
     values = {key: options[key] for key in keys if options[key]}
     if Host.objects.filter(fqdn=fqdn).update(**values) == 0:
         host = Host(fqdn=fqdn, **values)
         host.save()
         self.stdout.write(self.style.WARNING('Host %s created') % fqdn)
     else:
         self.stdout.write(self.style.WARNING('Host %s updated') % fqdn)
コード例 #3
0
ファイル: views.py プロジェクト: Python3pkg/Penates-Server
def set_dhcp(request, mac_address):
    try:
        hostname = hostname_from_principal(request.user.username)
    except ValueError:
        return HttpResponse(
            status=401,
            content='Unable to register IP and MAC addresses: invalid username'
        )

    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')
    Host.register_mac_address(hostname, remote_addr, mac_address,
                              admin_ip_address, admin_mac_address)
    return HttpResponse(status=201)
コード例 #4
0
ファイル: views.py プロジェクト: d9pouces/Penates-Server
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')
    hostname = hostname.lower()
    main_ip_address = request.META.get('HTTP_X_FORWARDED_FOR')
    short_hostname = hostname.partition('.')[0]
    fqdn = '%s.%s%s' % (short_hostname, settings.PDNS_INFRA_PREFIX, settings.PENATES_DOMAIN)
    # valid FQDN
    # create Kerberos principal
    principal = principal_from_hostname(fqdn, settings.PENATES_REALM)
    if principal_exists(principal):
        return HttpResponse('Hostname %s is already registered.' % hostname, status=403)

    principal = Host.register_host(short_hostname, main_ip_address, admin_ip_address)
    if settings.OFFER_HOST_KEYTABS:
        return KeytabResponse(principal)
    return HttpResponse('', content_type='text/plain', status=201)
コード例 #5
0
ファイル: host.py プロジェクト: Python3pkg/Penates-Server
 def handle(self, *args, **options):
     fqdn = options['fqdn']
     short_hostname = fqdn.partition('.')[0]
     fqdn = '%s.%s%s' % (short_hostname, settings.PDNS_INFRA_PREFIX,
                         settings.PENATES_DOMAIN)
     is_new_host = Host.objects.filter(fqdn=fqdn).count() == 0
     keys = {
         'owner',
         'main_ip_address',
         'main_mac_address',
         'admin_ip_address',
         'admin_mac_address',
         'serial',
         'model_name',
         'location',
         'os_name',
         'bootp_filename',
         'proc_model',
         'proc_count',
         'core_count',
         'memory_size',
         'disk_size',
     }
     values = {key: options[key] for key in keys if options[key]}
     Host.register_host(short_hostname,
                        main_ip_address=options['main_ip_address'],
                        admin_ip_address=options['admin_ip_address'])
     Host.register_mac_address(fqdn, options['main_ip_address'],
                               options['main_mac_address'],
                               options['admin_ip_address'],
                               options['admin_mac_address'])
     Host.objects.filter(fqdn=fqdn).update(**values) == 0
     if is_new_host:
         self.stdout.write(self.style.WARNING('Host %s created') % fqdn)
     else:
         self.stdout.write(self.style.WARNING('Host %s updated') % fqdn)
     host = Host.objects.get(fqdn=fqdn)
     keytab = options['keytab']
     if keytab:
         call_command('keytab', host.principal, keytab=keytab)
コード例 #6
0
ファイル: host.py プロジェクト: d9pouces/Penates-Server
 def handle(self, *args, **options):
     fqdn = options['fqdn']
     short_hostname = fqdn.partition('.')[0]
     fqdn = '%s.%s%s' % (short_hostname, settings.PDNS_INFRA_PREFIX, settings.PENATES_DOMAIN)
     is_new_host = Host.objects.filter(fqdn=fqdn).count() == 0
     keys = {'owner', 'main_ip_address', 'main_mac_address', 'admin_ip_address', 'admin_mac_address', 'serial',
             'model_name', 'location', 'os_name', 'bootp_filename', 'proc_model', 'proc_count', 'core_count',
             'memory_size', 'disk_size', }
     values = {key: options[key] for key in keys if options[key]}
     Host.register_host(short_hostname, main_ip_address=options['main_ip_address'],
                        admin_ip_address=options['admin_ip_address'])
     Host.register_mac_address(fqdn, options['main_ip_address'], options['main_mac_address'],
                               options['admin_ip_address'], options['admin_mac_address'])
     Host.objects.filter(fqdn=fqdn).update(**values) == 0
     if is_new_host:
         self.stdout.write(self.style.WARNING('Host %s created') % fqdn)
     else:
         self.stdout.write(self.style.WARNING('Host %s updated') % fqdn)
     host = Host.objects.get(fqdn=fqdn)
     keytab = options['keytab']
     if keytab:
         call_command('keytab', host.principal, keytab=keytab)
コード例 #7
0
ファイル: views.py プロジェクト: Python3pkg/Penates-Server
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')
    hostname = hostname.lower()
    main_ip_address = request.META.get('HTTP_X_FORWARDED_FOR')
    short_hostname = hostname.partition('.')[0]
    fqdn = '%s.%s%s' % (short_hostname, settings.PDNS_INFRA_PREFIX,
                        settings.PENATES_DOMAIN)
    # valid FQDN
    # create Kerberos principal
    principal = principal_from_hostname(fqdn, settings.PENATES_REALM)
    if principal_exists(principal):
        return HttpResponse('Hostname %s is already registered.' % hostname,
                            status=403)

    principal = Host.register_host(short_hostname, main_ip_address,
                                   admin_ip_address)
    if settings.OFFER_HOST_KEYTABS:
        return KeytabResponse(principal)
    return HttpResponse('', content_type='text/plain', status=201)