Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
# Copyright (c) 2014 TrilioData, Inc.
# All Rights Reserved.

"""
Views for managing WorkloadMgr Snapshots.
"""
import logging

try:
    from django.core.urlresolvers import reverse
except ImportError:
    from django.urls import reverse
try:
    from django.core.urlresolvers import reverse_lazy
except ImportError:
    from django.urls import reverse_lazy

from django.contrib import messages
from django.shortcuts import redirect
from django.utils.translation import ugettext_lazy as _
from django.views.generic import View

from horizon import exceptions
from horizon import forms
from horizon import tables
from horizon import workflows

from .restores.tables import RestoresTable
from .tables import SnapshotsTable
from .testbubbles.tables import TestbubblesTable
from .workflows import CreateSnapshot, MountSnapshot
from .workflows import CreateOneClickRestore as CreateOneClickRestore_flow
from .workflows import InplaceRestore
from .workflows import SelectiveRestore
from .workflows import SetInplaceRestore_DefaultSteps
from .workflows import SetSelectiveRestore_DefaultSteps
from dashboards import workloadmgr
from openstack_dashboard import api

LOG = logging.getLogger(__name__)


class IndexView(tables.DataTableView):
    table_class = SnapshotsTable
    template_name = 'project/workloads/snapshots/index.html'

    def get_data(self):
        try:
            snapshots = workloadmgr.snapshot_list(self.request)
        except Exception:
            snapshots = []
            msg = _('Snapshot list can not be retrieved.')
            exceptions.handle(self.request, msg)

        return snapshots


class CreateView(workflows.WorkflowView):
    workflow_class = CreateSnapshot
    template_name = 'project/workloads/snapshots/create.html'

    def get_initial(self):
        pass


class DetailView(tables.MultiTableView):
    table_classes = (RestoresTable, TestbubblesTable)
    template_name = 'project/workloads/snapshots/detail.html'
    failure_url = reverse_lazy('horizon:project:workloads:snapshots:index')

    def get_restores_data(self):
        restores = []
        try:
            snapshot = self._get_data()
            if snapshot:
                restores = workloadmgr.restore_list(
                    self.request, snapshot_id=snapshot.id)
        except Exception:
            restores = []
            msg = _('Restores list can not be retrieved.')
            exceptions.handle(self.request, msg)
        return restores

    def get_testbubbles_data(self):
        testbubbles = []
        try:
            snapshot = self._get_data()
            if snapshot:
                testbubbles = workloadmgr.testbubble_list(
                    self.request, snapshot_id=snapshot.id)
        except Exception:
            testbubbles = []
            msg = _('Testbubbles list can not be retrieved.')
            exceptions.handle(self.request, msg)
        return testbubbles

    def _get_data(self):
        if not hasattr(self, "_snapshot"):
            try:
                snapshot_id = self.kwargs['snapshot_id']
                snapshot = workloadmgr.snapshot_get(self.request, snapshot_id)
                for metadata in snapshot.metadata:
                    if metadata['key'] == 'mounturl':
                        metadata['value'] = str(metadata['value'])[2:-2]
                        metadata['value'] = metadata['value'].replace('"', '')
            except Exception:
                msg = _('Unable to retrieve details for snapshot "%s".') \
                    % (snapshot_id)
                exceptions.handle(self.request, msg, redirect=self.failure_url)
            self._snapshot = snapshot
        return self._snapshot

    def get_context_data(self, **kwargs):
        context = super(DetailView, self).get_context_data(**kwargs)
        context["snapshot"] = self._get_data()
        return context


class MountView(workflows.WorkflowView):
    workflow_class = MountSnapshot
    template_name = 'project/workloads/snapshots/mount.html'
    failure_url = reverse_lazy('horizon:project:workloads:snapshots:index')

    def _get_data(self):
        if not hasattr(self, "_snapshot"):
            try:
                snapshot_id = self.kwargs['snapshot_id']
                snapshot = workloadmgr.snapshot_get(self.request, snapshot_id)
            except Exception:
                msg = _('Unable to retrieve details for snapshot "%s".') \
                    % (snapshot_id)
                exceptions.handle(self.request, msg, redirect=self.failure_url)
            self._snapshot = snapshot
        return self._snapshot

    def get_context_data(self, **kwargs):
        context = super(MountView, self).get_context_data(**kwargs)
        context['snapshot_id'] = self.kwargs['snapshot_id']
        context["snapshot"] = self._get_data()
        context['workflow'].context['snapshot_id'] = self.kwargs['snapshot_id']
        return context

    def get_initial(self):
        initial = super(MountView, self).get_initial()
        return initial


class CreateOneClickRestoreView(workflows.WorkflowView):
    workflow_class = CreateOneClickRestore_flow
    template_name = 'project/workloads/snapshotsoneclickrestore.html'
    failure_url = reverse_lazy('horizon:project:workloads:snapshots:index')

    def _get_data(self):
        if not hasattr(self, "_snapshot"):
            try:
                snapshot_id = self.kwargs['snapshot_id']
                snapshot = workloadmgr.snapshot_get(self.request, snapshot_id)
            except Exception:
                msg = _('Unable to retrieve details for snapshot "%s".') \
                    % (snapshot_id)
                exceptions.handle(self.request, msg, redirect=self.failure_url)
            self._snapshot = snapshot
        return self._snapshot

    def get_context_data(self, **kwargs):
        context = super(
            CreateOneClickRestoreView, self).get_context_data(**kwargs)
        context['snapshot_id'] = self.kwargs['snapshot_id']
        context["snapshot"] = self._get_data()
        context['workflow'].context['snapshot_id'] = self.kwargs['snapshot_id']
        return context

    def get_initial(self):
        initial = super(CreateOneClickRestoreView, self).get_initial()
        pass


class SelectiveRestoreView(workflows.WorkflowView):
    workflow_class = SelectiveRestore
    template_name = 'project/workloads/snapshots/selectiverestore.html'
    failure_url = reverse_lazy('horizon:project:workloads:snapshots:index')

    def _get_data(self):
        if not hasattr(self, "_snapshot"):
            try:
                snapshot_id = self.kwargs['snapshot_id']
                snapshot = workloadmgr.snapshot_get(self.request, snapshot_id)
            except Exception:
                msg = _('Unable to retrieve details for snapshot "%s".') \
                    % (snapshot_id)
                exceptions.handle(self.request, msg, redirect=self.failure_url)
            self._snapshot = snapshot
        return self._snapshot

    def get_context_data(self, **kwargs):

        # set class specific attributes here
        # once super class method is called, it is too late
        snapshot = self._get_data()
        SetSelectiveRestore_DefaultSteps(snapshot)

        context = super(SelectiveRestoreView, self).get_context_data(**kwargs)
        context['snapshot_id'] = self.kwargs['snapshot_id']
        context["snapshot"] = self._snapshot
        context['workflow'].context['snapshot_id'] = self.kwargs['snapshot_id']
        return context


class InplaceRestoreView(workflows.WorkflowView):
    workflow_class = InplaceRestore
    template_name = 'project/workloads/snapshots/inplacerestore.html'
    failure_url = reverse_lazy('horizon:project:workloads:snapshots:index')

    def _get_data(self):
        if not hasattr(self, "_snapshot"):
            try:
                snapshot_id = self.kwargs['snapshot_id']
                snapshot = workloadmgr.snapshot_get(self.request, snapshot_id)
            except Exception:
                msg = _('Unable to retrieve details for snapshot "%s".') \
                    % (snapshot_id)
                exceptions.handle(self.request, msg, redirect=self.failure_url)
            self._snapshot = snapshot
        return self._snapshot

    def get_context_data(self, **kwargs):

        # set class specific attributes here
        # once super class method is called, it is too late
        snapshot = self._get_data()
        SetInplaceRestore_DefaultSteps(snapshot, InplaceRestore)

        context = super(InplaceRestoreView, self).get_context_data(**kwargs)
        context['snapshot_id'] = self.kwargs['snapshot_id']
        context["snapshot"] = self._snapshot
        context['workflow'].context['snapshot_id'] = self.kwargs['snapshot_id']
        return context


class UnmountSnapshotView(View):

    def get(self, request, *args, **kwargs):
        try:
            snapshot_id = self.kwargs['snapshot_id']
            umount = workloadmgr.snapshot_dismount(request, snapshot_id)
            response = redirect(request.META['HTTP_REFERER'])
            messages.success(request, 'Unmounted snapshot successfully.')
            return response
        except Exception as ex:
            messages.error(request, 'Unable to unmount snapshot.')
            response = redirect(request.META['HTTP_REFERER'])
            return response