Filter out resources not in template when listing
It's possibile for resource listing of a legacy stack with an update in progress to have resources in db but not in template. Probably it would not hurt to filter those out. Change-Id: I84e56ba88270079acbfcdc6227c4263b39956fe6 Closes-Bug: #1653990
This commit is contained in:
parent
4620a5f361
commit
3967a93f5d
@ -323,7 +323,9 @@ class Stack(collections.Mapping):
|
|||||||
else:
|
else:
|
||||||
resources = self._db_resources_get()
|
resources = self._db_resources_get()
|
||||||
for rsc in six.itervalues(resources):
|
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):
|
def iter_resources(self, nested_depth=0, filters=None):
|
||||||
"""Iterates over all the resources in a stack.
|
"""Iterates over all the resources in a stack.
|
||||||
@ -366,7 +368,7 @@ class Stack(collections.Mapping):
|
|||||||
self._db_resources = _db_resources
|
self._db_resources = _db_resources
|
||||||
return self._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
|
tid = db_res.current_template_id
|
||||||
if tid is None:
|
if tid is None:
|
||||||
tid = self.t.id
|
tid = self.t.id
|
||||||
@ -382,8 +384,7 @@ class Stack(collections.Mapping):
|
|||||||
rsrc_def = t.resource_definitions(self)
|
rsrc_def = t.resource_definitions(self)
|
||||||
if rsrc_def_cache:
|
if rsrc_def_cache:
|
||||||
rsrc_def_cache[tid] = rsrc_def
|
rsrc_def_cache[tid] = rsrc_def
|
||||||
|
return rsrc_def.get(db_res.name)
|
||||||
return resource.Resource(db_res.name, rsrc_def[db_res.name], self)
|
|
||||||
|
|
||||||
def resource_get(self, name):
|
def resource_get(self, name):
|
||||||
"""Return a stack resource, even if not in the current template."""
|
"""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
|
# fall back to getting the resource from the database
|
||||||
db_res = self.db_resource_get(name)
|
db_res = self.db_resource_get(name)
|
||||||
if db_res:
|
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
|
return None
|
||||||
|
|
||||||
|
@ -265,15 +265,20 @@ class StackTest(common.HeatTestCase):
|
|||||||
|
|
||||||
db_resources = {
|
db_resources = {
|
||||||
'A': mock.MagicMock(),
|
'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['A'].name = 'A'
|
||||||
db_resources['B'].name = 'B'
|
db_resources['B'].name = 'B'
|
||||||
|
db_resources['C'].name = 'C'
|
||||||
gabs.return_value = db_resources
|
gabs.return_value = db_resources
|
||||||
|
|
||||||
self.assertEqual('A', self.stack.resource_get('A').name)
|
self.assertEqual('A', self.stack.resource_get('A').name)
|
||||||
self.assertEqual('B', self.stack.resource_get('B').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('C'))
|
||||||
|
self.assertIsNone(self.stack.resource_get('D'))
|
||||||
|
|
||||||
@mock.patch.object(resource_objects.Resource, 'get_all_by_stack')
|
@mock.patch.object(resource_objects.Resource, 'get_all_by_stack')
|
||||||
def test_iter_resources(self, mock_db_call):
|
def test_iter_resources(self, mock_db_call):
|
||||||
|
Loading…
Reference in New Issue
Block a user