manila-ui/manila_ui/dashboards/admin/shares/tables.py

165 lines
5.4 KiB
Python

# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from django.urls import reverse
from django.utils.translation import ugettext_lazy as _
from horizon import tables
from manila_ui.dashboards.project.shares import tables as shares_tables
from manila_ui import features
class MigrationStartAction(tables.LinkAction):
name = "migration_start"
verbose_name = _("Migrate Share")
url = "horizon:admin:shares:migration_start"
classes = ("ajax-modal",)
policy_rules = (("share", "migration_start"),)
ajax = True
def allowed(self, request, share=None):
if share:
return (share.status.upper() == "AVAILABLE" and
not getattr(share, 'has_snapshot', False) and
features.is_migration_enabled())
return False
class MigrationCompleteAction(tables.LinkAction):
name = "migration_complete"
verbose_name = _("Complete migration")
url = "horizon:admin:shares:migration_complete"
classes = ("ajax-modal",)
policy_rules = (("share", "migration_complete"),)
ajax = True
def allowed(self, request, share=None):
if (share and share.status.upper() == "MIGRATING" and
features.is_migration_enabled()):
return True
return False
class MigrationCancelAction(tables.LinkAction):
name = "migration_cancel"
verbose_name = _("Cancel migration")
url = "horizon:admin:shares:migration_cancel"
classes = ("ajax-modal",)
policy_rules = (("share", "migration_cancel"),)
ajax = True
def allowed(self, request, share=None):
if (share and share.status.upper() == "MIGRATING" and
features.is_migration_enabled()):
return True
return False
class MigrationGetProgressAction(tables.LinkAction):
name = "migration_get_progress"
verbose_name = _("Get migration progress")
url = "horizon:admin:shares:migration_get_progress"
classes = ("ajax-modal",)
policy_rules = (("share", "migration_get_progress"),)
ajax = True
def allowed(self, request, share=None):
if (share and share.status.upper() == "MIGRATING" and
features.is_migration_enabled()):
return True
return False
class ManageShareAction(tables.LinkAction):
name = "manage"
verbose_name = _("Manage Share")
url = "horizon:admin:shares:manage"
classes = ("ajax-modal",)
icon = "plus"
policy_rules = (("share", "share_extension:share_manage"),)
ajax = True
class UnmanageShareAction(tables.LinkAction):
name = "unmanage"
verbose_name = _("Unmanage Share")
url = "horizon:admin:shares:unmanage"
classes = ("ajax-modal",)
icon = "pencil"
policy_rules = (("share", "share_extension:share_unmanage"),)
def allowed(self, request, share=None):
if (not share or share.share_server_id or
share.status.upper() not in shares_tables.DELETABLE_STATES):
return False
elif hasattr(share, 'has_snapshot'):
return not share.has_snapshot
return False
class ManageReplicas(tables.LinkAction):
name = "manage_replicas"
verbose_name = _("Manage Replicas")
url = "horizon:admin:shares:manage_replicas"
classes = ("btn-edit",)
policy_rules = (("share", "share:replica_get_all"),)
def allowed(self, request, share):
share_replication_enabled = share.replication_type is not None
return features.is_replication_enabled() and share_replication_enabled
class SharesTable(shares_tables.SharesTable):
name = tables.WrappingColumn(
"name", verbose_name=_("Name"),
link="horizon:admin:shares:detail")
host = tables.Column("host", verbose_name=_("Host"))
project = tables.Column("project_name", verbose_name=_("Project"))
def get_share_server_link(share):
if getattr(share, 'share_server_id', None):
return reverse("horizon:admin:share_servers:share_server_detail",
args=(share.share_server_id,))
else:
return None
share_server = tables.Column(
"share_server_id",
verbose_name=_("Share Server"),
link=get_share_server_link)
class Meta(object):
name = "shares"
verbose_name = _("Shares")
status_columns = ["status"]
row_class = shares_tables.UpdateRow
table_actions = (
tables.NameFilterAction,
ManageShareAction,
shares_tables.DeleteShare,
)
row_actions = (
ManageReplicas,
MigrationStartAction,
MigrationCompleteAction,
MigrationGetProgressAction,
MigrationCancelAction,
UnmanageShareAction,
shares_tables.DeleteShare,
)
columns = [
'tenant', 'host', 'name', 'size', 'status', 'visibility',
'share_type', 'protocol', 'share_server',
]
if features.is_share_groups_enabled():
columns.append('share_group_id')