Merge "Add support for API version 2.34"

This commit is contained in:
Zuul 2020-04-15 16:26:48 +00:00 committed by Gerrit Code Review
commit 5a2506e5d9
9 changed files with 114 additions and 24 deletions

View File

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

View File

@ -20,8 +20,15 @@
<dt>{% trans "Source share group snapshot" %}</dt>
<dd>{{ share_group.source_share_group_snapshot_id}}</dd>
{% endif %}
<dt>{% trans "Share Group Type" %}</dt>
<dd>{{ share_group.share_group_type_id}}</dd>
<dt>{% trans "Capabilities" %}</dt>
<dd>
{% if share_group.consistent_snapshot_support %}
Consistent snapshots are supported at storage <b>
{{ share_group.consistent_snapshot_support }} </b> level
{% else %}
None
{% endif %}
</dd>
{% if share_group.availability_zone %}
<dt>{% trans "Availability Zone" %}</dt>
<dd>{{ share_group.availability_zone }}</dd>
@ -36,14 +43,40 @@
{% url 'horizon:admin:share_servers:share_server_detail' share_group.share_server_id as share_server_url%}
<dd><a href="{{ share_server_url }}">{{ share_group.share_server_id }}</a></dd>
{% endif %}
{% if share_group.share_group_type %}
<dt>{% trans "Share Group Type" %}</dt>
{% url 'horizon:admin:share_group_types:index' as sgts_url %}
<dd>
<div>
<b>{% trans "Share Group Type Name:" %}</b>
{{ share_group.share_group_type.name }}
</div>
<div>
{% trans "Share Group Type ID:" %}
<a href="{{ sgts_url}}">{{ share_group.share_group_type.id }}</a>
</div>
<div>
{% trans "Share Group Type Specs:" %}
{{ share_group.share_group_type.group_specs }}
</div><p></p>
</dd>
{% endif %}
{% if share_group.share_types %}
<dt>{% trans "Share Types" %}</dt>
{% for st in share_group.share_types %}
<dd><p>
<div><b>Share Type Name:</b> {{ st.name }}</div>
<div><b>Share Type Visibility:</b> {% if st.is_public %}Public{% else %}Private{% endif %}</div>
<div><b>Network handling enabled:</b> {{ st.dhss }}</div>
</p></dd>
<dd>
<div>
<b>{% trans "Share Type Name:" %}</b>
{{ st.name }}
</div>
<div>
{% trans " Share Type Visibility:" %}
{% if st.is_public %}Public{% else %}Private{% endif %}
</div>
<div>
{% trans "Network handling enabled:" %} {{ st.dhss }}
</div>
</dd><p></p>
{% endfor %}
{% endif %}
{% if share_group.members %}

View File

@ -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,

View File

@ -19,8 +19,14 @@
{% url 'horizon:project:share_group_snapshots:detail' share_group.source_share_group_snapshot_id as ssgs_url%}
<dd><a href="{{ ssgs_url }}">{{ share_group.source_share_group_snapshot_id }}</a></dd>
{% endif %}
<dt>{% trans "Share Group Type" %}</dt>
<dd>{{ share_group.share_group_type_id}}</dd>
<dt>{% trans "Capabilities" %}</dt>
<dd>
{% if share_group.consistent_snapshot_support %}
Consistent snapshots are supported
{% else %}
None
{% endif %}
</dd>
{% if share_group.availability_zone %}
<dt>{% trans "Availability Zone" %}</dt>
<dd>{{ share_group.availability_zone }}</dd>
@ -30,14 +36,40 @@
{% url 'horizon:project:share_networks:share_network_detail' share_group.share_network_id as sn_url%}
<dd><a href="{{ sn_url }}">{{ share_group.share_network_id }}</a></dd>
{% endif %}
{% if share_group.share_group_type %}
<dt>{% trans "Share Group Type" %}</dt>
<dd>
<div>
<b>{% trans "Share Group Type Name:" %}</b>
{{ share_group.share_group_type.name }}
</div>
<div>
{% trans "Share Group Type ID:" %}
{{ share_group.share_group_type.id }}
</div>
<div>
{% trans "Share Group Type Specs:" %}
{{ share_group.share_group_type.group_specs }}
</div><p></p>
</dd>
{% endif %}
{% if share_group.share_types %}
<dt>{% trans "Share Types" %}</dt>
{% for st in share_group.share_types %}
<dd><p>
<div><b>Share Type Name:</b> {{ st.name }}</div>
<div><b>Share Type Visibility:</b> {% if st.is_public %}Public{% else %}Private{% endif %}</div>
<div><b>Network handling enabled:</b> {{ st.dhss }}</div>
</p></dd>
<dd>
<div>
<b>{% trans "Share Type Name:" %}</b>
{{ st.name }}
</div>
<div>
{% trans "Share Type Visibility:" %}
{% if st.is_public %}Public{% else %}Private{% endif %}
</div>
<div>
{% trans "Network handling enabled:" %}
{{ st.dhss }}
</div>
</dd><p></p>
{% endfor %}
{% endif %}
{% if share_group.members %}

View File

@ -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,

View File

@ -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, '<dt>Capabilities</dt>')
self.assertContains(res, capability_msg) if capability_msg else None
self.assertContains(res, "<b>Share Group Type Name:</b>")
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(

View File

@ -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, '<dt>Capabilities</dt>')
self.assertContains(res, capability_msg) if capability_msg else None
self.assertContains(res, "<b>Share Group Type Name:</b>")
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(

View File

@ -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'}
)

View File

@ -0,0 +1,5 @@
---
features:
- |
The share groups dashboards now show the share group availability zone,
share group type details and share group capabilities.