diff options
author | Pavlo Shchelokovskyy <pshchelokovskyy@mirantis.com> | 2016-08-23 21:33:01 +0300 |
---|---|---|
committer | Pavlo Shchelokovskyy <pshchelokovskyy@mirantis.com> | 2016-08-29 18:10:53 +0300 |
commit | bb62f256f7aa55c292ebeae73ca25a4a9f0ec8c0 (patch) | |
tree | 8d3d9ab94f6f96b86c985329a1c2f22d46a29f4f | |
parent | 46dc3959e35400dbadad1bf2ed3733ee44e77dc5 (diff) | |
download | ironic-bb62f256f7aa55c292ebeae73ca25a4a9f0ec8c0.tar.gz |
Allow suppressing ramdisk logs collection
A third-party deployment driver that is not IPA-based may still use
'set_failed_state' method from 'deploy_utils', but currently this will
result in an ERROR-level log entry, unnecessary worrying the operator.
Allow calls to this method to suppress IPA-based ramdisk logs collection
even when it is enabled in config.
Change-Id: I4d9fe0382c012d6a00826812752ffe65b5a98ea3
-rw-r--r-- | ironic/drivers/modules/deploy_utils.py | 9 | ||||
-rw-r--r-- | ironic/tests/unit/drivers/modules/test_deploy_utils.py | 15 |
2 files changed, 20 insertions, 4 deletions
diff --git a/ironic/drivers/modules/deploy_utils.py b/ironic/drivers/modules/deploy_utils.py index 9b5dc0c71..230646ab9 100644 --- a/ironic/drivers/modules/deploy_utils.py +++ b/ironic/drivers/modules/deploy_utils.py @@ -463,7 +463,7 @@ def fetch_images(ctx, cache, images_info, force_raw=True): cache.fetch_image(href, path, ctx=ctx, force_raw=force_raw) -def set_failed_state(task, msg): +def set_failed_state(task, msg, collect_logs=True): """Sets the deploy status as failed with relevant messages. This method sets the deployment as fail with the given message. @@ -472,10 +472,15 @@ def set_failed_state(task, msg): :param task: a TaskManager instance containing the node to act on. :param msg: the message to set in last_error of the node. + :param collect_logs: boolean indicating whether to attempt collect + logs from IPA-based ramdisk. Defaults to True. + Actual log collection is also affected by + CONF.agent.deploy_logs_collect config option. """ node = task.node - if CONF.agent.deploy_logs_collect in ('on_failure', 'always'): + if (collect_logs and + CONF.agent.deploy_logs_collect in ('on_failure', 'always')): driver_utils.collect_ramdisk_logs(node) try: diff --git a/ironic/tests/unit/drivers/modules/test_deploy_utils.py b/ironic/tests/unit/drivers/modules/test_deploy_utils.py index 697f434ec..ceb8c4ab2 100644 --- a/ironic/tests/unit/drivers/modules/test_deploy_utils.py +++ b/ironic/tests/unit/drivers/modules/test_deploy_utils.py @@ -1258,13 +1258,18 @@ class OtherFunctionTestCase(db_base.DbTestCase): autospec=True) def _test_set_failed_state(self, mock_event, mock_power, mock_log, event_value=None, power_value=None, - log_calls=None, poweroff=True): + log_calls=None, poweroff=True, + collect_logs=True): err_msg = 'some failure' mock_event.side_effect = event_value mock_power.side_effect = power_value with task_manager.acquire(self.context, self.node.uuid, shared=False) as task: - utils.set_failed_state(task, err_msg) + if collect_logs: + utils.set_failed_state(task, err_msg) + else: + utils.set_failed_state(task, err_msg, + collect_logs=collect_logs) mock_event.assert_called_once_with(task, 'fail') if poweroff: mock_power.assert_called_once_with(task, states.POWER_OFF) @@ -1328,6 +1333,12 @@ class OtherFunctionTestCase(db_base.DbTestCase): self._test_set_failed_state() self.assertFalse(mock_collect.called) + @mock.patch.object(driver_utils, 'collect_ramdisk_logs', autospec=True) + def test_set_failed_state_collect_deploy_logs_overide(self, mock_collect): + cfg.CONF.set_override('deploy_logs_collect', 'always', 'agent') + self._test_set_failed_state(collect_logs=False) + self.assertFalse(mock_collect.called) + def test_get_boot_option(self): self.node.instance_info = {'capabilities': '{"boot_option": "local"}'} result = utils.get_boot_option(self.node) |