Refactor Parameter into separate Tuskar class

Change-Id: Iab3c155f2a5f67a0f8ffd4e932bab5ac789d7326
This commit is contained in:
Tzu-Mainn Chen 2014-09-29 20:38:57 +00:00
parent ebdc734094
commit b0de2922cf
5 changed files with 56 additions and 31 deletions

View File

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

View File

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

View File

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

View File

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

View File

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