Repository URL to install this package:
Version:
6.0.24.1.dev1-6.0 ▾
|
python3-tvault-horizon-plugin-el8
/
usr
/
lib
/
python3.9
/
site-packages
/
trilio_dashboard
/
workloads
/
tables.py
|
---|
# Copyright (c) 2014 TrilioData, Inc.
# All Rights Reserved.
import logging
from django import template
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.http import HttpResponse
from django.template import defaultfilters as filters
from django.utils import http
from django.utils.translation import gettext_lazy as _
from horizon import exceptions
from horizon import messages
from horizon import tables
from trilio_dashboard import workloadmgr
from openstack_dashboard import api
LOG = logging.getLogger(__name__)
class WorkloadSnapshotFull(tables.BatchAction):
name = "Full Snapshot"
verbose_name = _("Full Snapshot")
classes = ("btn-simple", "btn-full-snapshot")
data_type_singular = _(" ")
data_type_plural = _(" ")
@staticmethod
def action_present(count):
return _(
"Full Snapshot"
)
@staticmethod
def action_past(count):
return _(
"Scheduled execution of"
)
def action(self, request, obj_id):
try:
workload_id = obj_id
workloadmgr.workload_snapshot(
request, workload_id, full=True, name='', description='')
LOG.debug('Full snapshot of workload %s scheduled successfully' %
workload_id)
except Exception as ex:
messages.error(request, str(ex))
def allowed(self, request, workload):
if workload is not None:
return ((workload.status == 'available'))
else:
return False
class WorkloadSnapshot(tables.BatchAction):
name = "Snapshot"
verbose_name = _("Create Snapshot")
classes = ("btn-simple", "btn-snapshot")
# classes = ("ajax-modal", "btn-snapshot")
data_type_singular = _(" ")
data_type_plural = _(" ")
@staticmethod
def action_present(count):
return _(
"Create Snapshot"
)
@staticmethod
def action_past(count):
return _(
"Scheduled execution of"
)
def action(self, request, obj_id):
try:
workload_id = obj_id
workloadmgr.workload_snapshot(
request, workload_id, full=False, name='', description='')
LOG.debug('Snapshot of workload %s scheduled successfully' %
workload_id)
except Exception as ex:
messages.error(request, str(ex))
def allowed(self, request, workload):
if workload is not None:
return ((workload.status == 'available'))
else:
return False
class WorkloadUnlock(tables.BatchAction):
name = "Unlock"
verbose_name = _("Unlock")
classes = ("btn-simple", "btn-unlock")
data_type_singular = _(" ")
data_type_plural = _(" ")
@staticmethod
def action_present(count):
return _(
"Unlock Workload"
)
@staticmethod
def action_past(count):
return _(
"Unlocked"
)
def action(self, request, obj_id):
try:
workload_id = obj_id
workloadmgr.workload_unlock(request, workload_id)
LOG.debug('Workload %s unlocked successfully' % workload_id)
except Exception as ex:
messages.error(request, str(ex))
def allowed(self, request, workload):
if workload is not None:
return ((workload.status == 'locked'))
else:
return False
class WorkloadReset(tables.DeleteAction):
name = "Reset"
verbose_name = _("Reset Workload")
classes = ("btn-danger", "btn-reset")
data_type_singular = _(" ")
data_type_plural = _(" ")
help_text = _("This action will clear only cinder snapshots.")
@staticmethod
def action_present(count):
return _(
"Reset Workload"
)
@staticmethod
def action_past(count):
return _(
"Reset"
)
def action(self, request, obj_id):
try:
workload_id = obj_id
workloadmgr.workload_reset(request, workload_id)
LOG.debug('Workload %s reset successfully' % workload_id)
except Exception as ex:
messages.error(request, str(ex))
def allowed(self, request, workload):
if workload is not None:
return ((workload.status == 'available'))
else:
return False
class DeleteWorkload(tables.DeleteAction):
classes = ("btn-danger")
data_type_singular = _("Workload")
data_type_plural = _("Workloads")
@staticmethod
def action_present(count):
return _(
"Delete Workload"
)
@staticmethod
def action_past(count):
return _(
"Deleted"
)
def delete(self, request, workload_id):
try:
workloadmgr.workload_delete(request, workload_id)
LOG.debug('Deleted workload %s successfully' % workload_id)
except Exception as ex:
messages.error(request, str(ex))
"""
def allowed(self, request, workload):
if workload is not None:
return ((workload.status == 'available'))
else:
return False
"""
class UpdateRow(tables.Row):
ajax = True
name = "update"
def get_data(self, request, workload_id):
try:
workload = workloadmgr.workload_get(request, workload_id)
LOG.debug('Workload %s data retrieved successfully' % workload_id)
return workload
except Exception as ex:
LOG.exception(ex)
pass
class CreateWorkload(tables.LinkAction):
name = "create"
verbose_name = _("Create Workload")
url = "horizon:project:workloads:create"
classes = ("ajax-modal", "btn-create")
class CreateSnapshot(tables.LinkAction):
name = "snapshot"
verbose_name = _("Create Snapshot")
url = "horizon:project:workloads:snapshot"
classes = ("ajax-modal", "btn-snapshot")
def allowed(self, request, workload=None):
return workload.status == "available"
class EditWorkload(tables.LinkAction):
name = "edit"
verbose_name = _("Edit Workload")
url = "horizon:project:workloads:update"
classes = ("ajax-modal", "btn-update")
def get_data(self, request, workload_id):
try:
workload = workloadmgr.workload_get(request, workload_id)
LOG.debug('Workload %s data retrieved successfully' % workload_id)
except Exception as ex:
messages.error(request, str(ex))
return workload
def allowed(self, request, workload=None):
return workload.status == "available"
class CreateTransfer(tables.LinkAction):
name = "create_transfer"
verbose_name = _("Create Transfer")
url = "horizon:project:workloads:create_transfer"
classes = ("ajax-modal",)
policy_rules = (("workload", "workload:create_transfer"),)
def allowed(self, request, workload=None):
return workload.status == "available"
class AcceptTransfer(tables.LinkAction):
name = "accept_transfer"
verbose_name = _("Accept Transfer")
url = "horizon:project:workloads:accept_transfer"
classes = ("ajax-modal",)
icon = "exchange"
policy_rules = (("workload", "workload:accept_transfer"),)
ajax = True
def single(self, table, request, object_id=None):
return HttpResponse(self.render())
class AbortTransfer(tables.Action):
name = "delete_transfer"
verbose_name = _("Abort Transfer")
policy_rules = (("workload", "workload:delete_transfer"),)
classes = ('btn-danger',)
help_text = _("This action cannot be undone.")
def allowed(self, request, workload):
return (workload.status == "transfer-in-progress")
def single(self, table, request, workload_id):
try:
for trans in workloadmgr.transfer_list(request):
if trans.workload_id == workload_id:
workloadmgr.transfer_delete(request, trans.id)
msg = _('Successfully aborted workload transfer "%s"'
) % trans.id
messages.success(request, msg)
break
except Exception:
exceptions.handle(request, _("Unable to abort workload transfer."))
def get_success_url(self, request):
return reverse('horizon:project:workloads:index')
class CompleteTransfer(tables.Action):
name = "complete_transfer"
verbose_name = _("Complete Transfer")
policy_rules = (("workload", "workload:delete_transfer"),)
classes = ('btn-danger',)
help_text = _("This action cannot be undone.")
def allowed(self, request, workload):
return (workload.status == "transfer-in-progress")
def single(self, table, request, workload_id):
try:
for trans in workloadmgr.transfer_list(request):
if trans.workload_id == workload_id:
workloadmgr.transfer_complete(request, trans.id)
msg = _('Successfully completed workload transfer "%s"'
) % trans.id
messages.success(request, msg)
break
except Exception as ex:
messages.error(request, str(ex))
def get_success_url(self, request):
return reverse('horizon:project:workloads:index')
class WorkloadsTable(tables.DataTable):
STATUS_CHOICES = (
("available", True),
("error", True)
)
created_at = tables.Column("created_at",
verbose_name=_("Created at"),
empty_value="...",
classes=('t_col165', 'test'))
name = tables.Column("name", verbose_name=_("Name"),
link='horizon:project:workloads:detail',
classes=('test', 'workloadname'))
snapshots_info = tables.Column("snapshots_info",
verbose_name=_("Snapshots"),
empty_value="-",
classes=('t_col200', 'snapshots_info'))
description = tables.Column("description", verbose_name=_("Description"))
# id = tables.Column("id", verbose_name=_("ID"))
status = tables.Column("status",
verbose_name=_("Status"),
classes=('t_col100', 'test', 'col_status'),
status=True,
status_choices=STATUS_CHOICES)
trust = tables.Column("trust", verbose_name=_(
"Scheduler Trust"), classes=('t_col100', 'trust'))
encryption = tables.Column("encryption",
verbose_name=_('Encryption'),
classes=('encryption'),
)
user_id = tables.Column("user_id",
verbose_name=_("User Id"),
hidden=True,
classes=('user',))
project_id = tables.Column("project_id",
verbose_name=_("Project Id"),
hidden=True,
classes=('project',))
policy_id = tables.Column("policy_id",
verbose_name=_("Policy Id"),
hidden=True,
classes=('policy',))
class Meta:
name = "workloads"
verbose_name = _("Workloads")
status_columns = ["status", "status"]
row_class = UpdateRow
# table_actions = (CreateWorkload, AcceptTransfer, DeleteWorkload)
table_actions = (CreateWorkload, DeleteWorkload)
# row_actions = (CreateSnapshot, EditWorkload, CreateTransfer,
# AbortTransfer, CompleteTransfer,
row_actions = (CreateSnapshot, EditWorkload,
WorkloadUnlock, WorkloadReset, DeleteWorkload, )