From b10d4a65e53e4079cfed79ec11cfdff3859ca8ac Mon Sep 17 00:00:00 2001 From: marios Date: Wed, 8 Apr 2015 17:13:42 +0300 Subject: [PATCH] Wires up constraints and type into returned plan parameters Though constraints and type are both plumbed into the parsing and storage models, for some reason these were not being captured in the generated Plan object returned to the client. This adds those missing attributes of Plan parameters. Also updates the docs to reflect the "new" attrs Change-Id: I138818daef38f084acd6e2250986351352b3835d --- doc/source/api/curl-v2.rst | 22 +++++++++++++++++++ tuskar/api/controllers/v2/models.py | 19 ++++++++++++++++ tuskar/manager/models.py | 3 ++- tuskar/manager/plan.py | 3 +-- tuskar/tests/api/controllers/v2/test_plans.py | 8 ++++--- 5 files changed, 49 insertions(+), 6 deletions(-) diff --git a/doc/source/api/curl-v2.rst b/doc/source/api/curl-v2.rst index 3b42737a..b660c5ff 100644 --- a/doc/source/api/curl-v2.rst +++ b/doc/source/api/curl-v2.rst @@ -26,11 +26,33 @@ Example of JSON Representation of Plan "parameters": [ { + "constraints": + [ + { + "constraint_type": "range", + "definition": + { + "min": "0" + }, + "description": "Can't be less than zero" + } + ], + "default": "0", + "description": "The number of cinder storage nodes to deploy" + "hidden": false, + "label": "The number of cinder storage nodes to deploy", + "name": "Cinder-Storage-1::count", + "parameter_type": "number", + "value": "0" + }, + { + "constraints": [] "default": "guest", "description": "The password for RabbitMQ", "hidden": true, "label": null, "name": "compute-1::RabbitPassword", + "parameter_type: "string" "value": "secret-password" } ], diff --git a/tuskar/api/controllers/v2/models.py b/tuskar/api/controllers/v2/models.py index fecb24e7..27e67c84 100644 --- a/tuskar/api/controllers/v2/models.py +++ b/tuskar/api/controllers/v2/models.py @@ -69,6 +69,19 @@ class Role(Base): return r +class ParameterConstraint(Base): + + constraint_type = wtypes.text + definition = v2types.MultiType(list, dict, wtypes.text) + description = wtypes.text + + @classmethod + def from_tuskar_model(cls, constraint): + return cls(**{'constraint_type': constraint.constraint_type, + 'definition': constraint.definition, + 'description': constraint.description}) + + class PlanParameter(Base): name = wtypes.text @@ -77,6 +90,8 @@ class PlanParameter(Base): description = wtypes.text hidden = bool value = v2types.MultiType(wtypes.text, six.integer_types, list, dict) + constraints = [ParameterConstraint] + parameter_type = wtypes.text @classmethod def from_tuskar_model(cls, param): @@ -84,6 +99,8 @@ class PlanParameter(Base): :type param: tuskar.manager.models.PlanParameter """ + constraints = [ParameterConstraint.from_tuskar_model(c) + for c in param.constraints] p = cls(**{ 'name': param.name, 'label': param.label, @@ -91,6 +108,8 @@ class PlanParameter(Base): 'description': param.description, 'hidden': param.hidden, 'value': param.value, + 'constraints': constraints, + 'parameter_type': param.param_type }) return p diff --git a/tuskar/manager/models.py b/tuskar/manager/models.py index 0aecb5f6..a6e474ac 100644 --- a/tuskar/manager/models.py +++ b/tuskar/manager/models.py @@ -69,7 +69,7 @@ class DeploymentPlan(object): class PlanParameter(object): def __init__(self, name, value, param_type, description, - label, default, hidden): + label, default, hidden, constraints): super(PlanParameter, self).__init__() self.name = name self.value = value @@ -78,6 +78,7 @@ class PlanParameter(object): self.label = label self.default = default self.hidden = hidden + self.constraints = constraints class ParameterValue(object): diff --git a/tuskar/manager/plan.py b/tuskar/manager/plan.py index 2c08b83e..d20672f5 100644 --- a/tuskar/manager/plan.py +++ b/tuskar/manager/plan.py @@ -459,9 +459,8 @@ class PlansManager(object): env_param = environment.find_parameter_by_name(p.name) return models.PlanParameter( p.name, env_param.value, p.param_type, - p.description, p.label, p.default, p.hidden + p.description, p.label, p.default, p.hidden, p.constraints ) - params = [generate_param(tp) for tp in template.parameters] return params diff --git a/tuskar/tests/api/controllers/v2/test_plans.py b/tuskar/tests/api/controllers/v2/test_plans.py index 15c6f76c..3f206604 100644 --- a/tuskar/tests/api/controllers/v2/test_plans.py +++ b/tuskar/tests/api/controllers/v2/test_plans.py @@ -105,13 +105,15 @@ class PlansTests(base.TestCase): p.add_parameters( manager_models.PlanParameter( name="Param 1", label="1", default=2, hidden=False, - description="1", value=1, param_type=int), + description="1", value=1, param_type='number', constraints=''), manager_models.PlanParameter( name="Param 2", label="2", default=['a', ], hidden=False, - description="2", value=['a', 'b'], param_type=list), + description="2", value=['a', 'b'], + param_type='comma_delimited_list', constraints=''), manager_models.PlanParameter( name="Param 3", label="3", default={'a': 2}, hidden=False, - description="3", value={'a': 1}, param_type=dict), + description="3", value={'a': 1}, param_type='json', + constraints=''), ) mock_retrieve.return_value = p