Repository URL to install this package:
Version:
3.4.52 ▾
|
tvault-horizon-plugin
/
usr
/
lib
/
python2.7
/
dist-packages
/
dashboards
/
workloads
/
snapshots
/
views.py
|
---|
# 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