diff --git a/ironic/drivers/modules/agent_base.py b/ironic/drivers/modules/agent_base.py index c51f8ec812..2bc0598997 100644 --- a/ironic/drivers/modules/agent_base.py +++ b/ironic/drivers/modules/agent_base.py @@ -716,6 +716,13 @@ class AgentBaseMixin(object): """Whether agent boot is managed by ironic.""" return True + def refresh_steps(self, task, step_type): + """Refresh the node's cached steps. + + :param task: a TaskManager instance + :param step_type: "clean" or "deploy" + """ + @METRICS.timer('AgentBaseMixin.tear_down') @task_manager.require_exclusive_lock def tear_down(self, task): @@ -776,8 +783,12 @@ class AgentBaseMixin(object): has an invalid value. :returns: states.CLEANWAIT to signify an asynchronous prepare """ - return deploy_utils.prepare_inband_cleaning( + result = deploy_utils.prepare_inband_cleaning( task, manage_boot=self.should_manage_boot(task)) + if result is None: + # Fast-track, ensure the steps are available. + self.refresh_steps(task, 'clean') + return result @METRICS.timer('AgentDeployMixin.tear_down_cleaning') def tear_down_cleaning(self, task): diff --git a/ironic/drivers/modules/deploy_utils.py b/ironic/drivers/modules/deploy_utils.py index e3b7fa3fbc..3575a7732c 100644 --- a/ironic/drivers/modules/deploy_utils.py +++ b/ironic/drivers/modules/deploy_utils.py @@ -691,9 +691,8 @@ def prepare_inband_cleaning(task, manage_boot=True): fast_track = manager_utils.is_fast_track(task) if not fast_track: manager_utils.node_power_action(task, states.REBOOT) - - # Tell the conductor we are waiting for the agent to boot. - return states.CLEANWAIT + # Tell the conductor we are waiting for the agent to boot. + return states.CLEANWAIT def tear_down_inband_cleaning(task, manage_boot=True): diff --git a/ironic/tests/unit/drivers/modules/test_agent.py b/ironic/tests/unit/drivers/modules/test_agent.py index ef3d774761..77a5f30b45 100644 --- a/ironic/tests/unit/drivers/modules/test_agent.py +++ b/ironic/tests/unit/drivers/modules/test_agent.py @@ -1203,6 +1203,18 @@ class TestAgentDeploy(db_base.DbTestCase): prepare_inband_cleaning_mock.assert_called_once_with( task, manage_boot=False) + @mock.patch.object(agent.AgentDeploy, 'refresh_steps', autospec=True) + @mock.patch.object(deploy_utils, 'prepare_inband_cleaning', autospec=True) + def test_prepare_cleaning_fast_track(self, prepare_inband_cleaning_mock, + refresh_steps_mock): + prepare_inband_cleaning_mock.return_value = None + with task_manager.acquire(self.context, self.node.uuid) as task: + self.assertIsNone(self.driver.prepare_cleaning(task)) + prepare_inband_cleaning_mock.assert_called_once_with( + task, manage_boot=True) + refresh_steps_mock.assert_called_once_with( + self.driver, task, 'clean') + @mock.patch.object(deploy_utils, 'tear_down_inband_cleaning', autospec=True) def test_tear_down_cleaning(self, tear_down_cleaning_mock): diff --git a/ironic/tests/unit/drivers/modules/test_deploy_utils.py b/ironic/tests/unit/drivers/modules/test_deploy_utils.py index 748ee8420d..c168b367cd 100644 --- a/ironic/tests/unit/drivers/modules/test_deploy_utils.py +++ b/ironic/tests/unit/drivers/modules/test_deploy_utils.py @@ -1148,15 +1148,16 @@ class AgentMethodsTestCase(db_base.DbTestCase): is_fast_track_mock.return_value = fast_track with task_manager.acquire( self.context, self.node.uuid, shared=False) as task: - self.assertEqual( - states.CLEANWAIT, - utils.prepare_inband_cleaning(task, manage_boot=manage_boot)) + result = utils.prepare_inband_cleaning(task, + manage_boot=manage_boot) add_cleaning_network_mock.assert_called_once_with( task.driver.network, task) if not fast_track: + self.assertEqual(states.CLEANWAIT, result) power_mock.assert_called_once_with(task, states.REBOOT) else: self.assertFalse(power_mock.called) + self.assertIsNone(result) self.assertEqual(1, task.node.driver_internal_info[ 'agent_erase_devices_iterations']) self.assertIs(True, task.node.driver_internal_info[ diff --git a/releasenotes/notes/fast-track-opt-d50eab2cc58fddcb.yaml b/releasenotes/notes/fast-track-opt-d50eab2cc58fddcb.yaml new file mode 100644 index 0000000000..b9658dd1c7 --- /dev/null +++ b/releasenotes/notes/fast-track-opt-d50eab2cc58fddcb.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + Removes unnecessary delay before the start of the cleaning process when + fast-track is used.