Пример #1
0
def create_slivers(modeladmin, request, queryset):
    """ Create slivers in selected nodes """
    opts = modeladmin.model._meta
    app_label = opts.app_label

    slice = get_object_or_404(Slice, pk=modeladmin.slice_id)

    if not modeladmin.has_change_permission(request, obj=slice):
        raise PermissionDenied

    n = queryset.count()
    if n == 1:
        node = queryset.get()
        return redirect('admin:slices_slice_add_sliver', modeladmin.slice_id,
                        node.pk)

    if request.POST.get('post'):
        form = SliverIfaceBulkForm(slice, queryset, request.POST)
        if form.is_valid():
            optional_ifaces = form.cleaned_data
            requested_ifaces = [
                field for field, value in optional_ifaces.iteritems() if value
            ]

            for node in queryset:
                sliver = Sliver(slice=slice, node=node)
                if not request.user.has_perm('slices.add_sliver', sliver):
                    raise PermissionDenied
                sliver.save()
                for iface_type in requested_ifaces:
                    SliverIface.objects.create_default(sliver, iface_type)
                slice_modeladmin = get_modeladmin(Slice)
                msg = 'Added sliver "%s"' % force_text(sliver)
                slice_modeladmin.log_change(request, slice, msg)
                sliver_modeladmin = get_modeladmin(Sliver)
                # AUTO_CREATE SliverIfaces
                sliver_modeladmin.log_addition(request, sliver)

            modeladmin.message_user(request,
                                    "Successfully created %d slivers." % n)
            # Return None to display the change list page again.
            return redirect('admin:slices_slice_change', slice.pk)

    context = {
        "title": "Are you sure?",
        "slice": slice,
        "deletable_objects": [[get_admin_link(node) for node in queryset]],
        'queryset': queryset,
        "opts": opts,
        "app_label": app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
        'form': SliverIfaceBulkForm(slice, queryset),
    }

    return TemplateResponse(
        request,
        "admin/slices/slice/create_slivers_confirmation.html",
        context,
        current_app=modeladmin.admin_site.name)
Пример #2
0
 def test_get_modeladmin(self):
     # Try to get every modeladmin from controller's models
     CONTROLLER_APPS = ['communitynetworks', 'firmware', 'gis', 'issues',
         'maintenance', 'monitor', 'nodes', 'notifications', 'pings',
         'resources', 'slices', 'state', 'tinc', 'users']
     for app_name in CONTROLLER_APPS:
         if not is_installed(app_name):
             continue
         app = get_app(app_name)
         for model in get_models(app):
             get_modeladmin(model)
Пример #3
0
def create_slivers(modeladmin, request, queryset):
    """ Create slivers in selected nodes """
    opts = modeladmin.model._meta
    app_label = opts.app_label
    
    slice = get_object_or_404(Slice, pk=modeladmin.slice_id)
    
    if not modeladmin.has_change_permission(request, obj=slice):
        raise PermissionDenied
    
    n = queryset.count()
    if n == 1:
        node = queryset.get()
        return redirect('admin:slices_slice_add_sliver', modeladmin.slice_id, node.pk)
    
    if request.POST.get('post'):
        form = SliverIfaceBulkForm(slice, queryset, request.POST)
        if form.is_valid():
            optional_ifaces = form.cleaned_data
            requested_ifaces = [ field for field, value in optional_ifaces.iteritems() if value ]
            
            for node in queryset:
                sliver = Sliver(slice=slice, node=node)
                if not request.user.has_perm('slices.add_sliver', sliver):
                    raise PermissionDenied
                sliver.save()
                for iface_type in requested_ifaces:
                    iface = Sliver.get_registered_ifaces()[iface_type]
                    SliverIface.objects.create(sliver=sliver, name=iface.DEFAULT_NAME, type=iface_type)
                slice_modeladmin = get_modeladmin(Slice)
                msg = 'Added sliver "%s"' % force_text(sliver)
                slice_modeladmin.log_change(request, slice, msg)
                sliver_modeladmin = get_modeladmin(Sliver)
                # AUTO_CREATE SliverIfaces
                sliver_modeladmin.log_addition(request, sliver)
            
            modeladmin.message_user(request, "Successfully created %d slivers." % n)
            # Return None to display the change list page again.
            return redirect('admin:slices_slice_change', slice.pk)
    
    context = {
        "title": "Are you sure?",
        "slice": slice,
        "deletable_objects": [[ get_admin_link(node) for node in queryset ]],
        'queryset': queryset,
        "opts": opts,
        "app_label": app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
        'form': SliverIfaceBulkForm(slice, queryset),
    }
    
    return TemplateResponse(request, "admin/slices/slice/create_slivers_confirmation.html",
                            context, current_app=modeladmin.admin_site.name)
Пример #4
0
def delete_build_view(request, node_id):
    """ View for deleting a firmware build (with confirmation) """
    node = get_object_or_404(Node, pk=node_id)
    build = get_object_or_404(Build, node=node)

    # Check that the user has delete permission for the actual model
    node_modeladmin = get_modeladmin(Node)
    if not node_modeladmin.has_change_permission(request, obj=node,
                                                 view=False):
        raise PermissionDenied

    # The user has already confirmed the deletion.
    if request.POST.get('post'):
        build.delete()
        node_modeladmin.log_change(request, node, "Deleted firmware build")
        node_modeladmin.message_user(
            request, "Firmware build has been successfully deleted.")
        return redirect('admin:nodes_node_firmware', node_id)

    context = {
        'opts': node_modeladmin.model._meta,
        'app_label': node_modeladmin.model._meta.app_label,
        'title': 'Are your sure?',
        'build': build,
        'node': node,
    }
    return render(request, 'admin/firmware/delete_build_confirmation.html',
                  context)
Пример #5
0
def execute_operation(modeladmin, request, queryset):
    if not request.user.is_superuser:
        raise PermissionDenied
    
    opts = modeladmin.model._meta
    app_label = opts.app_label
    
    operation = get_object_or_404(Operation, pk=modeladmin.operation_id)
    
    if request.POST.get('post'):
        form = ExecutionForm(request.POST)
        if form.is_valid():
            include_new_nodes = form.cleaned_data['include_new_nodes']
            retry_if_offline = form.cleaned_data['retry_if_offline']
        instances = operation.execute(queryset, include_new_nodes=include_new_nodes,
            retry_if_offline=retry_if_offline)
        for instance in instances:
            msg = 'Executed operation "%s"' % force_text(operation)
            modeladmin.log_change(request, operation, msg)
            instance_modeladmin = get_modeladmin(Instance)
            # AUTO_CREATE instances
            instance_modeladmin.log_addition(request, instance)
            modeladmin.message_user(request, "Successfully created %d instances." % len(instances))
            # Return None to display the change list page again.
            return redirect('admin:maintenance_operation_change', operation.pk)
    
    include_new_nodes = operation.executions.filter(include_new_nodes=True).exists()
    
    context = {
        "title": "Are you sure?",
        "operation": operation,
        "deletable_objects": [[ get_admin_link(node) for node in queryset ]],
        'queryset': queryset,
        "opts": opts,
        "app_label": app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
        'form': ExecutionForm(initial={'include_new_nodes': include_new_nodes}),
    }
    
    return TemplateResponse(request, "admin/maintenance/operation/execute_operation_confirmation.html",
                            context, current_app=modeladmin.admin_site.name)
Пример #6
0
 def save(self, commit=True):
     action = self.cleaned_data.get("action")
     roles = self.cleaned_data.get("roles")
     request = self.__request__
     site = RequestSite(request)
     jrequest = self.instance
     username = jrequest.user.get_full_name()
     log = ""
     if roles and action in ["accept", ""]:
         # Accept if explicit and also when a role is selected without any action
         jrequest.accept(roles=roles)
         jrequest.send_approval_email(site=site)
         log = "Accepted join request of user %s with initial roles: %s." % (username, roles)
     elif action == "reject":
         jrequest.reject()
         jrequest.send_rejection_email(site=site)
         log = "Rejected join request of user %s." % username
     elif action == "ignore":
         jrequest.delete()
         log = "Ignored join request of user %s." % username
     if log:
         modeladmin = get_modeladmin(Group)
         modeladmin.log_change(request, jrequest.group, log)
Пример #7
0
 def save(self, commit=True):
     action = self.cleaned_data.get('action')
     roles = self.cleaned_data.get('roles')
     request = self.__request__
     site = RequestSite(request)
     jrequest = self.instance
     username = jrequest.user.get_full_name()
     log = ''
     if roles and action in ['accept', '']:
         # Accept if explicit and also when a role is selected without any action
         jrequest.accept(roles=roles)
         jrequest.send_approval_email(site=site)
         log = "Accepted join request of user %s with initial roles: %s." % (
             username, roles)
     elif action == 'reject':
         jrequest.reject()
         jrequest.send_rejection_email(site=site)
         log = "Rejected join request of user %s." % username
     elif action == 'ignore':
         jrequest.delete()
         log = "Ignored join request of user %s." % username
     if log:
         modeladmin = get_modeladmin(Group)
         modeladmin.log_change(request, jrequest.group, log)
Пример #8
0
def delete_build_view(request, node_id):
    """ View for deleting a firmware build (with confirmation) """
    node = get_object_or_404(Node, pk=node_id)
    build = get_object_or_404(Build, node=node)
    
    # Check that the user has delete permission for the actual model
    node_modeladmin = get_modeladmin(Node)
    if not node_modeladmin.has_change_permission(request, obj=node, view=False):
        raise PermissionDenied
    
    # The user has already confirmed the deletion.
    if request.POST.get('post'):
        build.delete()
        node_modeladmin.log_change(request, node, "Deleted firmware build")
        node_modeladmin.message_user(request, "Firmware build has been successfully deleted.")
        return redirect('admin:nodes_node_firmware', node_id)
    
    context = {
        'opts': node_modeladmin.model._meta,
        'app_label': node_modeladmin.model._meta.app_label,
        'title': 'Are your sure?',
        'build': build,
        'node': node, }
    return render(request, 'admin/firmware/delete_build_confirmation.html', context)
Пример #9
0
 def has_change_permission(self, request, obj=None, view=True):
     """ Inherit permissions from SliceModelAdmin """
     slice_modeladmin = get_modeladmin(Slice)
     return slice_modeladmin.has_change_permission(request,
                                                   obj=obj,
                                                   view=view)
Пример #10
0

if is_installed('firmware'):
    from firmware.admin import BaseImageInline
    from firmware.models import BaseImage
    from firmware.settings import FIRMWARE_BASE_IMAGE_EXTENSIONS

    if vct_settings.VCT_LOCAL_FILES:
        BaseImageInline.form = local_files_form_factory(
            BaseImage, 'image', extensions=FIRMWARE_BASE_IMAGE_EXTENSIONS)

    # Replace node firmware download for "VM manager"
    if vct_settings.VCT_VM_MANAGEMENT:
        insert_change_view_action(Node, vm_management)
        insertattr(Node, 'actions', vm_management)
        node_modeladmin = get_modeladmin(Node)
        old_get_change_view_actions_as_class = node_modeladmin.get_change_view_actions_as_class

        def get_change_view_actions_as_class(self):
            actions = old_get_change_view_actions_as_class()
            return [
                action for action in actions if action.url_name != 'firmware'
            ]

        type(
            node_modeladmin
        ).get_change_view_actions_as_class = get_change_view_actions_as_class

# Slices customization
if vct_settings.VCT_LOCAL_FILES:
    TemplateAdmin.form = local_files_form_factory(
Пример #11
0
insertattr(Node, 'actions', refresh_state)
insertattr(Sliver, 'actions', refresh_state)
insertattr(Node, 'list_filter', NodeStateListFilter)
insertattr(NodeListAdmin, 'list_filter', NodeStateListFilter)
insertattr(Sliver, 'list_filter', SliverStateListFilter)
insertattr(Node, 'list_filter', FirmwareVersionListFilter)

SliverInline.sliver_state = state_link
SliverInline.readonly_fields.append('sliver_state')
SliverInline.fields.append('sliver_state')

SliverNodeInline.sliver_state = state_link
SliverNodeInline.readonly_fields.append('sliver_state')
SliverNodeInline.fields.append('sliver_state')

node_modeladmin = get_modeladmin(Node)
node_modeladmin.set_change_view_action(show_state)
sliver_modeladmin = get_modeladmin(Sliver)
sliver_modeladmin.set_change_view_action(show_state)

actions = getattr(SliceSliversAdmin, 'change_view_actions', [])
SliceSliversAdmin.change_view_actions = actions + [show_state]
old_slice_get_urls = SliceAdmin.get_urls


def get_urls(self):
    urls = old_slice_get_urls(self)
    extra_urls = patterns(
        "",
        url(
            "^(?P<slice_id>\d+)/slivers/(?P<object_id>\d+)/state",
Пример #12
0
 def has_change_permission(self, request, obj=None, view=True):
     """ Inherit permissions from SliceModelAdmin """
     slice_modeladmin = get_modeladmin(Slice)
     return slice_modeladmin.has_change_permission(request, obj=obj, view=view)
Пример #13
0
    return type("VCTLocalFileForm", (base_class,), attributes)


if is_installed("firmware"):
    from firmware.admin import BaseImageInline
    from firmware.models import BaseImage
    from firmware.settings import FIRMWARE_BASE_IMAGE_EXTENSIONS

    if settings.VCT_LOCAL_FILES:
        BaseImageInline.form = local_files_form_factory(BaseImage, "image", extensions=FIRMWARE_BASE_IMAGE_EXTENSIONS)

    # Replace node firmware download for "VM manager"
    if settings.VCT_VM_MANAGEMENT:
        insert_change_view_action(Node, vm_management)
        insertattr(Node, "actions", vm_management)
        node_modeladmin = get_modeladmin(Node)
        old_get_change_view_actions_as_class = node_modeladmin.get_change_view_actions_as_class

        def get_change_view_actions_as_class(self):
            actions = old_get_change_view_actions_as_class()
            return [action for action in actions if action.url_name != "firmware"]

        type(node_modeladmin).get_change_view_actions_as_class = get_change_view_actions_as_class


# Slices customization
if settings.VCT_LOCAL_FILES:
    TemplateAdmin.form = local_files_form_factory(
        Template, "image", extensions=slices_settings.SLICES_TEMPLATE_IMAGE_EXTENSIONS
    )
    SliceAdmin.form = local_files_form_factory(
Пример #14
0
        series = series.filter(date__gte=date_from, date__lte=date_to)
    if raw and raw.capitalize() == 'True':
        series = [[False, [serie]] for serie in series]
    else:
        series = group_by_interval(series, timedelta(minutes=5))
    previous = None
    for __, series in series:
        serie = monitor.aggregate(series)
        serie.apply_relativity(previous)
        previous = serie
        date = int(serie.date.strftime('%s').split('.')[0] + '000')
        data.append([date, serie.value])
    return HttpResponse(json.dumps(data), content_type="application/json")


ServerAdmin = get_modeladmin(Server)
old_server_get_urls = ServerAdmin.get_urls


def get_urls():
    urls = old_server_get_urls()
    extra_urls = patterns(
        "",
        url("^monitor/(?P<name>\w+)",
            wrap_admin_view(ServerAdmin, time_serie_view),
            name='nodes_server_monitor_netio'),
        url("^monitor",
            wrap_admin_view(ServerAdmin, monitor_view),
            name='nodes_server_monitor'),
    )
    return extra_urls + urls
Пример #15
0
insertattr(Sliver, 'list_display', state_link)

insertattr(Node, 'actions', refresh_state)
insertattr(Sliver, 'actions', refresh_state)
insertattr(Node, 'list_filter', NodeStateListFilter)
insertattr(Sliver, 'list_filter', SliverStateListFilter)
insertattr(Node, 'list_filter', FirmwareVersionListFilter)
SliverInline.sliver_state = state_link
SliverInline.readonly_fields.append('sliver_state')
SliverInline.fields.append('sliver_state')

SliverNodeInline.sliver_state = state_link
SliverNodeInline.readonly_fields.append('sliver_state')
SliverNodeInline.fields.append('sliver_state')

node_modeladmin = get_modeladmin(Node)
node_modeladmin.set_change_view_action(show_state)
sliver_modeladmin = get_modeladmin(Sliver)
sliver_modeladmin.set_change_view_action(show_state)

actions = getattr(SliceSliversAdmin, 'change_view_actions', [])
SliceSliversAdmin.change_view_actions = actions + [show_state]
old_slice_get_urls = SliceAdmin.get_urls
def get_urls(self):
    urls = old_slice_get_urls(self)
    extra_urls = patterns("",
        url("^(?P<slice_id>\d+)/slivers/(?P<object_id>\d+)/state",
            wrap_admin_view(self, wrap_action(show_state,
                    SliceSliversAdmin(Sliver, self.admin_site))),)
    )
    return extra_urls + urls
Пример #16
0
        date_to = datetime.fromtimestamp(float(date_to), timezone.utc)
        series = series.filter(date__gte=date_from, date__lte=date_to)
    if raw and raw.capitalize() == 'True':
        series = [ [False, [serie]] for serie in series ]
    else:
        series = group_by_interval(series, timedelta(minutes=5))
    previous = None
    for __, series in series:
        serie = monitor.aggregate(series)
        serie.apply_relativity(previous)
        previous = serie
        date = int(serie.date.strftime('%s').split('.')[0] + '000')
        data.append([date, serie.value])
    return HttpResponse(json.dumps(data), content_type="application/json")


ServerAdmin = get_modeladmin(Server)
old_server_get_urls = ServerAdmin.get_urls
def get_urls():
    urls = old_server_get_urls()
    extra_urls = patterns("",
        url("^monitor/(?P<name>\w+)",
            wrap_admin_view(ServerAdmin, time_serie_view),
            name='nodes_server_monitor_netio'),
        url("^monitor",
            wrap_admin_view(ServerAdmin, monitor_view),
            name='nodes_server_monitor'),
        )
    return extra_urls + urls
ServerAdmin.get_urls = get_urls