diff --git a/tuskar_ui/api/tuskar.py b/tuskar_ui/api/tuskar.py index b41802c47..e0162c255 100644 --- a/tuskar_ui/api/tuskar.py +++ b/tuskar_ui/api/tuskar.py @@ -259,17 +259,17 @@ class Plan(base.APIResourceWrapper): role.image_id_parameter_name, role.flavor_parameter_name]) params = [p for p in params if p['name'] not in key_params] - return params + return [Parameter(p, plan=self) for p in params] def parameter(self, param_name): for parameter in self.parameters: if parameter['name'] == param_name: - return parameter + return Parameter(parameter, plan=self) def parameter_value(self, param_name, default=None): parameter = self.parameter(param_name) if parameter is not None: - return parameter['value'] + return parameter.value return default def list_generated_parameters(self, with_prefix=True): @@ -458,3 +458,27 @@ class Role(base.APIResourceWrapper): @property def id(self): return self.uuid + + +class Parameter(base.APIDictWrapper): + + _attrs = ['name', 'value', 'default', 'description', 'hidden', 'label'] + + def __init__(self, apidict, plan=None): + super(Parameter, self).__init__(apidict) + self._plan = plan + + @property + def stripped_name(self): + return strip_prefix(self.name) + + @property + def plan(self): + return self._plan + + @property + def role(self): + if self.plan: + for role in self.plan.role_list: + if self.name.startswith(role.parameter_prefix): + return role diff --git a/tuskar_ui/infrastructure/parameters/tables.py b/tuskar_ui/infrastructure/parameters/tables.py index dc1160f37..d41db819b 100644 --- a/tuskar_ui/infrastructure/parameters/tables.py +++ b/tuskar_ui/infrastructure/parameters/tables.py @@ -17,12 +17,18 @@ from horizon import tables class ParametersTable(tables.DataTable): - label = tables.Column('label', - verbose_name=_("Parameter Name")) + role = tables.Column(lambda param: + param.role.name if param.role else _('General'), + verbose_name=_("Role")) + name = tables.Column('stripped_name', + verbose_name=_("Parameter Name")) value = tables.Column('value', verbose_name=_("Value")) description = tables.Column('description', - verbose_name=("Detailed Description")) + verbose_name=_("Detailed Description")) + + def get_object_id(self, datum): + return datum.name class Meta: name = "parameters" diff --git a/tuskar_ui/infrastructure/parameters/tests.py b/tuskar_ui/infrastructure/parameters/tests.py index b8b537e37..3e6c52e53 100644 --- a/tuskar_ui/infrastructure/parameters/tests.py +++ b/tuskar_ui/infrastructure/parameters/tests.py @@ -19,7 +19,6 @@ from mock import patch, call # noqa from openstack_dashboard.test.test_data import utils from tuskar_ui import api -from tuskar_ui.infrastructure.parameters import views from tuskar_ui.test import helpers as test from tuskar_ui.test.test_data import tuskar_data @@ -51,16 +50,6 @@ class ParametersTest(test.BaseAdminViewTests): self.assertTemplateUsed(res, 'infrastructure/parameters/index.html') - def test_param_object(self): - param_dict = {'parameter_group': 'Neutron', - 'value': '1.2.3.4', - 'name': 'Ip Address', - 'description': 'This is an IP Address'} - - p = views.ServiceParameter(param_dict, 5) - self.assertEqual(p.id, 5) - self.assertEqual(p.value, '1.2.3.4') - def test_service_config_get(self): plan = api.tuskar.Plan(self.tuskarclient_plans.first()) role = api.tuskar.Role(self.tuskarclient_roles.first()) diff --git a/tuskar_ui/infrastructure/parameters/views.py b/tuskar_ui/infrastructure/parameters/views.py index 8ee044c7e..734e7b7d1 100644 --- a/tuskar_ui/infrastructure/parameters/views.py +++ b/tuskar_ui/infrastructure/parameters/views.py @@ -21,15 +21,6 @@ from tuskar_ui.infrastructure.parameters import forms from tuskar_ui.infrastructure.parameters import tables -class ServiceParameter: - def __init__(self, params_dict, id): - self.id = id - self.label = params_dict.get('name') - self.value = params_dict.get('value') - self.category = params_dict.get('parameter_group') - self.description = params_dict.get('description') - - class ServiceConfigView(horizon.forms.ModalFormView): template_name = "infrastructure/parameters/service_config.html" form_class = forms.EditServiceConfig @@ -55,8 +46,4 @@ class IndexView(horizon_tables.DataTableView): def get_data(self): plan = api.tuskar.Plan.get_the_plan(self.request) - base_parameters = plan.parameter_list( - include_key_parameters=False) - params = [ServiceParameter(param, ind) - for ind, param in enumerate(base_parameters)] - return params + return plan.parameter_list(include_key_parameters=False) diff --git a/tuskar_ui/test/api_tests/tuskar_tests.py b/tuskar_ui/test/api_tests/tuskar_tests.py index a509e41d3..429980119 100644 --- a/tuskar_ui/test/api_tests/tuskar_tests.py +++ b/tuskar_ui/test/api_tests/tuskar_tests.py @@ -109,3 +109,22 @@ class TuskarAPITests(test.APITestCase): self.request, plan, image) self.assertIsInstance(ret_val, api.tuskar.Role) self.assertEqual(ret_val.name, 'Controller') + + def test_parameter_stripped_name(self): + plan = api.tuskar.Plan(self.tuskarclient_plans.first()) + param = plan.parameter('Controller-1::count') + + ret_val = param.stripped_name + self.assertEqual(ret_val, 'count') + + def test_parameter_role(self): + plan = api.tuskar.Plan(self.tuskarclient_plans.first(), + request=self.request) + param = plan.parameter('Controller-1::count') + roles = self.tuskarclient_roles.list() + + with patch('tuskarclient.v2.roles.RoleManager.list', + return_value=roles): + ret_val = param.role + self.assertIsInstance(ret_val, api.tuskar.Role) + self.assertEqual(ret_val.name, 'Controller')