Revert "Load resources using Resource.load_all_from_stack()"

This reverts commit 570e69b7ab.

We are seeing issues with missing heat data obtained from
the Heat CFN API in TripleO.

Change-Id: Ideea039e51ae7fb3350ee1f35706adce8847de64
Closes-bug: #1331720
This commit is contained in:
Dan Prince 2014-06-18 15:26:16 -04:00
parent dae580f84d
commit 569d62134c
3 changed files with 26 additions and 50 deletions

View File

@ -89,6 +89,7 @@ class Stack(collections.Mapping):
self._resources = None
self._dependencies = None
self._access_allowed_handlers = {}
self._db_resources = None
self.adopt_stack_data = adopt_stack_data
self.stack_user_project_id = stack_user_project_id
self.created_time = created_time
@ -131,13 +132,25 @@ class Stack(collections.Mapping):
@property
def resources(self):
if self._resources is None:
definitions = self.t.resource_definitions(self)
rsrcs = resource.Resource.load_all_from_stack(self.context,
self,
definitions)
self._resources = dict((res.name, res) for res in rsrcs)
self._resources = dict((name, resource.Resource(name, data, self))
for (name, data) in
self.t.resource_definitions(self).items())
# There is no need to continue storing the db resources
# after resource creation
self._db_resources = None
return self._resources
def db_resource_get(self, name):
if not self.id:
return None
if self._db_resources is None:
try:
self._db_resources = db_api.resource_get_all_by_stack(
self.context, self.id)
except exception.NotFound:
return None
return self._db_resources.get(name)
@property
def dependencies(self):
if self._dependencies is None:

View File

@ -133,45 +133,6 @@ class Resource(object):
return super(Resource, cls).__new__(ResourceClass)
@classmethod
def load(cls, context, name, definition, stack):
'''
Create a resource and load any associated state from the DB.
Note that this is really inefficient if you have to do it for a group
of resources. Use Resource.load_all_from_stack() where possible
instead.
'''
resource = cls(name, definition, stack)
if stack.id is not None:
db_res = db_api.resource_get_by_name_and_stack(context, name,
stack.id)
if db_res is not None:
resource._load_data(db_res)
return resource
@staticmethod
def load_all_from_stack(context, stack, definitions):
'''
Return an iterator over all Resources in a stack.
Resources are created from the provided definitions, and any associated
state loaded from the DB.
'''
db_resources = {}
if stack.id is not None:
try:
db_resources = db_api.resource_get_all_by_stack(context,
stack.id)
except exception.NotFound:
pass
for name, definition in definitions.items():
resource = Resource(name, definition, stack)
if name in db_resources:
resource._load_data(db_resources[name])
yield resource
def __init__(self, name, definition, stack):
if '/' in name:
raise ValueError(_('Resource name may not contain "/"'))
@ -201,6 +162,10 @@ class Resource(object):
self.created_time = None
self.updated_time = None
resource = stack.db_resource_get(name)
if resource:
self._load_data(resource)
def _load_data(self, resource):
'''Load the resource state from its DB representation.'''
self.resource_id = resource.nova_instance

View File

@ -599,9 +599,8 @@ class ServersTest(HeatTestCase):
}, server.metadata_get())
resource_defns = tmpl.resource_definitions(stack)
created_server = servers.Server.load(stack.context, 'WebServer',
resource_defns['WebServer'],
stack)
created_server = servers.Server('WebServer',
resource_defns['WebServer'], stack)
self.assertEqual('4567', created_server.access_key)
self.assertTrue(stack.access_allowed('4567', 'WebServer'))
@ -667,9 +666,8 @@ class ServersTest(HeatTestCase):
}, server.metadata_get())
resource_defns = tmpl.resource_definitions(stack)
created_server = servers.Server.load(stack.context, 'WebServer',
resource_defns['WebServer'],
stack)
created_server = servers.Server('WebServer',
resource_defns['WebServer'], stack)
self.assertEqual('1234', created_server._get_user_id())
self.assertTrue(stack.access_allowed('1234', 'WebServer'))