Add Service Configuration panel and test Role parameter data
Adds the service configuration panel, with a placeholder index view so that others can grow it into something truly beauteous. Also adds sample role parameter data. Change-Id: I77ddc3688d256d68b19ba69e12867cc9861bf82c
This commit is contained in:
parent
651158dfea
commit
aa23f55ece
@ -148,7 +148,8 @@ class OvercloudPlan(base.APIDictWrapper):
|
|||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def role_list(self):
|
def role_list(self):
|
||||||
return [OvercloudRole(role) for role in self.roles]
|
return [OvercloudRole.get(self._request, role['id'])
|
||||||
|
for role in self.roles]
|
||||||
|
|
||||||
def parameter(self, param_name):
|
def parameter(self, param_name):
|
||||||
for parameter in self.parameters:
|
for parameter in self.parameters:
|
||||||
@ -162,7 +163,8 @@ class OvercloudPlan(base.APIDictWrapper):
|
|||||||
|
|
||||||
|
|
||||||
class OvercloudRole(base.APIDictWrapper):
|
class OvercloudRole(base.APIDictWrapper):
|
||||||
_attrs = ('id', 'name', 'version', 'description', 'created_at')
|
_attrs = ('id', 'name', 'version', 'description', 'created_at',
|
||||||
|
'parameters')
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@handle_errors(_("Unable to retrieve overcloud roles"), [])
|
@handle_errors(_("Unable to retrieve overcloud roles"), [])
|
||||||
|
@ -22,6 +22,7 @@ class BasePanels(horizon.PanelGroup):
|
|||||||
panels = (
|
panels = (
|
||||||
'overcloud',
|
'overcloud',
|
||||||
'plans',
|
'plans',
|
||||||
|
'parameters',
|
||||||
'nodes',
|
'nodes',
|
||||||
'flavors',
|
'flavors',
|
||||||
'history',
|
'history',
|
||||||
|
0
tuskar_ui/infrastructure/parameters/__init__.py
Normal file
0
tuskar_ui/infrastructure/parameters/__init__.py
Normal file
27
tuskar_ui/infrastructure/parameters/panel.py
Normal file
27
tuskar_ui/infrastructure/parameters/panel.py
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
# -*- coding: utf8 -*-
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
|
import horizon
|
||||||
|
|
||||||
|
from tuskar_ui.infrastructure import dashboard
|
||||||
|
|
||||||
|
|
||||||
|
class Parameters(horizon.Panel):
|
||||||
|
name = _("Service Configuration")
|
||||||
|
slug = "parameters"
|
||||||
|
|
||||||
|
|
||||||
|
dashboard.Infrastructure.register(Parameters)
|
@ -0,0 +1,23 @@
|
|||||||
|
{% extends 'infrastructure/base.html' %}
|
||||||
|
{% load i18n %}
|
||||||
|
{% load url from future %}
|
||||||
|
{% block title %}{% trans 'Service Configuration' %}{% endblock %}
|
||||||
|
|
||||||
|
{% block page_header %}
|
||||||
|
{% include 'horizon/common/_page_header.html' with title=title %}
|
||||||
|
{% endblock page_header %}
|
||||||
|
|
||||||
|
{% block main %}
|
||||||
|
<div class="row-fluid">
|
||||||
|
<div class="span12">
|
||||||
|
{% for role in roles %}
|
||||||
|
{{ role.name }}
|
||||||
|
<ul>
|
||||||
|
{% for p in role.parameters %}
|
||||||
|
<li>{{ p.name }}</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
31
tuskar_ui/infrastructure/parameters/tests.py
Normal file
31
tuskar_ui/infrastructure/parameters/tests.py
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
# -*- coding: utf8 -*-
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
from django.core import urlresolvers
|
||||||
|
|
||||||
|
from mock import patch, call # noqa
|
||||||
|
|
||||||
|
from tuskar_ui.test import helpers as test
|
||||||
|
|
||||||
|
|
||||||
|
INDEX_URL = urlresolvers.reverse(
|
||||||
|
'horizon:infrastructure:parameters:index')
|
||||||
|
|
||||||
|
|
||||||
|
class ParametersTest(test.BaseAdminViewTests):
|
||||||
|
|
||||||
|
def test_index(self):
|
||||||
|
res = self.client.get(INDEX_URL)
|
||||||
|
|
||||||
|
self.assertTemplateUsed(res, 'infrastructure/parameters/index.html')
|
23
tuskar_ui/infrastructure/parameters/urls.py
Normal file
23
tuskar_ui/infrastructure/parameters/urls.py
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# -*- coding: utf8 -*-
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
from django.conf import urls
|
||||||
|
|
||||||
|
from tuskar_ui.infrastructure.parameters import views
|
||||||
|
|
||||||
|
|
||||||
|
urlpatterns = urls.patterns(
|
||||||
|
'',
|
||||||
|
urls.url(r'^$', views.IndexView.as_view(), name='index'),
|
||||||
|
)
|
27
tuskar_ui/infrastructure/parameters/views.py
Normal file
27
tuskar_ui/infrastructure/parameters/views.py
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
# -*- coding: utf8 -*-
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
from horizon import views as horizon_views
|
||||||
|
|
||||||
|
from tuskar_ui import api
|
||||||
|
|
||||||
|
|
||||||
|
class IndexView(horizon_views.APIView):
|
||||||
|
template_name = 'infrastructure/parameters/index.html'
|
||||||
|
|
||||||
|
def get_data(self, request, context, *args, **kwargs):
|
||||||
|
plan = api.tuskar.OvercloudPlan.get_the_plan(self.request)
|
||||||
|
context['plan'] = plan
|
||||||
|
context['roles'] = plan.role_list
|
||||||
|
return context
|
@ -44,7 +44,6 @@ class TuskarAPITests(test.APITestCase):
|
|||||||
plan = api.tuskar.OvercloudPlan(self.tuskarclient_plans.first())
|
plan = api.tuskar.OvercloudPlan(self.tuskarclient_plans.first())
|
||||||
|
|
||||||
ret_val = plan.role_list
|
ret_val = plan.role_list
|
||||||
|
|
||||||
self.assertEqual(4, len(ret_val))
|
self.assertEqual(4, len(ret_val))
|
||||||
for r in ret_val:
|
for r in ret_val:
|
||||||
self.assertIsInstance(r, api.tuskar.OvercloudRole)
|
self.assertIsInstance(r, api.tuskar.OvercloudRole)
|
||||||
@ -54,7 +53,7 @@ class TuskarAPITests(test.APITestCase):
|
|||||||
|
|
||||||
for r in ret_val:
|
for r in ret_val:
|
||||||
self.assertIsInstance(r, api.tuskar.OvercloudRole)
|
self.assertIsInstance(r, api.tuskar.OvercloudRole)
|
||||||
self.assertEqual(5, len(ret_val))
|
self.assertEqual(4, len(ret_val))
|
||||||
|
|
||||||
def test_role_get(self):
|
def test_role_get(self):
|
||||||
role = self.tuskarclient_roles.first()
|
role = self.tuskarclient_roles.first()
|
||||||
|
@ -36,9 +36,9 @@ def data(TEST):
|
|||||||
'name': 'Object Storage',
|
'name': 'Object Storage',
|
||||||
'version': 1,
|
'version': 1,
|
||||||
}, {
|
}, {
|
||||||
'id': 'role-5',
|
'id': 'role-4',
|
||||||
'name': 'Block Storage',
|
'name': 'Block Storage',
|
||||||
'version': 2,
|
'version': 1,
|
||||||
}],
|
}],
|
||||||
'parameters': [{
|
'parameters': [{
|
||||||
'name': 'AdminPassword',
|
'name': 'AdminPassword',
|
||||||
@ -58,6 +58,21 @@ def data(TEST):
|
|||||||
'version': 1,
|
'version': 1,
|
||||||
'description': 'controller role',
|
'description': 'controller role',
|
||||||
'created_at': '2014-05-27T21:11:09Z',
|
'created_at': '2014-05-27T21:11:09Z',
|
||||||
|
'parameters': [{
|
||||||
|
'name': 'controller_NovaInterfaces',
|
||||||
|
'parameter_group': 'Nova',
|
||||||
|
'type': 'String',
|
||||||
|
'description': '',
|
||||||
|
'no_echo': 'false',
|
||||||
|
'default': 'eth0',
|
||||||
|
}, {
|
||||||
|
'name': 'controller_NeutronInterfaces',
|
||||||
|
'parameter_group': 'Neutron',
|
||||||
|
'type': 'String',
|
||||||
|
'description': '',
|
||||||
|
'no_echo': 'false',
|
||||||
|
'default': 'eth0',
|
||||||
|
}]
|
||||||
}
|
}
|
||||||
r_2 = {
|
r_2 = {
|
||||||
'id': 'role-2',
|
'id': 'role-2',
|
||||||
@ -65,6 +80,14 @@ def data(TEST):
|
|||||||
'version': 1,
|
'version': 1,
|
||||||
'description': 'compute role',
|
'description': 'compute role',
|
||||||
'created_at': '2014-05-27T21:11:09Z',
|
'created_at': '2014-05-27T21:11:09Z',
|
||||||
|
'parameters': [{
|
||||||
|
'name': 'compute_KeystoneHost',
|
||||||
|
'parameter_group': 'Keystone',
|
||||||
|
'type': 'String',
|
||||||
|
'description': '',
|
||||||
|
'no_echo': 'false',
|
||||||
|
'default': '',
|
||||||
|
}]
|
||||||
}
|
}
|
||||||
r_3 = {
|
r_3 = {
|
||||||
'id': 'role-3',
|
'id': 'role-3',
|
||||||
@ -72,6 +95,14 @@ def data(TEST):
|
|||||||
'version': 1,
|
'version': 1,
|
||||||
'description': 'object storage role',
|
'description': 'object storage role',
|
||||||
'created_at': '2014-05-27T21:11:09Z',
|
'created_at': '2014-05-27T21:11:09Z',
|
||||||
|
'parameters': [{
|
||||||
|
'name': 'object_storage_SwiftHashSuffix',
|
||||||
|
'parameter_group': 'Swift',
|
||||||
|
'type': 'String',
|
||||||
|
'description': '',
|
||||||
|
'no_echo': 'true',
|
||||||
|
'default': '',
|
||||||
|
}]
|
||||||
}
|
}
|
||||||
r_4 = {
|
r_4 = {
|
||||||
'id': 'role-4',
|
'id': 'role-4',
|
||||||
@ -79,12 +110,13 @@ def data(TEST):
|
|||||||
'version': 1,
|
'version': 1,
|
||||||
'description': 'block storage role',
|
'description': 'block storage role',
|
||||||
'created_at': '2014-05-27T21:11:09Z',
|
'created_at': '2014-05-27T21:11:09Z',
|
||||||
|
'parameters': [{
|
||||||
|
'name': 'block_storage_NeutronNetworkType',
|
||||||
|
'parameter_group': 'Neutron',
|
||||||
|
'type': 'String',
|
||||||
|
'description': '',
|
||||||
|
'no_echo': 'false',
|
||||||
|
'default': 'gre',
|
||||||
|
}]
|
||||||
}
|
}
|
||||||
r_5 = {
|
TEST.tuskarclient_roles.add(r_1, r_2, r_3, r_4)
|
||||||
'id': 'role-5',
|
|
||||||
'name': 'Block Storage',
|
|
||||||
'version': 2,
|
|
||||||
'description': 'block storage role',
|
|
||||||
'created_at': '2014-05-28T21:11:09Z',
|
|
||||||
}
|
|
||||||
TEST.tuskarclient_roles.add(r_1, r_2, r_3, r_4, r_5)
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user