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
changes/80/94780/3
Rabi Mishra 8 years ago
parent 61bd5f30f2
commit ce62bdc192
  1. 8
      etc/heat/templates/AWS_CloudWatch_Alarm.yaml
  2. 3
      heat/engine/parameters.py
  3. 6
      heat/tests/test_parameters.py

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

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

@ -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']}

Loading…
Cancel
Save