From ce62bdc1925d9e746289c43bc0b76b41df8f2d53 Mon Sep 17 00:00:00 2001 From: Rabi Mishra Date: Mon, 2 Jun 2014 16:28:27 +0530 Subject: [PATCH] Fix default template for AWS::CloudWatch::Alarm with Ceilometer Existing template assumes certain parameters to be delimited strings rather than lists and uses 'Fn::Split' to convert them to list. However, delimitedstring representations of parameters are by default converted to list for CommaDelimitedList types. Also includes change for CommaDelimitedList to accept empty string. Change-Id: Ib566f1d098c575a80c4f1a975eaaaac93d70af34 Closes-Bug: #1316842 --- etc/heat/templates/AWS_CloudWatch_Alarm.yaml | 8 ++++---- heat/engine/parameters.py | 3 +-- heat/tests/test_parameters.py | 6 ++++++ 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/etc/heat/templates/AWS_CloudWatch_Alarm.yaml b/etc/heat/templates/AWS_CloudWatch_Alarm.yaml index d2c1e7b6f..e21e500d6 100644 --- a/etc/heat/templates/AWS_CloudWatch_Alarm.yaml +++ b/etc/heat/templates/AWS_CloudWatch_Alarm.yaml @@ -73,14 +73,14 @@ Resources: threshold: Ref: Threshold alarm_actions: - "Fn::Split": [",", {Ref: AlarmActions}] + Ref: AlarmActions ok_actions: - "Fn::Split": [",", {Ref: OKActions}] + Ref: OKActions insufficient_data_actions: - "Fn::Split": [",", {Ref: InsufficientDataActions}] + Ref: InsufficientDataActions statistic: "Fn::FindInMap": [StatisticMap, {Ref: Statistic}, Ceilometer] comparison_operator: "Fn::FindInMap": [ComparisonOperatorMap, {Ref: ComparisonOperator}, Ceilometer] matching_metadata: - "Fn::MemberListToMap": [Name, Value, {"Fn::Split": [",", {Ref: Dimensions}]}] + "Fn::MemberListToMap": [Name, Value, {Ref: Dimensions}] diff --git a/heat/engine/parameters.py b/heat/engine/parameters.py index dd7d28611..8bc0598cc 100644 --- a/heat/engine/parameters.py +++ b/heat/engine/parameters.py @@ -316,9 +316,8 @@ class CommaDelimitedListParam(Parameter, collections.Sequence): # only parse when value is not already a list if isinstance(value, list): return value - try: - if value: + if value is not None: return value.split(',') except (KeyError, AttributeError) as err: message = _('Value must be a comma-delimited list string: %s') diff --git a/heat/tests/test_parameters.py b/heat/tests/test_parameters.py index b6dfc98ec..e5a2d5c65 100644 --- a/heat/tests/test_parameters.py +++ b/heat/tests/test_parameters.py @@ -224,6 +224,12 @@ class ParameterTest(testtools.TestCase): self.new_parameter, 'p', schema, '2') self.assertIn('wibble', str(err)) + def test_list_value_list_default_empty(self): + schema = {'Type': 'CommaDelimitedList'} + schema['Default'] = '' + p = self.new_parameter('p', schema) + self.assertEqual([''], p.value()) + def test_list_value_list_good(self): schema = {'Type': 'CommaDelimitedList', 'AllowedValues': ['foo', 'bar', 'baz']}