Repository URL to install this package:
|
Version:
4.1.94.1.dev11-4.1 ▾
|
python3-tvault-horizon-plugin-el8
/
usr
/
lib
/
python3.6
/
site-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.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