Just to migrate existing resource to backup stack
Don't create a resource record for backup stack if the
resource record exists, just to migrate it to backup
stack, to avoid redundant data remaining for existing
stack.
This patch also adds resource.store() which covers
_store() and _store_or_update() implemention. And then
we can delete the two methods.
Change-Id: I0b4b983306ea84fab0e2c81876ef407a80d25989
Closes-Bug: #1662095
(cherry picked from commit b2e436aa67
)
This commit is contained in:
parent
59cad62717
commit
82aabe9d71
@ -1729,34 +1729,44 @@ class Resource(object):
|
||||
except Exception as ex:
|
||||
LOG.warning(_LW('db error %s'), ex)
|
||||
|
||||
def _store(self, metadata=None):
|
||||
"""Create the resource in the database."""
|
||||
def store(self, set_metadata=False):
|
||||
"""Create the resource in the database.
|
||||
|
||||
If self.id is set, we update the existing stack.
|
||||
"""
|
||||
if not self.root_stack_id:
|
||||
self.root_stack_id = self.stack.root_stack_id()
|
||||
try:
|
||||
rs = {'action': self.action,
|
||||
'status': self.status,
|
||||
'status_reason': str(self.status_reason),
|
||||
'stack_id': self.stack.id,
|
||||
'physical_resource_id': self.resource_id,
|
||||
'name': self.name,
|
||||
'rsrc_metadata': metadata,
|
||||
'rsrc_prop_data_id':
|
||||
self._create_or_replace_rsrc_prop_data(),
|
||||
'needed_by': self.needed_by,
|
||||
'requires': self.requires,
|
||||
'replaces': self.replaces,
|
||||
'replaced_by': self.replaced_by,
|
||||
'current_template_id': self.current_template_id,
|
||||
'stack_name': self.stack.name,
|
||||
'root_stack_id': self.root_stack_id}
|
||||
|
||||
rs = {'action': self.action,
|
||||
'status': self.status,
|
||||
'status_reason': str(self.status_reason),
|
||||
'stack_id': self.stack.id,
|
||||
'physical_resource_id': self.resource_id,
|
||||
'name': self.name,
|
||||
'rsrc_prop_data_id':
|
||||
self._create_or_replace_rsrc_prop_data(),
|
||||
'needed_by': self.needed_by,
|
||||
'requires': self.requires,
|
||||
'replaces': self.replaces,
|
||||
'replaced_by': self.replaced_by,
|
||||
'current_template_id': self.current_template_id,
|
||||
'root_stack_id': self.root_stack_id,
|
||||
'updated_at': self.updated_time,
|
||||
'properties_data': None}
|
||||
|
||||
if set_metadata:
|
||||
metadata = self.t.metadata()
|
||||
rs['rsrc_metadata'] = metadata
|
||||
self._rsrc_metadata = metadata
|
||||
|
||||
if self.id is not None:
|
||||
resource_objects.Resource.update_by_id(
|
||||
self.context, self.id, rs)
|
||||
else:
|
||||
new_rs = resource_objects.Resource.create(self.context, rs)
|
||||
self.id = new_rs.id
|
||||
self.uuid = new_rs.uuid
|
||||
self.created_time = new_rs.created_at
|
||||
self._rsrc_metadata = metadata
|
||||
except Exception as ex:
|
||||
LOG.error(_LE('DB error %s'), ex)
|
||||
|
||||
def _add_event(self, action, status, reason):
|
||||
"""Add a state change event to the database."""
|
||||
@ -1768,47 +1778,6 @@ class Resource(object):
|
||||
ev.store()
|
||||
self.stack.dispatch_event(ev)
|
||||
|
||||
def _store_or_update(self, action, status, reason):
|
||||
prev_action = self.action
|
||||
self.action = action
|
||||
self.status = status
|
||||
self.status_reason = reason
|
||||
|
||||
data = {
|
||||
'action': self.action,
|
||||
'status': self.status,
|
||||
'status_reason': str(reason),
|
||||
'stack_id': self.stack.id,
|
||||
'updated_at': self.updated_time,
|
||||
'needed_by': self.needed_by,
|
||||
'rsrc_prop_data_id': self._create_or_replace_rsrc_prop_data(),
|
||||
'properties_data': None,
|
||||
'requires': self.requires,
|
||||
'replaces': self.replaces,
|
||||
'replaced_by': self.replaced_by,
|
||||
'current_template_id': self.current_template_id,
|
||||
'physical_resource_id': self.resource_id,
|
||||
'root_stack_id': self.root_stack_id
|
||||
}
|
||||
if prev_action == self.INIT:
|
||||
metadata = self.t.metadata()
|
||||
data['rsrc_metadata'] = metadata
|
||||
else:
|
||||
metadata = self._rsrc_metadata
|
||||
|
||||
if self.id is not None:
|
||||
try:
|
||||
resource_objects.Resource.update_by_id(self.context, self.id,
|
||||
data)
|
||||
except Exception as ex:
|
||||
LOG.error(_LE('DB error %s'), ex)
|
||||
else:
|
||||
self._rsrc_metadata = metadata
|
||||
else:
|
||||
# This should only happen in unit tests
|
||||
LOG.warning(_LW('Resource "%s" not pre-stored in DB'), self)
|
||||
self._store(metadata)
|
||||
|
||||
@contextlib.contextmanager
|
||||
def lock(self, engine_id):
|
||||
self._acquire(engine_id)
|
||||
@ -2009,7 +1978,11 @@ class Resource(object):
|
||||
|
||||
old_state = (self.action, self.status)
|
||||
new_state = (action, status)
|
||||
self._store_or_update(action, status, reason)
|
||||
set_metadata = self.action == self.INIT
|
||||
self.action = action
|
||||
self.status = status
|
||||
self.status_reason = reason
|
||||
self.store(set_metadata)
|
||||
|
||||
if new_state != old_state:
|
||||
self._add_event(action, status, reason)
|
||||
|
@ -442,7 +442,7 @@ class StackResource(resource.Resource):
|
||||
timeout_mins=None):
|
||||
"""Update the nested stack with the new template."""
|
||||
if self.id is None:
|
||||
self._store()
|
||||
self.store()
|
||||
|
||||
if self.stack.action == self.stack.ROLLBACK:
|
||||
if self._try_rollback():
|
||||
|
@ -711,8 +711,7 @@ class Stack(collections.Mapping):
|
||||
self.t.add_resource(definition)
|
||||
if self.t.id is not None:
|
||||
self.t.store(self.context)
|
||||
if resource.action == resource.INIT:
|
||||
resource._store()
|
||||
resource.store()
|
||||
|
||||
def remove_resource(self, resource_name):
|
||||
"""Remove the resource with the specified name."""
|
||||
@ -1008,7 +1007,7 @@ class Stack(collections.Mapping):
|
||||
def _store_resources(self):
|
||||
for r in reversed(self.dependencies):
|
||||
if r.action == r.INIT:
|
||||
r._store()
|
||||
r.store()
|
||||
|
||||
@profiler.trace('Stack.create', hide_args=False)
|
||||
@reset_state_on_error
|
||||
@ -1379,7 +1378,7 @@ class Stack(collections.Mapping):
|
||||
if existing_rsrc_db is None:
|
||||
update_needed_by(rsrc)
|
||||
rsrc.current_template_id = self.t.id
|
||||
rsrc._store()
|
||||
rsrc.store()
|
||||
rsrcs[rsrc.name] = rsrc
|
||||
else:
|
||||
update_needed_by(existing_rsrc_db)
|
||||
|
@ -125,7 +125,7 @@ class UserTest(common.HeatTestCase):
|
||||
rsrc = user.User(resource_name,
|
||||
resource_defns[resource_name],
|
||||
stack)
|
||||
rsrc._store()
|
||||
rsrc.store()
|
||||
|
||||
self.m.StubOutWithMock(short_id, 'get_id')
|
||||
short_id.get_id(rsrc.uuid).MultipleTimes().AndReturn('aabbcc')
|
||||
|
@ -882,7 +882,7 @@ class TestConvergenceMigration(common.HeatTestCase):
|
||||
template=tools.string_template_five)
|
||||
self.stack.store()
|
||||
for r in self.stack.resources.values():
|
||||
r._store()
|
||||
r.store()
|
||||
self.stack.migrate_to_convergence()
|
||||
self.stack = self.stack.load(self.ctx, self.stack.id)
|
||||
|
||||
|
@ -317,7 +317,7 @@ class FormatTest(common.HeatTestCase):
|
||||
def test_format_event_prop_data(self):
|
||||
resource = self.stack['generic1']
|
||||
resource._update_stored_properties()
|
||||
resource._store()
|
||||
resource.store()
|
||||
event = self._dummy_event(res_properties=resource._rsrc_prop_data)
|
||||
formatted = api.format_event(event, self.stack.identifier())
|
||||
self.assertEqual({'k1': 'v1'}, formatted[rpc_api.EVENT_RES_PROPERTIES])
|
||||
|
@ -70,7 +70,7 @@ class EventCommon(common.HeatTestCase):
|
||||
|
||||
self.resource = self.stack['EventTestResource']
|
||||
self.resource._update_stored_properties()
|
||||
self.resource._store()
|
||||
self.resource.store()
|
||||
self.addCleanup(stack_object.Stack.delete, self.ctx, self.stack.id)
|
||||
|
||||
|
||||
|
@ -295,7 +295,7 @@ Resources:
|
||||
stack.store()
|
||||
|
||||
stack_res = stack['the_nested']
|
||||
stack_res._store()
|
||||
stack_res.store()
|
||||
|
||||
nested_t = template_format.parse(self.nested_template)
|
||||
nested_t['Parameters']['KeyName']['Default'] = 'Key'
|
||||
@ -383,7 +383,7 @@ Outputs:
|
||||
self.res = stack_res.NestedStack('test_t_res',
|
||||
self.defn, self.stack)
|
||||
self.assertIsNone(self.res.validate())
|
||||
self.res._store()
|
||||
self.res.store()
|
||||
|
||||
def test_handle_create(self):
|
||||
self.res.create_with_template = mock.Mock(return_value=None)
|
||||
|
@ -12,6 +12,7 @@
|
||||
# under the License.
|
||||
|
||||
import collections
|
||||
import datetime
|
||||
import eventlet
|
||||
import itertools
|
||||
import json
|
||||
@ -282,11 +283,25 @@ class ResourceTest(common.HeatTestCase):
|
||||
def test_state_set(self):
|
||||
tmpl = rsrc_defn.ResourceDefinition('test_resource', 'Foo')
|
||||
res = generic_rsrc.GenericResource('test_resource', tmpl, self.stack)
|
||||
res.state_set(res.CREATE, res.COMPLETE, 'wibble')
|
||||
res.state_set(res.CREATE, res.IN_PROGRESS, 'test_state_set')
|
||||
self.assertIsNotNone(res.id)
|
||||
self.assertEqual(res.CREATE, res.action)
|
||||
self.assertEqual(res.IN_PROGRESS, res.status)
|
||||
self.assertEqual('test_state_set', res.status_reason)
|
||||
|
||||
db_res = resource_objects.Resource.get_obj(res.context, res.id)
|
||||
self.assertEqual(res.CREATE, db_res.action)
|
||||
self.assertEqual(res.IN_PROGRESS, db_res.status)
|
||||
self.assertEqual('test_state_set', db_res.status_reason)
|
||||
|
||||
res.state_set(res.CREATE, res.COMPLETE, 'test_update')
|
||||
self.assertEqual(res.CREATE, res.action)
|
||||
self.assertEqual(res.COMPLETE, res.status)
|
||||
self.assertEqual((res.CREATE, res.COMPLETE), res.state)
|
||||
self.assertEqual('wibble', res.status_reason)
|
||||
self.assertEqual('test_update', res.status_reason)
|
||||
db_res.refresh()
|
||||
self.assertEqual(res.CREATE, db_res.action)
|
||||
self.assertEqual(res.COMPLETE, db_res.status)
|
||||
self.assertEqual('test_update', db_res.status_reason)
|
||||
|
||||
def test_physical_resource_name_or_FnGetRefId(self):
|
||||
tmpl = rsrc_defn.ResourceDefinition('test_resource', 'Foo')
|
||||
@ -429,14 +444,14 @@ class ResourceTest(common.HeatTestCase):
|
||||
tmpl = rsrc_defn.ResourceDefinition('test_resource', 'Foo')
|
||||
res = generic_rsrc.GenericResource('test_res_new', tmpl, self.stack)
|
||||
self.assertIsNone(res.created_time)
|
||||
res._store()
|
||||
res.store()
|
||||
self.assertIsNotNone(res.created_time)
|
||||
|
||||
def test_updated_time(self):
|
||||
tmpl = rsrc_defn.ResourceDefinition('test_resource',
|
||||
'GenericResourceType')
|
||||
res = generic_rsrc.GenericResource('test_resource', tmpl, self.stack)
|
||||
res._store()
|
||||
res.store()
|
||||
stored_time = res.updated_time
|
||||
|
||||
utmpl = rsrc_defn.ResourceDefinition('test_resource', 'Foo')
|
||||
@ -555,15 +570,15 @@ class ResourceTest(common.HeatTestCase):
|
||||
|
||||
self.m.VerifyAll()
|
||||
|
||||
def test_updated_time_changes_only_on_update_calls(self):
|
||||
def test_updated_time_changes_only_when_it_changed(self):
|
||||
tmpl = rsrc_defn.ResourceDefinition('test_resource',
|
||||
'GenericResourceType')
|
||||
res = generic_rsrc.GenericResource('test_resource', tmpl, self.stack)
|
||||
res._store()
|
||||
self.assertIsNone(res.updated_time)
|
||||
|
||||
res._store_or_update(res.UPDATE, res.COMPLETE, 'should not change')
|
||||
res.store()
|
||||
self.assertIsNone(res.updated_time)
|
||||
res.updated_time = datetime.datetime.utcnow()
|
||||
res.store()
|
||||
self.assertIsNotNone(res.updated_time)
|
||||
|
||||
def test_resource_object_resource_properties_data(self):
|
||||
cfg.CONF.set_override('encrypt_parameters_and_properties', True,
|
||||
@ -599,33 +614,10 @@ class ResourceTest(common.HeatTestCase):
|
||||
self.assertEqual(data, res_obj1.rsrc_prop_data.data)
|
||||
self.assertEqual(data, res_obj2.rsrc_prop_data.data)
|
||||
|
||||
def test_store_or_update(self):
|
||||
tmpl = rsrc_defn.ResourceDefinition('test_resource', 'Foo')
|
||||
res = generic_rsrc.GenericResource('test_res_upd', tmpl, self.stack)
|
||||
res._store_or_update(res.CREATE, res.IN_PROGRESS, 'test_store')
|
||||
self.assertIsNotNone(res.id)
|
||||
self.assertEqual(res.CREATE, res.action)
|
||||
self.assertEqual(res.IN_PROGRESS, res.status)
|
||||
self.assertEqual('test_store', res.status_reason)
|
||||
|
||||
db_res = resource_objects.Resource.get_obj(res.context, res.id)
|
||||
self.assertEqual(res.CREATE, db_res.action)
|
||||
self.assertEqual(res.IN_PROGRESS, db_res.status)
|
||||
self.assertEqual('test_store', db_res.status_reason)
|
||||
|
||||
res._store_or_update(res.CREATE, res.COMPLETE, 'test_update')
|
||||
self.assertEqual(res.CREATE, res.action)
|
||||
self.assertEqual(res.COMPLETE, res.status)
|
||||
self.assertEqual('test_update', res.status_reason)
|
||||
db_res.refresh()
|
||||
self.assertEqual(res.CREATE, db_res.action)
|
||||
self.assertEqual(res.COMPLETE, db_res.status)
|
||||
self.assertEqual('test_update', db_res.status_reason)
|
||||
|
||||
def test_make_replacement(self):
|
||||
tmpl = rsrc_defn.ResourceDefinition('test_resource', 'Foo')
|
||||
res = generic_rsrc.GenericResource('test_res_upd', tmpl, self.stack)
|
||||
res._store()
|
||||
res.store()
|
||||
new_tmpl_id = 2
|
||||
self.assertIsNotNone(res.id)
|
||||
new_id = res.make_replacement(new_tmpl_id)
|
||||
@ -835,7 +827,7 @@ class ResourceTest(common.HeatTestCase):
|
||||
self.assertEqual(res._stored_properties_data, {'Foo': 'lucky'})
|
||||
|
||||
res._rsrc_prop_data = None
|
||||
res._store_or_update(res.CREATE, res.IN_PROGRESS, 'test_rpd')
|
||||
res.state_set(res.CREATE, res.IN_PROGRESS, 'test_rpd')
|
||||
|
||||
# Modernity, the data is where it belongs
|
||||
self.assertEqual(res._rsrc_prop_data.data, {'Foo': 'lucky'})
|
||||
@ -874,7 +866,7 @@ class ResourceTest(common.HeatTestCase):
|
||||
self.assertEqual(res._stored_properties_data, {'Foo': 'lucky'})
|
||||
|
||||
res._rsrc_prop_data = None
|
||||
res._store_or_update(res.CREATE, res.IN_PROGRESS, 'test_store')
|
||||
res.state_set(res.CREATE, res.IN_PROGRESS, 'test_store')
|
||||
|
||||
# Modernity, the data is where it belongs
|
||||
# The db object data is encrypted
|
||||
@ -1901,15 +1893,15 @@ class ResourceTest(common.HeatTestCase):
|
||||
res = generic_rsrc.GenericResource('test_res_enc', tmpl, self.stack)
|
||||
res._stored_properties_data = stored_properties_data
|
||||
res._rsrc_prop_data = None
|
||||
res._store()
|
||||
res.store()
|
||||
db_res = db_api.resource_get(res.context, res.id)
|
||||
self.assertNotEqual('string',
|
||||
db_res.rsrc_prop_data.data['prop1'])
|
||||
|
||||
# The db data should be encrypted when _store_or_update() is called
|
||||
# The db data should be encrypted when state_set is called
|
||||
res = generic_rsrc.GenericResource('test_res_enc', tmpl, self.stack)
|
||||
res._stored_properties_data = stored_properties_data
|
||||
res._store_or_update(res.CREATE, res.IN_PROGRESS, 'test_store')
|
||||
res.state_set(res.CREATE, res.IN_PROGRESS, 'test_store')
|
||||
db_res = db_api.resource_get(res.context, res.id)
|
||||
self.assertNotEqual('string',
|
||||
db_res.rsrc_prop_data.data['prop1'])
|
||||
@ -1943,12 +1935,12 @@ class ResourceTest(common.HeatTestCase):
|
||||
'prop4': ['a', 'list'],
|
||||
'prop5': True}
|
||||
|
||||
# The db data should not be encrypted when _store_or_update()
|
||||
# The db data should not be encrypted when state_set()
|
||||
# is called
|
||||
res = generic_rsrc.GenericResource('test_res_enc', tmpl, self.stack)
|
||||
res._stored_properties_data = stored_properties_data
|
||||
res._rsrc_prop_data = None
|
||||
res._store_or_update(res.CREATE, res.IN_PROGRESS, 'test_store')
|
||||
res.state_set(res.CREATE, res.IN_PROGRESS, 'test_store')
|
||||
db_res = db_api.resource_get(res.context, res.id)
|
||||
self.assertEqual('string', db_res.rsrc_prop_data.data['prop1'])
|
||||
|
||||
@ -1983,7 +1975,7 @@ class ResourceTest(common.HeatTestCase):
|
||||
def test_release_ignores_not_found_error(self, mock_sau, mock_get_obj):
|
||||
tmpl = rsrc_defn.ResourceDefinition('test_res', 'Foo')
|
||||
res = generic_rsrc.GenericResource('test_res', tmpl, self.stack)
|
||||
res._store()
|
||||
res.store()
|
||||
res._acquire('engine-id')
|
||||
mock_get_obj.side_effect = exception.NotFound()
|
||||
res._release('engine-id')
|
||||
@ -1993,7 +1985,7 @@ class ResourceTest(common.HeatTestCase):
|
||||
tmpl = rsrc_defn.ResourceDefinition('test_res', 'Foo')
|
||||
res = generic_rsrc.GenericResource('test_res', tmpl, self.stack)
|
||||
res.action = res.CREATE
|
||||
res._store()
|
||||
res.store()
|
||||
self._assert_resource_lock(res.id, None, None)
|
||||
res_data = {(1, True): {u'id': 1, u'name': 'A', 'attrs': {}},
|
||||
(2, True): {u'id': 3, u'name': 'B', 'attrs': {}}}
|
||||
@ -2011,7 +2003,7 @@ class ResourceTest(common.HeatTestCase):
|
||||
tmpl = rsrc_defn.ResourceDefinition('test_res', 'Foo')
|
||||
res = generic_rsrc.GenericResource('test_res', tmpl, self.stack)
|
||||
res.action = res.CREATE
|
||||
res._store()
|
||||
res.store()
|
||||
res_data = {(1, True): {u'id': 1, u'name': 'A', 'attrs': {}},
|
||||
(2, True): {u'id': 3, u'name': 'B', 'attrs': {}}}
|
||||
|
||||
@ -2027,7 +2019,7 @@ class ResourceTest(common.HeatTestCase):
|
||||
"""
|
||||
tmpl = rsrc_defn.ResourceDefinition('test_res', 'Foo')
|
||||
res = generic_rsrc.GenericResource('test_res', tmpl, self.stack)
|
||||
res._store()
|
||||
res.store()
|
||||
dummy_ex = exception.ResourceNotAvailable(resource_name=res.name)
|
||||
res.create = mock.Mock(side_effect=dummy_ex)
|
||||
self._assert_resource_lock(res.id, None, None)
|
||||
@ -2044,7 +2036,7 @@ class ResourceTest(common.HeatTestCase):
|
||||
tmpl = rsrc_defn.ResourceDefinition('test_res', 'Foo')
|
||||
res = generic_rsrc.GenericResource('test_res', tmpl, self.stack)
|
||||
res.action = res.ADOPT
|
||||
res._store()
|
||||
res.store()
|
||||
self.stack.adopt_stack_data = {'resources': {'test_res': {
|
||||
'resource_id': 'fluffy'}}}
|
||||
self._assert_resource_lock(res.id, None, None)
|
||||
@ -2063,7 +2055,7 @@ class ResourceTest(common.HeatTestCase):
|
||||
tmpl = rsrc_defn.ResourceDefinition('test_res', 'Foo')
|
||||
res = generic_rsrc.GenericResource('test_res', tmpl, self.stack)
|
||||
res.action = res.ADOPT
|
||||
res._store()
|
||||
res.store()
|
||||
self.stack.adopt_stack_data = {'resources': {}}
|
||||
self._assert_resource_lock(res.id, None, None)
|
||||
res_data = {(1, True): {u'id': 5, u'name': 'A', 'attrs': {}},
|
||||
@ -2086,7 +2078,7 @@ class ResourceTest(common.HeatTestCase):
|
||||
res = stack.resources['test_res']
|
||||
res.requires = [2]
|
||||
res.action = res.CREATE
|
||||
res._store()
|
||||
res.store()
|
||||
self._assert_resource_lock(res.id, None, None)
|
||||
|
||||
new_temp = template.Template({
|
||||
@ -2122,7 +2114,7 @@ class ResourceTest(common.HeatTestCase):
|
||||
tmpl)
|
||||
stack.converge_stack(stack.t, action=stack.CREATE)
|
||||
res = stack.resources['test_res']
|
||||
res._store()
|
||||
res.store()
|
||||
|
||||
new_temp = template.Template({
|
||||
'HeatTemplateFormatVersion': '2012-12-12',
|
||||
@ -2144,7 +2136,7 @@ class ResourceTest(common.HeatTestCase):
|
||||
tmpl = rsrc_defn.ResourceDefinition('test_res',
|
||||
'GenericResourceType')
|
||||
res = generic_rsrc.GenericResource('test_res', tmpl, self.stack)
|
||||
res._store()
|
||||
res.store()
|
||||
|
||||
new_temp = template.Template({
|
||||
'HeatTemplateFormatVersion': '2012-12-12',
|
||||
@ -2165,7 +2157,7 @@ class ResourceTest(common.HeatTestCase):
|
||||
tmpl = rsrc_defn.ResourceDefinition('test_res',
|
||||
'GenericResourceType')
|
||||
res = generic_rsrc.GenericResource('test_res', tmpl, self.stack)
|
||||
res._store()
|
||||
res.store()
|
||||
|
||||
new_temp = template.Template({
|
||||
'HeatTemplateFormatVersion': '2012-12-12',
|
||||
@ -2188,7 +2180,7 @@ class ResourceTest(common.HeatTestCase):
|
||||
tmpl = rsrc_defn.ResourceDefinition('test_res', 'Foo')
|
||||
res = generic_rsrc.GenericResource('test_res', tmpl, self.stack)
|
||||
res.requires = [1, 2]
|
||||
res._store()
|
||||
res.store()
|
||||
rs = resource_objects.Resource.get_obj(self.stack.context, res.id)
|
||||
rs.update_and_save({'engine_id': 'not-this'})
|
||||
self._assert_resource_lock(res.id, 'not-this', None)
|
||||
@ -2217,7 +2209,7 @@ class ResourceTest(common.HeatTestCase):
|
||||
stack.converge_stack(stack.t, action=stack.CREATE)
|
||||
res = stack.resources['test_res']
|
||||
res.requires = [2]
|
||||
res._store()
|
||||
res.store()
|
||||
self._assert_resource_lock(res.id, None, None)
|
||||
|
||||
new_temp = template.Template({
|
||||
@ -2260,7 +2252,7 @@ class ResourceTest(common.HeatTestCase):
|
||||
stack.converge_stack(stack.t, action=stack.CREATE)
|
||||
res = stack.resources['test_res']
|
||||
res.requires = [2]
|
||||
res._store()
|
||||
res.store()
|
||||
self._assert_resource_lock(res.id, None, None)
|
||||
|
||||
new_temp = template.Template({
|
||||
@ -2294,7 +2286,7 @@ class ResourceTest(common.HeatTestCase):
|
||||
'ResourceWithPropsType')
|
||||
res = generic_rsrc.ResourceWithProps('test_res', rsrc_def, self.stack)
|
||||
res.replaced_by = 'dummy'
|
||||
res._store()
|
||||
res.store()
|
||||
|
||||
new_temp = template.Template({
|
||||
'HeatTemplateFormatVersion': '2012-12-12',
|
||||
@ -2318,7 +2310,7 @@ class ResourceTest(common.HeatTestCase):
|
||||
'ResourceWithPropsType')
|
||||
res = generic_rsrc.ResourceWithProps('test_res', rsrc_def, self.stack)
|
||||
res.replaced_by = 'dummy'
|
||||
res._store()
|
||||
res.store()
|
||||
|
||||
new_temp = template.Template({
|
||||
'HeatTemplateFormatVersion': '2012-12-12',
|
||||
@ -2344,7 +2336,7 @@ class ResourceTest(common.HeatTestCase):
|
||||
res.current_template_id = 1
|
||||
res.status = res.COMPLETE
|
||||
res.action = res.CREATE
|
||||
res._store()
|
||||
res.store()
|
||||
res.handle_delete = mock.Mock(return_value=None)
|
||||
res._update_replacement_data = mock.Mock()
|
||||
self._assert_resource_lock(res.id, None, None)
|
||||
@ -2361,7 +2353,7 @@ class ResourceTest(common.HeatTestCase):
|
||||
tmpl = rsrc_defn.ResourceDefinition('test_res', 'Foo')
|
||||
res = generic_rsrc.GenericResource('test_res', tmpl, self.stack)
|
||||
res.current_template_id = 'same-template'
|
||||
res._store()
|
||||
res.store()
|
||||
res.delete = mock.Mock()
|
||||
tr = scheduler.TaskRunner(res.delete_convergence, 'same-template', {},
|
||||
'engine-007', self.dummy_timeout,
|
||||
@ -2375,7 +2367,7 @@ class ResourceTest(common.HeatTestCase):
|
||||
res.current_template_id = 1
|
||||
res.status = res.COMPLETE
|
||||
res.action = res.CREATE
|
||||
res._store()
|
||||
res.store()
|
||||
res_id = res.id
|
||||
res.handle_delete = mock.Mock(side_effect=ValueError('test'))
|
||||
self._assert_resource_lock(res.id, None, None)
|
||||
@ -2396,7 +2388,7 @@ class ResourceTest(common.HeatTestCase):
|
||||
res.current_template_id = 1
|
||||
res.status = res.COMPLETE
|
||||
res.action = res.CREATE
|
||||
res._store()
|
||||
res.store()
|
||||
rs = resource_objects.Resource.get_obj(self.stack.context, res.id)
|
||||
rs.update_and_save({'engine_id': 'not-this'})
|
||||
self._assert_resource_lock(res.id, 'not-this', None)
|
||||
@ -2414,7 +2406,7 @@ class ResourceTest(common.HeatTestCase):
|
||||
res.current_template_id = 1
|
||||
res.status = res.COMPLETE
|
||||
res.action = res.CREATE
|
||||
res._store()
|
||||
res.store()
|
||||
res.destroy = mock.Mock()
|
||||
input_data = {(1, False): 4, (2, False): 5} # needed_by resource ids
|
||||
self._assert_resource_lock(res.id, None, None)
|
||||
@ -2429,7 +2421,7 @@ class ResourceTest(common.HeatTestCase):
|
||||
r = generic_rsrc.GenericResource('test_res', tmpl, self.stack)
|
||||
r.replaced_by = 4
|
||||
r.needed_by = [4, 5]
|
||||
r._store()
|
||||
r.store()
|
||||
db_res = mock.MagicMock()
|
||||
db_res.current_template_id = 'same_tmpl'
|
||||
mock_get_obj.return_value = db_res
|
||||
@ -2564,7 +2556,7 @@ class ResourceTest(common.HeatTestCase):
|
||||
tmpl = rsrc_defn.ResourceDefinition('test_res', 'Foo')
|
||||
res = generic_rsrc.GenericResource('test_res', tmpl, self.stack)
|
||||
# action is INIT by default
|
||||
res._store()
|
||||
res.store()
|
||||
with mock.patch.object(resource_objects.Resource,
|
||||
'delete') as resource_del:
|
||||
tr = scheduler.TaskRunner(res.delete_convergence, 1, {},
|
||||
@ -2576,7 +2568,7 @@ class ResourceTest(common.HeatTestCase):
|
||||
tmpl = rsrc_defn.ResourceDefinition('test_res', 'Foo')
|
||||
res = generic_rsrc.GenericResource('test_res', tmpl, self.stack)
|
||||
res.action = res.CREATE
|
||||
res._store()
|
||||
res.store()
|
||||
timeout = -1 # to emulate timeout
|
||||
tr = scheduler.TaskRunner(res.delete_convergence, 1, {}, 'engine-007',
|
||||
timeout, self.dummy_event)
|
||||
@ -2602,7 +2594,7 @@ class ResourceTest(common.HeatTestCase):
|
||||
mock_tmpl_load.return_value = tmpl
|
||||
res = stack['res']
|
||||
res.current_template_id = stack.t.id
|
||||
res._store()
|
||||
res.store()
|
||||
data = {'bar': {'atrr1': 'baz', 'attr2': 'baz2'}}
|
||||
mock_stack_load.return_value = stack
|
||||
resource.Resource.load(stack.context, res.id, True, data)
|
||||
@ -3515,6 +3507,7 @@ class ResourceHookTest(common.HeatTestCase):
|
||||
res = resource.Resource('res', snippet, self.stack)
|
||||
res.id = '1234'
|
||||
res.uuid = uuid.uuid4()
|
||||
res.store = mock.Mock()
|
||||
task = scheduler.TaskRunner(res.create)
|
||||
task.start()
|
||||
task.step()
|
||||
@ -3532,6 +3525,7 @@ class ResourceHookTest(common.HeatTestCase):
|
||||
res.id = '1234'
|
||||
res.action = 'CREATE'
|
||||
res.uuid = uuid.uuid4()
|
||||
res.store = mock.Mock()
|
||||
self.stack.action = 'DELETE'
|
||||
task = scheduler.TaskRunner(res.delete)
|
||||
task.start()
|
||||
@ -3549,6 +3543,7 @@ class ResourceHookTest(common.HeatTestCase):
|
||||
res = resource.Resource('res', snippet, self.stack)
|
||||
res.id = '1234'
|
||||
res.uuid = uuid.uuid4()
|
||||
res.store = mock.Mock()
|
||||
task = scheduler.TaskRunner(res.create)
|
||||
task.start()
|
||||
task.step()
|
||||
@ -3567,6 +3562,7 @@ class ResourceHookTest(common.HeatTestCase):
|
||||
res.uuid = uuid.uuid4()
|
||||
res.action = 'CREATE'
|
||||
self.stack.action = 'DELETE'
|
||||
res.store = mock.Mock()
|
||||
task = scheduler.TaskRunner(res.delete)
|
||||
task.start()
|
||||
task.step()
|
||||
@ -4457,7 +4453,7 @@ class TestResourcePropDataUpdate(common.HeatTestCase):
|
||||
res._stored_properties_data = self.old_rpd
|
||||
if self.replaced:
|
||||
res._rsrc_prop_data = None
|
||||
res._store()
|
||||
res.store()
|
||||
if res._rsrc_prop_data is None:
|
||||
old_rpd_id = -1
|
||||
else:
|
||||
@ -4465,7 +4461,7 @@ class TestResourcePropDataUpdate(common.HeatTestCase):
|
||||
res._stored_properties_data = self.new_rpd
|
||||
if self.replaced:
|
||||
res._rsrc_prop_data = None
|
||||
res._store()
|
||||
res.store()
|
||||
if res._rsrc_prop_data is None:
|
||||
new_rpd_id = -1
|
||||
else:
|
||||
|
@ -539,7 +539,6 @@ class StackTest(common.HeatTestCase):
|
||||
self.assertEqual((stack.Stack.UPDATE, stack.Stack.COMPLETE),
|
||||
self.stack.state)
|
||||
self.assertEqual('xyz', self.stack['AResource'].properties['Foo'])
|
||||
|
||||
self.assertEqual(
|
||||
stack_arn, self.stack['AResource'].metadata_get()['Bar'])
|
||||
|
||||
|
@ -58,7 +58,7 @@ class StackUserTest(common.HeatTestCase):
|
||||
else:
|
||||
self.stack.set_stack_user_project_id(project_id)
|
||||
|
||||
rsrc._store()
|
||||
rsrc.store()
|
||||
self.m.StubOutWithMock(short_id, 'get_id')
|
||||
short_id.get_id(rsrc.uuid).MultipleTimes().AndReturn('aabbcc')
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user