Clean driver_internal_info when changes nodes' driver

Because 'driver' field is able to be updated by using node-update,
it's necessary to clean driver_internal_info. Also left the open
possibility of changing driver and driver_internal_info at once.

Implements: blueprint driver-internal-info
Change-Id: I249c21800df854089b9e0db0ee08a11f53053cf2
This commit is contained in:
Lin Tan 2015-02-02 13:40:11 +08:00 committed by Tan Lin
parent 418d9d17fa
commit d1504d2569
2 changed files with 10 additions and 1 deletions

View File

@ -234,6 +234,10 @@ class Node(base.IronicObject):
object, e.g.: Node(context)
"""
updates = self.obj_get_changes()
if 'driver' in updates and 'driver_internal_info' not in updates:
# Clean driver_internal_info when changes driver
self.driver_internal_info = {}
updates = self.obj_get_changes()
self.dbapi.update_node(self.uuid, updates)
self.obj_reset_changes()

View File

@ -63,13 +63,18 @@ class TestNodeObject(base.DbTestCase):
autospec=True) as mock_update_node:
n = objects.Node.get(self.context, uuid)
self.assertEqual({"foo": "bar"}, n.driver_internal_info)
n.properties = {"fake": "property"}
n.driver = "fake-driver"
n.save()
mock_get_node.assert_called_once_with(uuid)
mock_update_node.assert_called_once_with(
uuid, {'properties': {"fake": "property"}})
uuid, {'properties': {"fake": "property"},
'driver': 'fake-driver',
'driver_internal_info': {}})
self.assertEqual(self.context, n._context)
self.assertEqual({}, n.driver_internal_info)
def test_refresh(self):
uuid = self.fake_node['uuid']