Set properties to before_props before calling handle_update

For some resources, we need to get the old properties
while handle_update, e.g. for nova server resource, we
calculate networks from old_nets and new_nets when update
the server networks, but the properties of server is updated
after rsrc_defn reparsing. So let's set the properties to
before_props before calling handle_update.

Change-Id: I24fea225a2749ee9baaa6273b78eed8126eb9e95
Closes-Bug: #1584623
This commit is contained in:
huangtianhua 2016-08-05 10:26:43 -04:00
parent 025c4fe1d3
commit b1617c8345
2 changed files with 19 additions and 20 deletions

View File

@ -1241,6 +1241,7 @@ class Resource(object):
prop_diff = self.update_template_diff_properties(after_props,
before_props)
self.properties = before_props
yield self.action_handler_task(action,
args=[after, tmpl_diff,

View File

@ -859,9 +859,8 @@ class InstancesTest(common.HeatTestCase):
before_props['NetworkInterfaces'] = old_interfaces
update_props = self.instance_props.copy()
update_props['NetworkInterfaces'] = new_interfaces
update_template = instance.t.freeze(properties=update_props)
instance.t = instance.t.freeze(properties=before_props)
instance.reparse()
after = instance.t.freeze(properties=update_props)
before = instance.t.freeze(properties=before_props)
self.m.StubOutWithMock(self.fc.servers, 'get')
self.fc.servers.get('1234').MultipleTimes().AndReturn(return_server)
@ -873,7 +872,7 @@ class InstancesTest(common.HeatTestCase):
None, None).AndReturn(None)
self.m.ReplayAll()
scheduler.TaskRunner(instance.update, update_template)()
scheduler.TaskRunner(instance.update, after, before)()
self.assertEqual((instance.UPDATE, instance.COMPLETE), instance.state)
self.m.VerifyAll()
@ -902,9 +901,8 @@ class InstancesTest(common.HeatTestCase):
before_props['NetworkInterfaces'] = old_interfaces
update_props = self.instance_props.copy()
update_props['NetworkInterfaces'] = new_interfaces
update_template = instance.t.freeze(properties=update_props)
instance.t = instance.t.freeze(properties=before_props)
instance.reparse()
after = instance.t.freeze(properties=update_props)
before = instance.t.freeze(properties=before_props)
self.m.StubOutWithMock(self.fc.servers, 'get')
self.fc.servers.get('1234').MultipleTimes().AndReturn(return_server)
@ -914,7 +912,7 @@ class InstancesTest(common.HeatTestCase):
self.m.ReplayAll()
scheduler.TaskRunner(instance.update, update_template)()
scheduler.TaskRunner(instance.update, after, before)()
self.assertEqual((instance.UPDATE, instance.COMPLETE), instance.state)
def test_instance_update_network_interfaces_new_include_old(self):
@ -942,9 +940,8 @@ class InstancesTest(common.HeatTestCase):
before_props['NetworkInterfaces'] = old_interfaces
update_props = self.instance_props.copy()
update_props['NetworkInterfaces'] = new_interfaces
update_template = instance.t.freeze(properties=update_props)
instance.t = instance.t.freeze(properties=before_props)
instance.reparse()
after = instance.t.freeze(properties=update_props)
before = instance.t.freeze(properties=before_props)
self.m.StubOutWithMock(self.fc.servers, 'get')
self.fc.servers.get('1234').MultipleTimes().AndReturn(return_server)
@ -954,7 +951,7 @@ class InstancesTest(common.HeatTestCase):
self.m.ReplayAll()
scheduler.TaskRunner(instance.update, update_template)()
scheduler.TaskRunner(instance.update, after, before)()
self.assertEqual((instance.UPDATE, instance.COMPLETE), instance.state)
def test_instance_update_network_interfaces_new_old_all_different(self):
@ -982,9 +979,8 @@ class InstancesTest(common.HeatTestCase):
before_props['NetworkInterfaces'] = old_interfaces
update_props = self.instance_props.copy()
update_props['NetworkInterfaces'] = new_interfaces
update_template = instance.t.freeze(properties=update_props)
instance.t = instance.t.freeze(properties=before_props)
instance.reparse()
after = instance.t.freeze(properties=update_props)
before = instance.t.freeze(properties=before_props)
self.m.StubOutWithMock(self.fc.servers, 'get')
self.fc.servers.get('1234').MultipleTimes().AndReturn(return_server)
@ -999,7 +995,7 @@ class InstancesTest(common.HeatTestCase):
self.m.ReplayAll()
scheduler.TaskRunner(instance.update, update_template)()
scheduler.TaskRunner(instance.update, after, before)()
self.assertEqual((instance.UPDATE, instance.COMPLETE), instance.state)
def test_instance_update_network_interfaces_no_old(self):
@ -1096,13 +1092,15 @@ class InstancesTest(common.HeatTestCase):
before_props = self.instance_props.copy()
if old_interfaces is not None:
before_props['NetworkInterfaces'] = old_interfaces
update_props = self.instance_props.copy()
update_props = copy.deepcopy(before_props)
if new_interfaces is not None:
update_props['NetworkInterfaces'] = new_interfaces
update_props['SubnetId'] = subnet_id
update_template = instance.t.freeze(properties=update_props)
instance.t = instance.t.freeze(properties=before_props)
after = instance.t.freeze(properties=update_props)
before = instance.t.freeze(properties=before_props)
instance.reparse()
self.m.StubOutWithMock(self.fc.servers, 'get')
@ -1128,7 +1126,7 @@ class InstancesTest(common.HeatTestCase):
self.m.ReplayAll()
scheduler.TaskRunner(instance.update, update_template)()
scheduler.TaskRunner(instance.update, after, before)()
self.assertEqual((instance.UPDATE, instance.COMPLETE), instance.state)
self.m.VerifyAll()