Merge "Filter out resources not in template when listing"
This commit is contained in:
commit
542f25dad6
|
@ -323,7 +323,9 @@ class Stack(collections.Mapping):
|
|||
else:
|
||||
resources = self._db_resources_get()
|
||||
for rsc in six.itervalues(resources):
|
||||
yield self._resource_from_db_resource(rsc, rsrc_def_cache)
|
||||
defn = self._rsrc_def_for_db_resource(rsc, rsrc_def_cache)
|
||||
if defn:
|
||||
yield resource.Resource(rsc.name, defn, self)
|
||||
|
||||
def iter_resources(self, nested_depth=0, filters=None):
|
||||
"""Iterates over all the resources in a stack.
|
||||
|
@ -366,7 +368,7 @@ class Stack(collections.Mapping):
|
|||
self._db_resources = _db_resources
|
||||
return self._db_resources
|
||||
|
||||
def _resource_from_db_resource(self, db_res, rsrc_def_cache=None):
|
||||
def _rsrc_def_for_db_resource(self, db_res, rsrc_def_cache=None):
|
||||
tid = db_res.current_template_id
|
||||
if tid is None:
|
||||
tid = self.t.id
|
||||
|
@ -382,8 +384,7 @@ class Stack(collections.Mapping):
|
|||
rsrc_def = t.resource_definitions(self)
|
||||
if rsrc_def_cache:
|
||||
rsrc_def_cache[tid] = rsrc_def
|
||||
|
||||
return resource.Resource(db_res.name, rsrc_def[db_res.name], self)
|
||||
return rsrc_def.get(db_res.name)
|
||||
|
||||
def resource_get(self, name):
|
||||
"""Return a stack resource, even if not in the current template."""
|
||||
|
@ -394,7 +395,9 @@ class Stack(collections.Mapping):
|
|||
# fall back to getting the resource from the database
|
||||
db_res = self.db_resource_get(name)
|
||||
if db_res:
|
||||
return self._resource_from_db_resource(db_res)
|
||||
defn = self._rsrc_def_for_db_resource(db_res)
|
||||
if defn:
|
||||
return resource.Resource(db_res.name, defn, self)
|
||||
|
||||
return None
|
||||
|
||||
|
|
|
@ -265,15 +265,20 @@ class StackTest(common.HeatTestCase):
|
|||
|
||||
db_resources = {
|
||||
'A': mock.MagicMock(),
|
||||
'B': mock.MagicMock(current_template_id=t2.id)
|
||||
'B': mock.MagicMock(current_template_id=t2.id),
|
||||
'C': mock.MagicMock(current_template_id=t2.id)
|
||||
}
|
||||
db_resources['A'].name = 'A'
|
||||
db_resources['B'].name = 'B'
|
||||
db_resources['C'].name = 'C'
|
||||
gabs.return_value = db_resources
|
||||
|
||||
self.assertEqual('A', self.stack.resource_get('A').name)
|
||||
self.assertEqual('B', self.stack.resource_get('B').name)
|
||||
|
||||
# Ignore the resource if only in db
|
||||
self.assertIsNone(self.stack.resource_get('C'))
|
||||
self.assertIsNone(self.stack.resource_get('D'))
|
||||
|
||||
@mock.patch.object(resource_objects.Resource, 'get_all_by_stack')
|
||||
def test_iter_resources(self, mock_db_call):
|
||||
|
|
Loading…
Reference in New Issue