From c94ddec5c6897dd91aef8c8b98fb5f32c7a570d0 Mon Sep 17 00:00:00 2001
From: Goutham Pacha Ravi
Date: Mon, 6 Apr 2020 14:51:05 -0700
Subject: [PATCH] Add support for API version 2.34
Address a TODO in the code to support missing share
group fields/details:
- Show share group capabilities (currently only
"consistent_snapshot_support") in the share group
details tab. For consistent snapshot support,
Admins can also see whether this capability applies
at the "pool" or "host" level.
- Show share group type details in the share group
details tab, and link to share group types within
the admin dashboard
- Make cosmetic changes to the share types listing
to allow readability.
Partial-Bug: #1823078
Change-Id: Ic786c8f783390e87025815df04d7ec4a8853bf3e
---
manila_ui/api/manila.py | 4 +-
.../templates/share_groups/_detail.html | 47 ++++++++++++++++---
.../dashboards/admin/share_groups/views.py | 2 +
.../templates/share_groups/_detail.html | 46 +++++++++++++++---
.../dashboards/project/share_groups/views.py | 2 +
.../dashboards/admin/share_groups/tests.py | 15 ++++--
.../dashboards/project/share_groups/tests.py | 15 ++++--
.../tests/dashboards/project/test_data.py | 2 +-
...-share-groups-fields-f447cd6563e377c1.yaml | 5 ++
9 files changed, 114 insertions(+), 24 deletions(-)
create mode 100644 releasenotes/notes/add-support-for-microversion-2-34-share-groups-fields-f447cd6563e377c1.yaml
diff --git a/manila_ui/api/manila.py b/manila_ui/api/manila.py
index d88c7301..cef2e1d6 100644
--- a/manila_ui/api/manila.py
+++ b/manila_ui/api/manila.py
@@ -29,9 +29,7 @@ from manilaclient import client as manila_client
LOG = logging.getLogger(__name__)
MANILA_UI_USER_AGENT_REPR = "manila_ui_plugin_for_horizon"
-# NOTE(vponomaryov): update version to 2.34 when manilaclient is released with
-# its support. It will allow to show 'availability zones' for share groups.
-MANILA_VERSION = "2.33" # requires manilaclient 1.16.0 or newer
+MANILA_VERSION = "2.34"
MANILA_SERVICE_TYPE = "sharev2"
# API static values
diff --git a/manila_ui/dashboards/admin/share_groups/templates/share_groups/_detail.html b/manila_ui/dashboards/admin/share_groups/templates/share_groups/_detail.html
index 008dbafe..8157d3d9 100644
--- a/manila_ui/dashboards/admin/share_groups/templates/share_groups/_detail.html
+++ b/manila_ui/dashboards/admin/share_groups/templates/share_groups/_detail.html
@@ -20,8 +20,15 @@
{% trans "Source share group snapshot" %}
{{ share_group.source_share_group_snapshot_id}}
{% endif %}
- {% trans "Share Group Type" %}
- {{ share_group.share_group_type_id}}
+ {% trans "Capabilities" %}
+
+ {% if share_group.consistent_snapshot_support %}
+ Consistent snapshots are supported at storage
+ {{ share_group.consistent_snapshot_support }} level
+ {% else %}
+ None
+ {% endif %}
+
{% if share_group.availability_zone %}
{% trans "Availability Zone" %}
{{ share_group.availability_zone }}
@@ -36,14 +43,40 @@
{% url 'horizon:admin:share_servers:share_server_detail' share_group.share_server_id as share_server_url%}
{{ share_group.share_server_id }}
{% endif %}
+ {% if share_group.share_group_type %}
+ {% trans "Share Group Type" %}
+ {% url 'horizon:admin:share_group_types:index' as sgts_url %}
+
+
+ {% trans "Share Group Type Name:" %}
+ {{ share_group.share_group_type.name }}
+
+
+
+ {% trans "Share Group Type Specs:" %}
+ {{ share_group.share_group_type.group_specs }}
+
+
+ {% endif %}
{% if share_group.share_types %}
{% trans "Share Types" %}
{% for st in share_group.share_types %}
-
-
Share Type Name: {{ st.name }}
- Share Type Visibility: {% if st.is_public %}Public{% else %}Private{% endif %}
- Network handling enabled: {{ st.dhss }}
-
+
+
+ {% trans "Share Type Name:" %}
+ {{ st.name }}
+
+
+ {% trans " Share Type Visibility:" %}
+ {% if st.is_public %}Public{% else %}Private{% endif %}
+
+
+ {% trans "Network handling enabled:" %} {{ st.dhss }}
+
+
{% endfor %}
{% endif %}
{% if share_group.members %}
diff --git a/manila_ui/dashboards/admin/share_groups/views.py b/manila_ui/dashboards/admin/share_groups/views.py
index 13c3b3aa..48fe0309 100644
--- a/manila_ui/dashboards/admin/share_groups/views.py
+++ b/manila_ui/dashboards/admin/share_groups/views.py
@@ -71,6 +71,8 @@ class ShareGroupDetailView(tabs.TabView):
members = manila.share_list(
self.request, search_opts={"share_group_id": share_group_id})
share_group.members = members
+ share_group.share_group_type = manila.share_group_type_get(
+ self.request, share_group.share_group_type_id)
share_types = manila.share_type_list(self.request)
share_group.share_types = [
{"id": st.id,
diff --git a/manila_ui/dashboards/project/share_groups/templates/share_groups/_detail.html b/manila_ui/dashboards/project/share_groups/templates/share_groups/_detail.html
index 69df06c4..8ea5bc1d 100644
--- a/manila_ui/dashboards/project/share_groups/templates/share_groups/_detail.html
+++ b/manila_ui/dashboards/project/share_groups/templates/share_groups/_detail.html
@@ -19,8 +19,14 @@
{% url 'horizon:project:share_group_snapshots:detail' share_group.source_share_group_snapshot_id as ssgs_url%}
{{ share_group.source_share_group_snapshot_id }}
{% endif %}
- {% trans "Share Group Type" %}
- {{ share_group.share_group_type_id}}
+ {% trans "Capabilities" %}
+
+ {% if share_group.consistent_snapshot_support %}
+ Consistent snapshots are supported
+ {% else %}
+ None
+ {% endif %}
+
{% if share_group.availability_zone %}
{% trans "Availability Zone" %}
{{ share_group.availability_zone }}
@@ -30,14 +36,40 @@
{% url 'horizon:project:share_networks:share_network_detail' share_group.share_network_id as sn_url%}
{{ share_group.share_network_id }}
{% endif %}
+ {% if share_group.share_group_type %}
+ {% trans "Share Group Type" %}
+
+
+ {% trans "Share Group Type Name:" %}
+ {{ share_group.share_group_type.name }}
+
+
+ {% trans "Share Group Type ID:" %}
+ {{ share_group.share_group_type.id }}
+
+
+ {% trans "Share Group Type Specs:" %}
+ {{ share_group.share_group_type.group_specs }}
+
+
+ {% endif %}
{% if share_group.share_types %}
{% trans "Share Types" %}
{% for st in share_group.share_types %}
-
-
Share Type Name: {{ st.name }}
- Share Type Visibility: {% if st.is_public %}Public{% else %}Private{% endif %}
- Network handling enabled: {{ st.dhss }}
-
+
+
+ {% trans "Share Type Name:" %}
+ {{ st.name }}
+
+
+ {% trans "Share Type Visibility:" %}
+ {% if st.is_public %}Public{% else %}Private{% endif %}
+
+
+ {% trans "Network handling enabled:" %}
+ {{ st.dhss }}
+
+
{% endfor %}
{% endif %}
{% if share_group.members %}
diff --git a/manila_ui/dashboards/project/share_groups/views.py b/manila_ui/dashboards/project/share_groups/views.py
index d12dcb3e..690fdb80 100644
--- a/manila_ui/dashboards/project/share_groups/views.py
+++ b/manila_ui/dashboards/project/share_groups/views.py
@@ -72,6 +72,8 @@ class ShareGroupDetailView(tabs.TabView):
self.request, search_opts={"share_group_id": share_group_id})
share_group.members = members
share_types = manila.share_type_list(self.request)
+ share_group.share_group_type = manila.share_group_type_get(
+ self.request, share_group.share_group_type_id)
share_group.share_types = [
{"id": st.id,
"name": st.name,
diff --git a/manila_ui/tests/dashboards/admin/share_groups/tests.py b/manila_ui/tests/dashboards/admin/share_groups/tests.py
index a89749c8..0cae334c 100644
--- a/manila_ui/tests/dashboards/admin/share_groups/tests.py
+++ b/manila_ui/tests/dashboards/admin/share_groups/tests.py
@@ -93,18 +93,27 @@ class ShareGroupTests(test.BaseAdminViewTests):
def test_share_group_detailed_page_get(self, sg):
url = reverse('horizon:admin:share_groups:detail', args=[sg.id])
shares = [test_data.share, test_data.nameless_share]
+ share_types = [test_data.share_type, test_data.share_type_dhss_true]
+ capability_msg = ("Consistent snapshots are supported at storage "
+ if sg.consistent_snapshot_support else None)
self.mock_object(
api_manila, 'share_group_get', mock.Mock(return_value=sg))
self.mock_object(
api_manila, 'share_list', mock.Mock(return_value=shares))
- self.mock_object(
- api_manila, 'share_type_list', mock.Mock(return_value=[
- test_data.share_type, test_data.share_type_dhss_true]))
+ self.mock_object(api_manila, 'share_group_type_get',
+ mock.Mock(return_value=test_data.share_group_type))
+ self.mock_object(api_manila, 'share_type_list',
+ mock.Mock(return_value=share_types))
res = self.client.get(url)
self.assertTemplateUsed(res, 'admin/share_groups/detail.html')
self.assertStatusCode(res, 200)
+ self.assertContains(res, 'Capabilities')
+ self.assertContains(res, capability_msg) if capability_msg else None
+ self.assertContains(res, "Share Group Type Name:")
+ self.assertContains(res, "Share Group Type ID:")
+ self.assertContains(res, "Share Group Type Specs:")
for share in shares:
data = {'id': share.id, 'name': share.name or share.id}
self.assertContains(
diff --git a/manila_ui/tests/dashboards/project/share_groups/tests.py b/manila_ui/tests/dashboards/project/share_groups/tests.py
index 01e0686e..6c49e9e7 100644
--- a/manila_ui/tests/dashboards/project/share_groups/tests.py
+++ b/manila_ui/tests/dashboards/project/share_groups/tests.py
@@ -85,18 +85,27 @@ class ShareGroupTests(test.TestCase):
def test_share_group_detailed_page_get(self, sg):
url = reverse('horizon:project:share_groups:detail', args=[sg.id])
shares = [test_data.share, test_data.nameless_share]
+ share_types = [test_data.share_type, test_data.share_type_dhss_true]
+ capability_msg = ("Consistent snapshots are supported"
+ if sg.consistent_snapshot_support else None)
self.mock_object(
api_manila, 'share_group_get', mock.Mock(return_value=sg))
self.mock_object(
api_manila, 'share_list', mock.Mock(return_value=shares))
- self.mock_object(
- api_manila, 'share_type_list', mock.Mock(return_value=[
- test_data.share_type, test_data.share_type_dhss_true]))
+ self.mock_object(api_manila, 'share_group_type_get',
+ mock.Mock(return_value=test_data.share_group_type))
+ self.mock_object(api_manila, 'share_type_list',
+ mock.Mock(return_value=share_types))
res = self.client.get(url)
self.assertTemplateUsed(res, 'project/share_groups/detail.html')
self.assertStatusCode(res, 200)
+ self.assertContains(res, 'Capabilities')
+ self.assertContains(res, capability_msg) if capability_msg else None
+ self.assertContains(res, "Share Group Type Name:")
+ self.assertContains(res, "Share Group Type ID:")
+ self.assertContains(res, "Share Group Type Specs:")
for share in shares:
data = {'id': share.id, 'name': share.name or share.id}
self.assertContains(
diff --git a/manila_ui/tests/dashboards/project/test_data.py b/manila_ui/tests/dashboards/project/test_data.py
index a12c6a58..2b7a52db 100644
--- a/manila_ui/tests/dashboards/project/test_data.py
+++ b/manila_ui/tests/dashboards/project/test_data.py
@@ -438,7 +438,7 @@ share_group_dhss_true = share_groups.ShareGroup(
'share_server_id': 'fake_share_server_id',
'availability_zone': None,
'host': 'fake_host_987654321',
- 'consistent_snapshot_support': None,
+ 'consistent_snapshot_support': 'pool',
'created_at': '2017-05-31T23:59:59.000000',
'project_id': 'fake_project_id_987654321'}
)
diff --git a/releasenotes/notes/add-support-for-microversion-2-34-share-groups-fields-f447cd6563e377c1.yaml b/releasenotes/notes/add-support-for-microversion-2-34-share-groups-fields-f447cd6563e377c1.yaml
new file mode 100644
index 00000000..f724cdcb
--- /dev/null
+++ b/releasenotes/notes/add-support-for-microversion-2-34-share-groups-fields-f447cd6563e377c1.yaml
@@ -0,0 +1,5 @@
+---
+features:
+ - |
+ The share groups dashboards now show the share group availability zone,
+ share group type details and share group capabilities.
\ No newline at end of file