diff options
author | Julia Kreger <juliaashleykreger@gmail.com> | 2023-02-28 13:28:49 -0800 |
---|---|---|
committer | Riccardo Pittau <elfosardo@gmail.com> | 2023-03-15 08:32:10 +0000 |
commit | ef676d1904395cbe96f5e3fd87a0e34dbffb3391 (patch) | |
tree | bfb93be9e396dad32e6cfbf2e9a0531d21b02d0f | |
parent | 67623b308463299be47023d1048c4d932a9e6e73 (diff) | |
download | ironic-ef676d1904395cbe96f5e3fd87a0e34dbffb3391.tar.gz |
Wipe Agent Token when cleaning timeout occcursbugfix/19.0
In a relatively odd turn of events, should cleaning
have started, but then timed out due to lost communications
or a hard failure of the machine, an agent token could
previously be orphaned preventing re-cleaning.
We now explicitly remove the token in this case.
Change-Id: I236cdf6ddb040284e9fd1fa10136ad17ef665638
(cherry picked from commit 47b5909486c336352c536eb2cadd121afea8cf12)
-rw-r--r-- | ironic/conductor/utils.py | 4 | ||||
-rw-r--r-- | ironic/tests/unit/conductor/test_utils.py | 6 | ||||
-rw-r--r-- | releasenotes/notes/wipe-agent-token-upon-cleaning-timeout-c9add514fad1b02c.yaml | 7 |
3 files changed, 15 insertions, 2 deletions
diff --git a/ironic/conductor/utils.py b/ironic/conductor/utils.py index ddfe9d13f..9da97406d 100644 --- a/ironic/conductor/utils.py +++ b/ironic/conductor/utils.py @@ -479,9 +479,9 @@ def cleaning_error_handler(task, logmsg, errmsg=None, traceback=False, node.del_driver_internal_info('cleaning_reboot') node.del_driver_internal_info('cleaning_polling') node.del_driver_internal_info('skip_current_clean_step') - # We don't need to keep the old agent URL + # We don't need to keep the old agent URL, or token # as it should change upon the next cleaning attempt. - node.del_driver_internal_info('agent_url') + wipe_token_and_url(task) # For manual cleaning, the target provision state is MANAGEABLE, whereas # for automated cleaning, it is AVAILABLE. manual_clean = node.target_provision_state == states.MANAGEABLE diff --git a/ironic/tests/unit/conductor/test_utils.py b/ironic/tests/unit/conductor/test_utils.py index 1e262f255..d107a6670 100644 --- a/ironic/tests/unit/conductor/test_utils.py +++ b/ironic/tests/unit/conductor/test_utils.py @@ -1171,6 +1171,9 @@ class ErrorHandlersTestCase(db_base.DbTestCase): self.node.set_driver_internal_info('skip_current_clean_step', True) self.node.set_driver_internal_info('clean_step_index', 0) self.node.set_driver_internal_info('agent_url', 'url') + self.node.set_driver_internal_info('agent_secret_token', 'foo') + self.node.set_driver_internal_info('agent_secret_token_pregenerated', + False) msg = 'error bar' last_error = "last error" @@ -1183,6 +1186,9 @@ class ErrorHandlersTestCase(db_base.DbTestCase): self.assertNotIn('cleaning_polling', self.node.driver_internal_info) self.assertNotIn('skip_current_clean_step', self.node.driver_internal_info) + self.assertNotIn('agent_secret_token', self.node.driver_internal_info) + self.assertNotIn('agent_secret_token_pregenerated', + self.node.driver_internal_info) self.assertEqual(last_error, self.node.last_error) self.assertTrue(self.node.maintenance) self.assertEqual(last_error, self.node.maintenance_reason) diff --git a/releasenotes/notes/wipe-agent-token-upon-cleaning-timeout-c9add514fad1b02c.yaml b/releasenotes/notes/wipe-agent-token-upon-cleaning-timeout-c9add514fad1b02c.yaml new file mode 100644 index 000000000..0aa828ccd --- /dev/null +++ b/releasenotes/notes/wipe-agent-token-upon-cleaning-timeout-c9add514fad1b02c.yaml @@ -0,0 +1,7 @@ +--- +fixes: + - | + Fixes an issue where an agent token was being orphaned if a baremetal node + timed out during cleaning operations, leading to issues where the node + would not be able to establish a new token with Ironic upon future + in some cases. We now always wipe the token in this case. |