diff --git a/openstack_dashboard/dashboards/admin/snapshots/tables.py b/openstack_dashboard/dashboards/admin/snapshots/tables.py index 5ba0f6645d..61be0c1fa7 100644 --- a/openstack_dashboard/dashboards/admin/snapshots/tables.py +++ b/openstack_dashboard/dashboards/admin/snapshots/tables.py @@ -63,6 +63,10 @@ class VolumeSnapshotsTable(volumes_tables.VolumesTableBase): link="horizon:admin:volumes:detail") host = tables.Column("host_name", verbose_name=_("Host")) tenant = tables.Column("tenant_name", verbose_name=_("Project")) + group_snapshot = snapshots_tables.GroupSnapshotNameColumn( + "name", + verbose_name=_("Group Snapshot"), + link="horizon:admin:vg_snapshots:detail") class Meta(object): name = "volume_snapshots" @@ -77,7 +81,7 @@ class VolumeSnapshotsTable(volumes_tables.VolumesTableBase): row_class = UpdateRow status_columns = ("status",) columns = ('tenant', 'host', 'name', 'description', 'size', 'status', - 'volume_name',) + 'group_snapshot', 'volume_name',) class VolumeDetailsSnapshotsTable(VolumeSnapshotsTable): diff --git a/openstack_dashboard/dashboards/admin/snapshots/views.py b/openstack_dashboard/dashboards/admin/snapshots/views.py index cdf5c8381a..9e4086a28e 100644 --- a/openstack_dashboard/dashboards/admin/snapshots/views.py +++ b/openstack_dashboard/dashboards/admin/snapshots/views.py @@ -37,6 +37,7 @@ class SnapshotsView(tables.PagedTableMixin, tables.DataTableView): page_title = _("Volume Snapshots") def get_data(self): + needs_gs = False if cinder.is_volume_service_enabled(self.request): try: marker, sort_dir = self._get_marker() @@ -54,6 +55,18 @@ class SnapshotsView(tables.PagedTableMixin, tables.DataTableView): exceptions.handle(self.request, _("Unable to retrieve " "volume snapshots.")) + needs_gs = any(getattr(snapshot, 'group_snapshot_id', None) + for snapshot in snapshots) + if needs_gs: + try: + group_snapshots = cinder.group_snapshot_list( + self.request, search_opts={'all_tenants': True}) + group_snapshots = dict((gs.id, gs) for gs + in group_snapshots) + except Exception: + group_snapshots = {} + exceptions.handle(self.request, + _("Unable to retrieve group snapshots.")) # Gather our tenants to correlate against volume IDs try: tenants, has_more = keystone.tenant_list(self.request) @@ -66,6 +79,12 @@ class SnapshotsView(tables.PagedTableMixin, tables.DataTableView): tenant_dict = dict((t.id, t) for t in tenants) for snapshot in snapshots: volume = volumes.get(snapshot.volume_id) + if needs_gs: + group_snapshot = group_snapshots.get( + snapshot.group_snapshot_id) + snapshot.group_snapshot = group_snapshot + else: + snapshot.group_snapshot = None tenant_id = snapshot.project_id tenant = tenant_dict.get(tenant_id, None) snapshot._volume = volume diff --git a/openstack_dashboard/dashboards/admin/volumes/tables.py b/openstack_dashboard/dashboards/admin/volumes/tables.py index a06740c0ed..5f8804c0fc 100644 --- a/openstack_dashboard/dashboards/admin/volumes/tables.py +++ b/openstack_dashboard/dashboards/admin/volumes/tables.py @@ -105,6 +105,10 @@ class VolumesTable(volumes_tables.VolumesTable): host = tables.Column("os-vol-host-attr:host", verbose_name=_("Host")) tenant = tables.Column(lambda obj: getattr(obj, 'tenant_name', None), verbose_name=_("Project")) + group = volumes_tables.GroupNameColumn( + "name", + verbose_name=_("Group"), + link="horizon:admin:volume_groups:detail") class Meta(object): name = "volumes" @@ -119,5 +123,5 @@ class VolumesTable(volumes_tables.VolumesTable): UnmanageVolumeAction, MigrateVolume, volumes_tables.UpdateMetadata) - columns = ('tenant', 'host', 'name', 'size', 'status', 'volume_type', - 'attachments', 'bootable', 'encryption',) + columns = ('tenant', 'host', 'name', 'size', 'status', 'group', + 'volume_type', 'attachments', 'bootable', 'encryption',) diff --git a/openstack_dashboard/dashboards/admin/volumes/tabs.py b/openstack_dashboard/dashboards/admin/volumes/tabs.py index b4bddd1328..7535dbd615 100644 --- a/openstack_dashboard/dashboards/admin/volumes/tabs.py +++ b/openstack_dashboard/dashboards/admin/volumes/tabs.py @@ -15,10 +15,13 @@ from openstack_dashboard.dashboards.project.volumes import tabs as project_tabs class OverviewTab(project_tabs.OverviewTab): + template_name = ("admin/volumes/_detail_overview.html") def get_context_data(self, request): + volume = self.tab_group.kwargs['volume'] return { - 'volume': self.tab_group.kwargs['volume'], + 'volume': volume, + 'group': volume.group, 'detail_url': { 'instance': 'horizon:admin:instances:detail', 'image': 'horizon:admin:images:detail', diff --git a/openstack_dashboard/dashboards/admin/volumes/templates/volumes/_detail_overview.html b/openstack_dashboard/dashboards/admin/volumes/templates/volumes/_detail_overview.html new file mode 100644 index 0000000000..d8e4155d04 --- /dev/null +++ b/openstack_dashboard/dashboards/admin/volumes/templates/volumes/_detail_overview.html @@ -0,0 +1,126 @@ +{% load i18n sizeformat parse_date %} + +