Merge "Add support for API version 2.34"
This commit is contained in:
commit
5a2506e5d9
@ -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
|
||||
|
@ -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 %}
|
||||
|
@ -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,
|
||||
|
@ -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 %}
|
||||
|
@ -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,
|
||||
|
@ -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(
|
||||
|
@ -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(
|
||||
|
@ -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'}
|
||||
)
|
||||
|
@ -0,0 +1,5 @@
|
||||
---
|
||||
features:
|
||||
- |
|
||||
The share groups dashboards now show the share group availability zone,
|
||||
share group type details and share group capabilities.
|
Loading…
Reference in New Issue
Block a user