summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2023-02-23 02:12:11 +0000
committerGerrit Code Review <review@openstack.org>2023-02-23 02:12:11 +0000
commit3231983b8d4a03f94f7452fd9f8072eb25528bab (patch)
treed724472303ae3fcd301b2aacf294d8e4b68074bd
parent8f25cf03a3b1cf4c6f166871ea726bbd8901ee3a (diff)
parent92eefc9d63b5f9a5092820f679b4c2d961743a1a (diff)
downloadironic-3231983b8d4a03f94f7452fd9f8072eb25528bab.tar.gz
Merge "fix inspectwait logic"
-rw-r--r--ironic/db/sqlalchemy/api.py6
-rw-r--r--ironic/tests/unit/db/test_nodes.py47
-rw-r--r--releasenotes/notes/fix-inspectwait-finished-at-4b817af4bf4c30c2.yaml5
3 files changed, 56 insertions, 2 deletions
diff --git a/ironic/db/sqlalchemy/api.py b/ironic/db/sqlalchemy/api.py
index 9202aab09..d5f4a9d65 100644
--- a/ironic/db/sqlalchemy/api.py
+++ b/ironic/db/sqlalchemy/api.py
@@ -904,11 +904,13 @@ class Connection(api.Connection):
if values['provision_state'] == states.INSPECTING:
values['inspection_started_at'] = timeutils.utcnow()
values['inspection_finished_at'] = None
- elif (ref.provision_state == states.INSPECTING
+ elif ((ref.provision_state == states.INSPECTING
+ or ref.provision_state == states.INSPECTWAIT)
and values['provision_state'] == states.MANAGEABLE):
values['inspection_finished_at'] = timeutils.utcnow()
values['inspection_started_at'] = None
- elif (ref.provision_state == states.INSPECTING
+ elif ((ref.provision_state == states.INSPECTING
+ or ref.provision_state == states.INSPECTWAIT)
and values['provision_state'] == states.INSPECTFAIL):
values['inspection_started_at'] = None
diff --git a/ironic/tests/unit/db/test_nodes.py b/ironic/tests/unit/db/test_nodes.py
index f7e858f9b..e7053d6f5 100644
--- a/ironic/tests/unit/db/test_nodes.py
+++ b/ironic/tests/unit/db/test_nodes.py
@@ -884,6 +884,53 @@ class DbNodeTestCase(base.DbTestCase):
timeutils.normalize_time(result))
self.assertIsNone(res['inspection_started_at'])
+ @mock.patch.object(timeutils, 'utcnow', autospec=True)
+ def test_update_node_inspection_finished_at_inspecting(self, mock_utcnow):
+ mocked_time = datetime.datetime(2000, 1, 1, 0, 0)
+ mock_utcnow.return_value = mocked_time
+ node = utils.create_test_node(uuid=uuidutils.generate_uuid(),
+ inspection_finished_at=mocked_time,
+ provision_state=states.INSPECTING)
+ res = self.dbapi.update_node(node.id,
+ {'provision_state': states.MANAGEABLE})
+ result = res['inspection_finished_at']
+ self.assertEqual(mocked_time,
+ timeutils.normalize_time(result))
+ self.assertIsNone(res['inspection_started_at'])
+
+ @mock.patch.object(timeutils, 'utcnow', autospec=True)
+ def test_update_node_inspection_finished_at_inspectwait(self,
+ mock_utcnow):
+ mocked_time = datetime.datetime(2000, 1, 1, 0, 0)
+ mock_utcnow.return_value = mocked_time
+ node = utils.create_test_node(uuid=uuidutils.generate_uuid(),
+ inspection_finished_at=mocked_time,
+ provision_state=states.INSPECTWAIT)
+ res = self.dbapi.update_node(node.id,
+ {'provision_state': states.MANAGEABLE})
+ result = res['inspection_finished_at']
+ self.assertEqual(mocked_time,
+ timeutils.normalize_time(result))
+ self.assertIsNone(res['inspection_started_at'])
+
+ def test_update_node_inspection_started_at_inspecting(self):
+ mocked_time = datetime.datetime(2000, 1, 1, 0, 0)
+ node = utils.create_test_node(uuid=uuidutils.generate_uuid(),
+ inspection_started_at=mocked_time,
+ provision_state=states.INSPECTING)
+ res = self.dbapi.update_node(node.id,
+ {'provision_state': states.INSPECTFAIL})
+ self.assertIsNone(res['inspection_started_at'])
+
+ def test_update_node_inspection_started_at_inspectwait(self):
+ mocked_time = datetime.datetime(2000, 1, 1, 0, 0)
+ node = utils.create_test_node(uuid=uuidutils.generate_uuid(),
+ inspection_started_at=mocked_time,
+ provision_state=states.INSPECTWAIT)
+ res = self.dbapi.update_node(node.id,
+ {'provision_state': states.INSPECTFAIL})
+ self.assertIsNone(res['inspection_started_at'])
+
def test_reserve_node(self):
node = utils.create_test_node()
self.dbapi.set_node_tags(node.id, ['tag1', 'tag2'])
diff --git a/releasenotes/notes/fix-inspectwait-finished-at-4b817af4bf4c30c2.yaml b/releasenotes/notes/fix-inspectwait-finished-at-4b817af4bf4c30c2.yaml
new file mode 100644
index 000000000..167a7f4a5
--- /dev/null
+++ b/releasenotes/notes/fix-inspectwait-finished-at-4b817af4bf4c30c2.yaml
@@ -0,0 +1,5 @@
+---
+fixes:
+ - |
+ Fixes a database API internal check to update the
+ ``inspection_finished_at`` field upon the completion of inspection.