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.utils.translation import ugettext_lazy as _
from django.views.generic import View
from django.shortcuts import redirect
from django.contrib import messages

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

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

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:
            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:
            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:
            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:
                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:
                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:
                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:
                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:
                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