Change Patches Tab to Releases Tab
This is part of the changes required to implement USM in GUI (Horizon). In order to improve the user experience, some labels have been modified as part of the USM integration. Change-Id: If412e1954474a4350e1cbd6b73f6a8e82cfbf070
This commit is contained in:
parent
f04638e8f8
commit
869baa4875
|
@ -20,6 +20,205 @@ from starlingx_dashboard import api as stx_api
|
|||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
#Release
|
||||
|
||||
class UploadRelease(tables.LinkAction):
|
||||
name = "releaseupload"
|
||||
verbose_name = _("Upload Releases")
|
||||
url = "horizon:admin:software_management:patchupload"
|
||||
classes = ("ajax-modal", "btn-create")
|
||||
icon = "plus"
|
||||
|
||||
class ApplyRelease(tables.BatchAction):
|
||||
name = "apply"
|
||||
|
||||
@staticmethod
|
||||
def action_present(count):
|
||||
return ungettext_lazy(
|
||||
"Apply Release",
|
||||
"Apply Releases",
|
||||
count
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def action_past(count):
|
||||
return ungettext_lazy(
|
||||
"Applied Release",
|
||||
"Applied Releases",
|
||||
count
|
||||
)
|
||||
|
||||
def allowed(self, request, release=None):
|
||||
if release is None:
|
||||
return True
|
||||
return release.state == "available"
|
||||
|
||||
def handle(self, table, request, obj_ids):
|
||||
try:
|
||||
result = stx_api.patch.patch_apply_req(request, obj_ids)
|
||||
messages.success(request, result)
|
||||
except Exception as ex:
|
||||
messages.error(request, str(ex))
|
||||
|
||||
url = reverse(table.index_url)
|
||||
return shortcuts.redirect(url)
|
||||
|
||||
|
||||
class RemoveRelease(tables.BatchAction):
|
||||
name = "remove"
|
||||
classes = ()
|
||||
|
||||
@staticmethod
|
||||
def action_present(count):
|
||||
return ungettext_lazy(
|
||||
"Remove Release",
|
||||
"Remove Releases",
|
||||
count
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def action_past(count):
|
||||
return ungettext_lazy(
|
||||
"Removed Release",
|
||||
"Removed Releases",
|
||||
count
|
||||
)
|
||||
|
||||
def allowed(self, request, release=None):
|
||||
if release is None:
|
||||
return True
|
||||
|
||||
if release.unremovable == "Y":
|
||||
if "disabled" not in self.classes:
|
||||
self.classes = [c for c in self.classes] + ["disabled"]
|
||||
else:
|
||||
self.classes = [c for c in self.classes if c != "disabled"]
|
||||
|
||||
return release.state == "Applied"
|
||||
|
||||
def handle(self, table, request, obj_ids):
|
||||
try:
|
||||
result = stx_api.patch.patch_remove_req(request, obj_ids)
|
||||
messages.success(request, result)
|
||||
except Exception as ex:
|
||||
messages.error(request, str(ex))
|
||||
|
||||
url = reverse(table.index_url)
|
||||
return shortcuts.redirect(url)
|
||||
|
||||
|
||||
class DeleteRelease(tables.BatchAction):
|
||||
name = "delete"
|
||||
icon = 'trash'
|
||||
action_type = 'danger'
|
||||
|
||||
@staticmethod
|
||||
def action_present(count):
|
||||
return ungettext_lazy(
|
||||
"Delete Release",
|
||||
"Delete Releases",
|
||||
count
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def action_past(count):
|
||||
return ungettext_lazy(
|
||||
"Deleted Release",
|
||||
"Deleted Releases",
|
||||
count
|
||||
)
|
||||
|
||||
def allowed(self, request, release=None):
|
||||
if release is None:
|
||||
return True
|
||||
return release.state == "available"
|
||||
|
||||
def handle(self, table, request, obj_ids):
|
||||
try:
|
||||
result = stx_api.patch.patch_delete_req(request, obj_ids)
|
||||
messages.success(request, result)
|
||||
except Exception as ex:
|
||||
messages.error(request, str(ex))
|
||||
|
||||
url = reverse(table.index_url)
|
||||
return shortcuts.redirect(url)
|
||||
|
||||
class UpdateReleaseRow(tables.Row):
|
||||
ajax = True
|
||||
|
||||
def get_data(self, request, release_id):
|
||||
print('TESTE')
|
||||
release = stx_api.usm.get_release(request, release_id)
|
||||
return release
|
||||
|
||||
class ReleaseFilterAction(tables.FilterAction):
|
||||
def filter(self, table, patches, filter_string):
|
||||
"""Naive case-insensitive search."""
|
||||
q = filter_string.lower()
|
||||
|
||||
def comp(patch):
|
||||
if q in patch.patch_id.lower():
|
||||
return True
|
||||
return False
|
||||
|
||||
return list(filter(comp, patches))
|
||||
|
||||
class ReleasesTable(tables.DataTable):
|
||||
index_url = 'horizon:admin:software_management:index'
|
||||
RELEASE_STATE_CHOICES = (
|
||||
(None, True),
|
||||
("", True),
|
||||
("none", True),
|
||||
("available", True),
|
||||
("Deployed", True),
|
||||
("Partial-Remove", True),
|
||||
("Applied", True),
|
||||
("Committed", True)
|
||||
)
|
||||
COMMITTED_STATE_CHOICES = (
|
||||
(None, True),
|
||||
("", True),
|
||||
("none", True),
|
||||
("Committed", True),
|
||||
("Not Committed", True),
|
||||
)
|
||||
release_id = tables.Column('release_id',
|
||||
link="horizon:admin:software_management:"
|
||||
"patchdetail",
|
||||
verbose_name=_('Release ID'))
|
||||
reboot_required = tables.Column('reboot_required',
|
||||
verbose_name=_('RR'))
|
||||
sw_version = tables.Column('sw_version',
|
||||
verbose_name=_('Version'))
|
||||
state = tables.Column('state',
|
||||
verbose_name=_('State'),
|
||||
status=True,
|
||||
status_choices=RELEASE_STATE_CHOICES,
|
||||
classes=['text-capitalize'])
|
||||
committed_state = tables.Column('committed_state',
|
||||
verbose_name=_('Committed State'),
|
||||
status=True,
|
||||
status_choices=COMMITTED_STATE_CHOICES)
|
||||
summary = tables.Column('summary',
|
||||
verbose_name=_('Summary'))
|
||||
|
||||
def get_object_id(self, obj):
|
||||
return obj.release_id
|
||||
|
||||
def get_object_display(self, obj):
|
||||
return obj.release_id
|
||||
|
||||
class Meta(object):
|
||||
name = "releases"
|
||||
multi_select = True
|
||||
row_class = UpdateReleaseRow
|
||||
status_columns = ['state']
|
||||
row_actions = (ApplyRelease, RemoveRelease, DeleteRelease)
|
||||
table_actions = (
|
||||
ReleaseFilterAction, UploadRelease, ApplyRelease, RemoveRelease,
|
||||
DeleteRelease)
|
||||
verbose_name = _("Releases")
|
||||
hidden_title = False
|
||||
|
||||
class UploadPatch(tables.LinkAction):
|
||||
name = "patchupload"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2013-2018 Wind River Systems, Inc.
|
||||
# Copyright (c) 2013-2024 Wind River Systems, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
@ -18,14 +18,14 @@ from starlingx_dashboard.dashboards.admin.software_management import \
|
|||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class PatchesTab(tabs.TableTab):
|
||||
class ReleasesTab(tabs.TableTab):
|
||||
table_classes = (toplevel_tables.PatchesTable,)
|
||||
name = _("Patches")
|
||||
slug = "patches"
|
||||
template_name = ("admin/software_management/_patches.html")
|
||||
name = _("Releases")
|
||||
slug = "releases"
|
||||
template_name = "admin/software_management/_releases.html"
|
||||
|
||||
def get_context_data(self, request):
|
||||
context = super(PatchesTab, self).get_context_data(request)
|
||||
context = super(ReleasesTab, self).get_context_data(request)
|
||||
|
||||
phosts = []
|
||||
try:
|
||||
|
@ -39,16 +39,16 @@ class PatchesTab(tabs.TableTab):
|
|||
|
||||
return context
|
||||
|
||||
def get_patches_data(self):
|
||||
def get_releases_data(self):
|
||||
request = self.request
|
||||
patches = []
|
||||
releases = []
|
||||
try:
|
||||
patches = stx_api.patch.get_patches(request)
|
||||
releases = stx_api.patch.get_patches(request)
|
||||
except Exception:
|
||||
exceptions.handle(self.request,
|
||||
_('Unable to retrieve patch list.'))
|
||||
_('Unable to retrieve release list.'))
|
||||
|
||||
return patches
|
||||
return releases
|
||||
|
||||
|
||||
class PatchOrchestrationTab(tabs.TableTab):
|
||||
|
@ -137,5 +137,5 @@ class UpgradeOrchestrationTab(tabs.TableTab):
|
|||
|
||||
class SoftwareManagementTabs(tabs.TabGroup):
|
||||
slug = "software_management_tabs"
|
||||
tabs = (PatchesTab, PatchOrchestrationTab, UpgradeOrchestrationTab)
|
||||
tabs = (ReleasesTab, PatchOrchestrationTab, UpgradeOrchestrationTab)
|
||||
sticky = True
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
{% load i18n sizeformat %}
|
||||
|
||||
{% block main %}
|
||||
<div id="patches">
|
||||
<div id="patching-status" class="info details">
|
||||
<span>
|
||||
{% if patch_current %}
|
||||
<span class="badge badge-success">{% trans "System is Patch Current" %}</span>
|
||||
{% else %}
|
||||
<span class="badge badge-warning">{% trans "System is Not Patch Current" %}</span>
|
||||
{% endif %}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
{{ patches_table.render }}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
|
||||
{% load i18n sizeformat %}
|
||||
|
||||
{% block main %}
|
||||
<div id="patches">
|
||||
<div id="patching-status" class="info details">
|
||||
<span>
|
||||
{% if patch_current %}
|
||||
<span class="badge badge-success">{% trans "System is Patch Current" %}</span>
|
||||
{% else %}
|
||||
<span class="badge badge-warning">{% trans "System is Not Patch Current" %}</span>
|
||||
{% endif %}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
{{ patches_table.render }}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
|
|
@ -21,7 +21,7 @@ class PatchesTab(tabs.TableTab):
|
|||
table_classes = (tables.PatchesTable,)
|
||||
name = _("Patches")
|
||||
slug = "patches"
|
||||
template_name = ("dc_admin/dc_software_management/_patches.html")
|
||||
template_name = ("dc_admin/dc_software_management/_releases.html")
|
||||
preload = False
|
||||
|
||||
def get_dc_patches_data(self):
|
||||
|
|
Loading…
Reference in New Issue