Ejemplo n.º 1
0
    def change_view(self, request, object_id, form_url='', extra_context=None):
        database = Database.objects.get(id=object_id)
        self.form = DatabaseForm
        extra_context = extra_context or {}

        extra_context['has_perm_upgrade_mongo'] = False
        extra_context['can_upgrade'] = False

        if database.is_mongodb_24():
            extra_context['has_perm_upgrade_mongo'] = request.user.has_perm(
                constants.PERM_UPGRADE_MONGO24_TO_30)
        else:
            has_permission = request.user.has_perm(
                constants.PERM_UPGRADE_DATABASE)
            has_equivalent_plan = bool(
                database.infra.plan.engine_equivalent_plan)
            extra_context[
                'can_upgrade'] = has_equivalent_plan and has_permission

        upgrades = database.upgrades.filter(source_plan=database.infra.plan)
        last_upgrade = upgrades.last()
        extra_context['last_upgrade'] = last_upgrade
        extra_context['retry_upgrade'] = False
        if last_upgrade:
            extra_context['retry_upgrade'] = last_upgrade.is_status_error

        if database.is_in_quarantine:
            extra_context['delete_button_name'] = self.delete_button_name
        else:
            extra_context['delete_button_name'] = "Delete"

        if request.user.team_set.filter(role__name="role_dba"):
            extra_context['is_dba'] = True
        else:
            extra_context['is_dba'] = False

        if request.method == 'POST':
            form = DatabaseForm(request.POST)
            if not form.is_valid():
                return super(DatabaseAdmin,
                             self).change_view(request,
                                               object_id,
                                               form_url,
                                               extra_context=extra_context)

        return super(DatabaseAdmin,
                     self).change_view(request,
                                       object_id,
                                       form_url,
                                       extra_context=extra_context)
Ejemplo n.º 2
0
    def add_view(self, request, form_url='', extra_context=None):
        self.form = DatabaseForm

        try:

            if request.method == 'POST':

                teams = Team.objects.filter(users=request.user)
                LOG.info("user %s teams: %s" % (request.user, teams))
                if not teams:
                    self.message_user(
                        request, self.database_add_perm_message,
                        level=messages.ERROR
                    )
                    return HttpResponseRedirect(
                        reverse('admin:logical_database_changelist')
                    )

                # if no team is specified and the user has only one team, then
                # set it to the database
                if teams.count() == 1 and request.method == 'POST' and not request.user.has_perm(
                        self.perm_add_database_infra):

                    post_data = request.POST.copy()
                    if 'team' in post_data:
                        post_data['team'] = u"%s" % teams[0].pk

                    request.POST = post_data

                form = DatabaseForm(request.POST)

                if not form.is_valid():
                    return super(DatabaseAdmin, self).add_view(request, form_url, extra_context=extra_context)

                database_creation_message = "call create_database - name={}, plan={}, environment={}, team={}, project={}, description={}, backup_hour={}, maintenance_window={}, maintenance_day={}, user={}, subscribe_to_email_events {}".format(
                    form.cleaned_data['name'],
                    form.cleaned_data['plan'],
                    form.cleaned_data['environment'],
                    form.cleaned_data['team'],
                    form.cleaned_data['project'],
                    form.cleaned_data['description'],
                    form.cleaned_data['backup_hour'],
                    form.cleaned_data['maintenance_window'],
                    form.cleaned_data['maintenance_day'],
                    request.user,
                    form.cleaned_data['subscribe_to_email_events'],
                )
                LOG.debug(database_creation_message)

                TaskRegister.database_create(
                    name=form.cleaned_data['name'],
                    plan=form.cleaned_data['plan'],
                    environment=form.cleaned_data['environment'],
                    team=form.cleaned_data['team'],
                    project=form.cleaned_data['project'],
                    description=form.cleaned_data['description'],
                    backup_hour=form.cleaned_data['backup_hour'],
                    maintenance_window=form.cleaned_data['maintenance_window'],
                    maintenance_day=form.cleaned_data['maintenance_day'],
                    subscribe_to_email_events=form.cleaned_data['subscribe_to_email_events'],
                    user=request.user,
                    pool=form.cleaned_data['pool'],
                )
                url = reverse('admin:notification_taskhistory_changelist')
                # Redirect after POST
                return HttpResponseRedirect(url + "?user=%s" % request.user.username)

            else:
                return super(DatabaseAdmin, self).add_view(request, form_url, extra_context=extra_context)

        except DatabaseAlreadyExists:
            self.message_user(request, _(
                'An inconsistency was found: The database "%s" already exists in infra-structure but not in DBaaS.') %
                request.POST['name'], level=messages.ERROR)

            request.method = 'GET'
            return super(DatabaseAdmin, self).add_view(request, form_url, extra_context=extra_context)