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 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/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