diff options
author | Zuul <zuul@review.opendev.org> | 2020-09-29 16:32:55 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2020-09-29 16:32:55 +0000 |
commit | 87f3a84c8f55b270ec19e4a04de135d6ae7f2cfb (patch) | |
tree | 658dee5f27cd763e95fe010e1fbaf6021f18e9df /ironic/conductor/utils.py | |
parent | e46311d57d994478559e7e64c7fe3d6a06f6263b (diff) | |
parent | 0c3f52ec9a12c5854d326bc95fab78e6e87b4dcb (diff) | |
download | ironic-87f3a84c8f55b270ec19e4a04de135d6ae7f2cfb.tar.gz |
Merge "Do not silently ignore exceptions when running next steps"
Diffstat (limited to 'ironic/conductor/utils.py')
-rw-r--r-- | ironic/conductor/utils.py | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/ironic/conductor/utils.py b/ironic/conductor/utils.py index 2e97be54d..ae481283c 100644 --- a/ironic/conductor/utils.py +++ b/ironic/conductor/utils.py @@ -16,6 +16,7 @@ import contextlib import crypt import datetime from distutils.version import StrictVersion +import functools import os import secrets import time @@ -563,6 +564,21 @@ def deploying_error_handler(task, logmsg, errmsg=None, traceback=False, task.process_event('fail') +def fail_on_error(error_callback, msg, *error_args, **error_kwargs): + """A decorator for failing operation on failure.""" + def wrapper(func): + @functools.wraps(func) + def wrapped(task, *args, **kwargs): + try: + return func(task, *args, **kwargs) + except Exception as exc: + errmsg = "%s. %s: %s" % (msg, exc.__class__.__name__, exc) + error_callback(task, errmsg, *error_args, **error_kwargs) + + return wrapped + return wrapper + + @task_manager.require_exclusive_lock def abort_on_conductor_take_over(task): """Set node's state when a task was aborted due to conductor take over. |