Ejemplo n.º 1
0
 def inner_decorator(self, *args, **kwargs):
     from ralph.account.views import HTTP403
     from ralph.util import api
     # class-based views
     if args and isinstance(args[0], WSGIRequest):
         request = args[0]
     # function-based views
     elif self and isinstance(self, WSGIRequest):
         request = self
     # check for request in kwargs as well, just in case
     elif 'request' in kwargs:
         request = kwargs['request']
     else:
         return HttpResponseBadRequest()
     user = request.user
     # for API views not handled by Tastypie (e.g. puppet_classifier)
     if user.is_anonymous():
         user = api.get_user(request)
         if not api.is_authenticated(user, request):
             return HTTP403(request)
     profile = user.get_profile()
     has_perm = profile.has_perm
     for perm in perms:
         if not has_perm(perm['perm']):
             return HTTP403(request, perm['msg'])
     return func(self, *args, **kwargs)
Ejemplo n.º 2
0
def dhcp_config_entries(request):
    if not api.is_authenticated(request):
        return HttpResponseForbidden('API key required.')
    dc_names, env_names = _get_params(request)
    if dc_names and env_names:
        return HttpResponseForbidden('Only DC or ENV mode available.')
    data_centers = []
    for dc_name in dc_names:
        try:
            dc = DataCenter.objects.get(name__iexact=dc_name)
        except DataCenter.DoesNotExist:
            return HttpResponseNotFound("Data Center `%s` does not exist." %
                                        dc_name)
        else:
            data_centers.append(dc)
    environments = []
    for env_name in env_names:
        try:
            env = Environment.objects.get(name__iexact=env_name)
        except Environment.DoesNotExist:
            return HttpResponseNotFound("Environment `%s` does not exist." %
                                        env_name)
        else:
            environments.append(env)
    return HttpResponse(
        generate_dhcp_config_entries(
            data_centers=data_centers,
            environments=environments,
            disable_networks_validation=DHCP_DISABLE_NETWORKS_VALIDATION,
        ),
        content_type="text/plain",
    )
Ejemplo n.º 3
0
 def inner_decorator(self, *args, **kwargs):
     from ralph.account.views import HTTP403
     from ralph.util import api
     # class-based views
     if args and isinstance(args[0], WSGIRequest):
         request = args[0]
     # function-based views
     elif self and isinstance(self, WSGIRequest):
         request = self
     # check for request in kwargs as well, just in case
     elif 'request' in kwargs:
         request = kwargs['request']
     else:
         return HttpResponseBadRequest()
     user = request.user
     # for API views not handled by Tastypie (e.g. puppet_classifier)
     if user.is_anonymous():
         user = api.get_user(request)
         if not api.is_authenticated(user, request):
             return HTTP403(request)
     profile = user.get_profile()
     has_perm = profile.has_perm
     for perm in perms:
         if not has_perm(perm['perm']):
             return HTTP403(request, perm['msg'])
     return func(self, *args, **kwargs)
Ejemplo n.º 4
0
def dhcp_config_entries(request):
    if not api.is_authenticated(request):
        return HttpResponseForbidden('API key required.')
    dc_names, env_names = _get_params(request)
    if dc_names and env_names:
        return HttpResponseForbidden('Only DC or ENV mode available.')
    data_centers = []
    for dc_name in dc_names:
        try:
            dc = DataCenter.objects.get(name__iexact=dc_name)
        except DataCenter.DoesNotExist:
            return HttpResponseNotFound(
                "Data Center `%s` does not exist." % dc_name
            )
        else:
            data_centers.append(dc)
    environments = []
    for env_name in env_names:
        try:
            env = Environment.objects.get(name__iexact=env_name)
        except Environment.DoesNotExist:
            return HttpResponseNotFound(
                "Environment `%s` does not exist." % env_name
            )
        else:
            environments.append(env)
    return HttpResponse(
        generate_dhcp_config_entries(
            data_centers=data_centers,
            environments=environments,
            disable_networks_validation=DHCP_DISABLE_NETWORKS_VALIDATION,
        ),
        content_type="text/plain",
    )
Ejemplo n.º 5
0
def dhcp_synch(request):
    if not api.is_authenticated(request):
        return HttpResponseForbidden('API key required.')
    address = request.META['REMOTE_ADDR']
    server, created = DHCPServer.objects.get_or_create(ip=address)
    server.last_synchronized = datetime.datetime.now()
    server.save()
    return HttpResponse('OK', content_type='text/plain')
Ejemplo n.º 6
0
def dhcp_synch(request):
    if not api.is_authenticated(request):
        return HttpResponseForbidden('API key required.')
    address = request.META['REMOTE_ADDR']
    server, created = DHCPServer.objects.get_or_create(ip=address)
    server.last_synchronized = datetime.datetime.now()
    server.save()
    return HttpResponse('OK', content_type='text/plain')
Ejemplo n.º 7
0
def dhcp_synch(request):
    if not api.is_authenticated(request):
        return HttpResponseForbidden('API key required.')
    address = remote_addr(request)
    server = get_object_or_404(DHCPServer, ip=address)
    server.last_synchronized = datetime.datetime.now()
    server.save()
    return HttpResponse('OK', content_type='text/plain')
Ejemplo n.º 8
0
def dhcp_synch(request):
    if not api.is_authenticated(request):
        return HttpResponseForbidden('API key required.')
    address = remote_addr(request)
    server = get_object_or_404(DHCPServer, ip=address)
    server.last_synchronized = datetime.datetime.now()
    server.save()
    return HttpResponse('OK', content_type='text/plain')
Ejemplo n.º 9
0
def preboot_complete_view(request):
    if not api.is_authenticated(request):
        return HttpResponseForbidden('API key required.')
    try:
        deployment = get_current_deployment(request)
        deployment.status = DeploymentStatus.resolved_fixed
        deployment.save()
    except (Deployment.DoesNotExist):
        pass
    return HttpResponse()
Ejemplo n.º 10
0
def preboot_complete_view(request):
    if not api.is_authenticated(request):
        return HttpResponseForbidden('API key required.')
    try:
        deployment = get_current_deployment(request)
        deployment.status = DeploymentStatus.resolved_fixed
        deployment.save()
    except (Deployment.DoesNotExist):
        pass
    return HttpResponse()
Ejemplo n.º 11
0
def puppet_classifier(request):
    if not api.is_authenticated(request):
        return HttpResponseForbidden("API key required.")
    hostname = request.GET.get("hostname", "").strip()
    qs = (
        Device.objects.filter(Q(name=hostname) | Q(ipaddress__hostname=hostname))
        .distinct()
        .select_related(
            *(
                ["venture", "department", "venture_role", "model", "model__group"]
                + ["__".join(["parent"] * i) for i in range(1, 6)]
            )
        )
    )
    for device in qs[:1]:
        break
    else:
        raise Http404("Hostname %s not found" % hostname)
    location = device.get_position() or ""
    node = device.parent
    visited = set()
    while node and node not in visited:
        visited.add(node)
        name = node.name or "?"
        location = name + "__" + location if location else name
        node = node.parent
    department = None
    owners = []
    if device.venture:
        department = device.venture.get_department()
        ownerships = device.venture.all_ownerships()
        if hasattr(ownerships, "select_related"):
            owners = ownerships.select_related()
    response = {
        "name": device.name,
        "device_id": device.id,
        "venture": device.venture.symbol if device.venture else None,
        "role": device.venture_role.full_name.replace(" / ", "__") if device.venture_role else None,
        "department": department.name if department else None,
        "owners": [
            {"first_name": o.owner.first_name, "last_name": o.owner.last_name, "email": o.owner.email, "type": o.type}
            for o in owners
        ],
        "verified": device.verified,
        "last_seen": device.last_seen.strftime("%Y-%m-%dT%H:%M:%S"),
        "model": device.model.name if device.model else None,
        "model_group": device.model.group.name if (device.model and device.model.group) else None,
        "location": location,
        "properties": device.venture_role.get_properties(device) if device.venture_role else {},
        "property_types": device.venture_role.get_property_types(device) if device.venture_role else {},
        "data_center": device.dc,
        "rack": device.rack,
    }
    return HttpResponse(json.dumps(response), content_type="application/json; charset=utf-8")
Ejemplo n.º 12
0
def dhcp_config_head(request):
    if not api.is_authenticated(request):
        return HttpResponseForbidden('API key required.')
    server_address = request.GET.get('server')
    if not server_address:
        server_address = remote_addr(request)
    dhcp_server = get_object_or_404(DHCPServer, ip=server_address)
    return HttpResponse(
        generate_dhcp_config_head(dhcp_server=dhcp_server, ),
        content_type='text/plain',
    )
Ejemplo n.º 13
0
def dhcp_config(request):
    if not api.is_authenticated(request):
        return HttpResponseForbidden('API key required.')
    if request.GET.get('dc'):
        dc = DataCenter.objects.get(name__iexact=request.GET['dc'])
    else:
        dc = None
    address = remote_addr(request)
    return HttpResponse(
        generate_dhcp_config(dc=dc, server_address=address),
        content_type="text/plain",
    )
Ejemplo n.º 14
0
def dhcp_config_head(request):
    if not api.is_authenticated(request):
        return HttpResponseForbidden('API key required.')
    server_address = request.GET.get('server')
    if not server_address:
        server_address = remote_addr(request)
    dhcp_server = get_object_or_404(DHCPServer, ip=server_address)
    return HttpResponse(
        generate_dhcp_config_head(
            dhcp_server=dhcp_server,
        ),
        content_type='text/plain',
    )
Ejemplo n.º 15
0
def dhcp_config(request):
    if not api.is_authenticated(request):
        return HttpResponseForbidden('API key required.')
    if request.GET.get('dc'):
        dc = DataCenter.objects.get(name__iexact=request.GET['dc'])
    else:
        dc = None
    with_networks = bool(request.GET.get('with_networks', False))
    address = remote_addr(request)
    return HttpResponse(
        generate_dhcp_config(
            dc=dc,
            server_address=address,
            with_networks=with_networks,
        ),
        content_type="text/plain",
    )
Ejemplo n.º 16
0
def dhcp_config(request):
    if not api.is_authenticated(request):
        return HttpResponseForbidden('API key required.')
    return HttpResponse(generate_dhcp_config(), content_type="text/plain")
Ejemplo n.º 17
0
def dhcp_config(request):
    if not api.is_authenticated(request):
        return HttpResponseForbidden('API key required.')
    return HttpResponse(generate_dhcp_config(), content_type="text/plain")
Ejemplo n.º 18
0
def puppet_classifier(request):
    if not api.is_authenticated(request):
        return HttpResponseForbidden('API key required.')
    hostname = request.GET.get('hostname', '').strip()
    qs = Device.objects.filter(
        Q(name=hostname) |
        Q(ipaddress__hostname=hostname)
    ).distinct().select_related(*(
        [
            'venture',
            'department',
            'venture_role',
            'model',
            'model__group',
        ] + ['__'.join(['parent'] * i) for i in range(1, 6)]
    ))
    for device in qs[:1]:
        break
    else:
        raise Http404('Hostname %s not found' % hostname)
    location = device.get_position() or ''
    node = device.parent
    visited = set()
    while node and node not in visited:
        visited.add(node)
        name = node.name or '?'
        location = name + '__' + location if location else name
        node = node.parent
    department = device.venture.get_department()
    response = {
        'name': device.name,
        'device_id': device.id,
        'venture': device.venture.symbol if device.venture else None,
        'role': device.venture_role.full_name.replace(
            ' / ',
            '__',
        ) if device.venture_role else None,
        'department': department.name if department else None,
        'owners': [
            {
                'first_name': o.owner.first_name,
                'last_name': o.owner.last_name,
                'email': o.owner.email,
                'type': o.type,
            } for o in
            device.venture.all_ownerships().select_related('owner')
        ] if device.venture else [],
        'verified': device.verified,
        'last_seen': device.last_seen.strftime('%Y-%m-%dT%H:%M:%S'),
        'model': device.model.name if device.model else None,
        'model_group': device.model.group.name if (
                device.model and
                device.model.group
            ) else None,
        'location': location,
        'properties': device.venture_role.get_properties(
            device,
        ) if device.venture_role else {},
        'property_types': device.venture_role.get_property_types(
            device,
        ) if device.venture_role else {},
        'data_center': device.dc,
        'rack': device.rack,
    }
    return HttpResponse(
        json.dumps(response),
        content_type='application/json; charset=utf-8',
    )
Ejemplo n.º 19
0
def puppet_classifier(request):
    if not api.is_authenticated(request):
        return HttpResponseForbidden('API key required.')
    hostname = request.GET.get('hostname', '').strip()
    qs = Device.objects.filter(
        Q(name=hostname)
        | Q(ipaddress__hostname=hostname)).distinct().select_related(*([
            'venture',
            'department',
            'venture_role',
            'model',
            'model__group',
        ] + ['__'.join(['parent'] * i) for i in range(1, 6)]))
    for device in qs[:1]:
        break
    else:
        raise Http404('Hostname %s not found' % hostname)
    location = device.get_position() or ''
    node = device.parent
    visited = set()
    while node and node not in visited:
        visited.add(node)
        name = node.name or '?'
        location = name + '__' + location if location else name
        node = node.parent
    department = None
    owners = []
    if device.venture:
        department = device.venture.get_department()
        ownerships = device.venture.all_ownerships()
        if hasattr(ownerships, 'select_related'):
            owners = ownerships.select_related()
    response = {
        'name':
        device.name,
        'device_id':
        device.id,
        'venture':
        device.venture.symbol if device.venture else None,
        'role':
        device.venture_role.full_name.replace(
            ' / ',
            '__',
        ) if device.venture_role else None,
        'department':
        department.name if department else None,
        'owners': [{
            'first_name': o.owner.first_name,
            'last_name': o.owner.last_name,
            'email': o.owner.email,
            'type': o.type,
        } for o in owners],
        'verified':
        device.verified,
        'last_seen':
        device.last_seen.strftime('%Y-%m-%dT%H:%M:%S'),
        'model':
        device.model.name if device.model else None,
        'model_group':
        device.model.group.name if
        (device.model and device.model.group) else None,
        'location':
        location,
        'properties':
        device.venture_role.get_properties(device, )
        if device.venture_role else {},
        'property_types':
        device.venture_role.get_property_types(device, )
        if device.venture_role else {},
        'data_center':
        device.dc,
        'rack':
        device.rack,
    }
    return HttpResponse(
        json.dumps(response),
        content_type='application/json; charset=utf-8',
    )