From: Zane Bitter Date: Wed, 31 Oct 2012 19:18:43 +0000 (+0100) Subject: Implement NoEcho for parameters X-Git-Tag: 2014.1~1256 X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=f4c34c56285ba17005fb413d8f32f11d4d44332b;p=openstack-build%2Fheat-build.git Implement NoEcho for parameters Change-Id: I60ce651367479205e0d456e2ac0ec3f949766383 Signed-off-by: Zane Bitter --- diff --git a/heat/engine/api.py b/heat/engine/api.py index ac9250d1..15e8c8a8 100644 --- a/heat/engine/api.py +++ b/heat/engine/api.py @@ -94,7 +94,7 @@ def format_stack(stack): STACK_CREATION_TIME: timeutils.isotime(stack.created_time), STACK_UPDATED_TIME: timeutils.isotime(stack.updated_time), STACK_NOTIFICATION_TOPICS: [], # TODO Not implemented yet - STACK_PARAMETERS: dict(stack.parameters), + STACK_PARAMETERS: stack.parameters.map(str), STACK_DESCRIPTION: stack.t[template.DESCRIPTION], STACK_TMPL_DESCRIPTION: stack.t[template.DESCRIPTION], STACK_STATUS: stack.state, diff --git a/heat/engine/manager.py b/heat/engine/manager.py index 3189a4d0..335c09e5 100644 --- a/heat/engine/manager.py +++ b/heat/engine/manager.py @@ -240,7 +240,7 @@ class EngineManager(manager.Manager): 'Every Resources object must contain a Type member.'} def describe_param(p): - description = {'NoEcho': 'false', + description = {'NoEcho': p.no_echo() and 'true' or 'false', 'ParameterKey': p.name, 'Description': p.description()} if p.has_default(): diff --git a/heat/engine/parameters.py b/heat/engine/parameters.py index dbe3869f..da26625a 100644 --- a/heat/engine/parameters.py +++ b/heat/engine/parameters.py @@ -91,6 +91,13 @@ class Parameter(object): raise KeyError('Missing parameter %s' % self.name) + def no_echo(self): + ''' + Return whether the parameter should be sanitised in any output to + the user. + ''' + return self.schema.get(NO_ECHO, 'false').lower() == 'true' + def description(self): '''Return the description of the parameter.''' return self.schema.get(DESCRIPTION, '') @@ -105,7 +112,11 @@ class Parameter(object): def __str__(self): '''Return a string representation of the parameter''' - return self.value() + value = self.value() + if self.no_echo(): + return '******' + else: + return value class NumberParam(Parameter): diff --git a/heat/tests/test_parameters.py b/heat/tests/test_parameters.py index 9f92ba22..0f4a3489 100644 --- a/heat/tests/test_parameters.py +++ b/heat/tests/test_parameters.py @@ -76,6 +76,30 @@ class ParameterTest(unittest.TestCase): else: self.fail('ValueError not raised') + def test_no_echo_true(self): + p = parameters.Parameter('anechoic', + {'Type': 'String', + 'NoEcho': 'true'}, + 'wibble') + self.assertTrue(p.no_echo()) + self.assertNotEqual(str(p), 'wibble') + + def test_no_echo_true_caps(self): + p = parameters.Parameter('anechoic', + {'Type': 'String', + 'NoEcho': 'TrUe'}, + 'wibble') + self.assertTrue(p.no_echo()) + self.assertNotEqual(str(p), 'wibble') + + def test_no_echo_false(self): + p = parameters.Parameter('echoic', + {'Type': 'String', + 'NoEcho': 'false'}, + 'wibble') + self.assertFalse(p.no_echo()) + self.assertEqual(str(p), 'wibble') + def test_description(self): description = 'Description of the parameter' p = parameters.Parameter('p', {'Type': 'String',