List stack resources in HeatStackFixture

Change-Id: Iad615e6a36c9bd6d5e23fdba1be9f5b1003ccedf
This commit is contained in:
pkomarov
2019-06-20 16:03:03 +03:00
committed by Federico Ressi
parent 856ca9ac05
commit c0b0cb7b46
4 changed files with 84 additions and 2 deletions

View File

@@ -134,7 +134,9 @@ class HeatStackFixture(tobiko.SharedFixture):
stack = self.wait_for_stack_status(
expected_status={DELETE_COMPLETE})
self.stack = self._outputs = None
# Cleanup cached objects
self.stack = self._outputs = self._resources = None
# Compile template parameters
parameters = self.get_stack_parameters()
try:
@@ -151,6 +153,15 @@ class HeatStackFixture(tobiko.SharedFixture):
LOG.debug('Creating stack %r (id=%r)...', self.stack_name,
stack_id)
_resources = None
@tobiko.fixture_property
def resources(self):
resources = self._resources
if not self._resources:
self._resources = resources = HeatStackResourceFixture(self)
return resources
def cleanup_fixture(self):
self.setup_client()
self.cleanup_stack()
@@ -162,7 +173,7 @@ class HeatStackFixture(tobiko.SharedFixture):
"""Deletes stack."""
if not stack_id:
stack_id = self.stack_id
self.stack = self._outputs = None
self.stack = self._outputs = self._resources = None
try:
self.client.stacks.delete(stack_id)
except exc.NotFound:
@@ -241,6 +252,10 @@ class HeatStackKeyError(tobiko.TobikoException):
message = "key {key!r} not found in stack {name!r}"
class HeatStackResourceKeyError(HeatStackKeyError):
message = "resource key {key!r} not found in stack {name!r}"
class HeatStackParameterKeyError(HeatStackKeyError):
message = "parameter key {key!r} not found in stack {name!r}"
@@ -395,3 +410,22 @@ class HeatStackCreationFailed(InvalidHeatStackStatus):
class HeatStackDeletionFailed(InvalidHeatStackStatus):
pass
class HeatStackResourceFixture(HeatStackNamespaceFixture):
key_error = HeatStackResourceKeyError
def get_keys(self):
template = tobiko.setup_fixture(self.stack.template)
return frozenset(template.resources or [])
def get_values(self):
self.stack.wait_for_create_complete()
client = self.stack.client
resources = client.resources.list(self.stack.stack_id)
return {r.resource_name: r for r in resources}
@property
def fixture_name(self):
return self.stack_name + '.resources'

View File

@@ -57,6 +57,11 @@ class HeatTemplateFixture(tobiko.SharedFixture):
template = self.template
return template and template.get('parameters') or None
@property
def resources(self):
template = self.template
return template and template.get('resources') or None
class HeatTemplateFileFixture(HeatTemplateFixture):