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:
parent
dae580f84d
commit
569d62134c
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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'))
|
||||
|
||||
|
|
Loading…
Reference in New Issue