summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavlo Shchelokovskyy <pshchelokovskyy@mirantis.com>2016-08-23 21:33:01 +0300
committerPavlo Shchelokovskyy <pshchelokovskyy@mirantis.com>2016-08-29 18:10:53 +0300
commitbb62f256f7aa55c292ebeae73ca25a4a9f0ec8c0 (patch)
tree8d3d9ab94f6f96b86c985329a1c2f22d46a29f4f
parent46dc3959e35400dbadad1bf2ed3733ee44e77dc5 (diff)
downloadironic-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.py9
-rw-r--r--ironic/tests/unit/drivers/modules/test_deploy_utils.py15
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)