Allow resource groups of 0 resources

Change-Id: I16fb23afe1ef3fd91a4f5d8aa2bd7fea04ffc21e
Closes-Bug: 1339292
This commit is contained in:
Randall Burt 2014-08-26 13:56:09 -05:00
parent f96cecfa4b
commit efc195c80d
3 changed files with 19 additions and 7 deletions

View File

@ -89,7 +89,7 @@ class ResourceGroup(stack_resource.StackResource):
_('The number of instances to create.'),
default=1,
constraints=[
constraints.Range(min=1),
constraints.Range(min=0),
],
update_allowed=True
),
@ -145,13 +145,14 @@ class ResourceGroup(stack_resource.StackResource):
def handle_create(self):
count = self.properties[self.COUNT]
return self.create_with_template(self._assemble_nested(count),
{},
self.stack.timeout_mins)
if count > 0:
return self.create_with_template(self._assemble_nested(count),
{},
self.stack.timeout_mins)
def handle_update(self, new_snippet, tmpl_diff, prop_diff):
count = prop_diff.get(self.COUNT)
if count:
if count is not None:
return self.update_with_template(self._assemble_nested(count),
{},
self.stack.timeout_mins)

View File

@ -195,6 +195,8 @@ class StackResource(resource.Resource):
return stack_creator
def check_create_complete(self, stack_creator):
if stack_creator is None:
return True
done = stack_creator.step()
if done:
if self._nested.state != (self._nested.CREATE,

View File

@ -303,6 +303,12 @@ class ResourceGroupTest(common.HeatTestCase):
resgrp = resource_group.ResourceGroup('test', snip, stack)
self.assertIsNone(resgrp.validate())
def test_zero_resources(self):
noresources = copy.deepcopy(template)
noresources['resources']['group1']['properties']['count'] = 0
resg = self._create_dummy_stack(noresources, expect_count=0)
self.assertEqual((resg.CREATE, resg.COMPLETE), resg.state)
def test_delete(self):
"""Test basic delete."""
resg = self._create_dummy_stack()
@ -395,12 +401,15 @@ class ResourceGroupTest(common.HeatTestCase):
self.assertRaises(exception.InvalidTemplateAttribute, resg.FnGetAtt,
'resource.2')
def _create_dummy_stack(self, template_data=template):
def _create_dummy_stack(self, template_data=template, expect_count=2):
stack = utils.parse_stack(template_data)
resg = stack['group1']
scheduler.TaskRunner(resg.create)()
self.stack = resg.nested()
self.assertEqual(2, len(resg.nested()))
if expect_count > 0:
self.assertEqual(expect_count, len(resg.nested()))
else:
self.assertIsNone(resg.nested())
self.assertEqual((resg.CREATE, resg.COMPLETE), resg.state)
return resg