summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Paul <cpaul@ansible.com>2015-12-09 18:08:44 -0500
committerCharles Paul <cpaul@ansible.com>2015-12-09 18:08:44 -0500
commitfdfe1939e8ad55386ce3e1c9cdc172f8cfe260a5 (patch)
tree9a84b8e4dc12f647695e4d5b840247cc1719ce5c
parent7936a4687e9be3752bdbee006d956ed4f2687160 (diff)
downloadansible-adhoc_callback.tar.gz
custom callbacks with adhoc cliadhoc_callback
-rw-r--r--lib/ansible/cli/__init__.py3
-rw-r--r--lib/ansible/cli/adhoc.py5
-rw-r--r--lib/ansible/executor/task_queue_manager.py12
3 files changed, 15 insertions, 5 deletions
diff --git a/lib/ansible/cli/__init__.py b/lib/ansible/cli/__init__.py
index da1aabcc69..a934a3a8ee 100644
--- a/lib/ansible/cli/__init__.py
+++ b/lib/ansible/cli/__init__.py
@@ -66,7 +66,7 @@ class CLI(object):
LESS_OPTS = 'FRSX' # -F (quit-if-one-screen) -R (allow raw ansi control chars)
# -S (chop long lines) -X (disable termcap init and de-init)
- def __init__(self, args):
+ def __init__(self, args, callback=None):
"""
Base init method for all command line programs
"""
@@ -75,6 +75,7 @@ class CLI(object):
self.options = None
self.parser = None
self.action = None
+ self.callback = callback
def set_action(self):
"""
diff --git a/lib/ansible/cli/adhoc.py b/lib/ansible/cli/adhoc.py
index f6dcb37a8a..41a59a58f5 100644
--- a/lib/ansible/cli/adhoc.py
+++ b/lib/ansible/cli/adhoc.py
@@ -158,7 +158,9 @@ class AdHocCLI(CLI):
play_ds = self._play_ds(pattern, self.options.seconds, self.options.poll_interval)
play = Play().load(play_ds, variable_manager=variable_manager, loader=loader)
- if self.options.one_line:
+ if self.callback:
+ cb = self.callback
+ elif self.options.one_line:
cb = 'oneline'
else:
cb = 'minimal'
@@ -166,7 +168,6 @@ class AdHocCLI(CLI):
if self.options.tree:
C.DEFAULT_CALLBACK_WHITELIST.append('tree')
C.TREE_DIR = self.options.tree
-
# now create a task queue manager to execute the play
self._tqm = None
try:
diff --git a/lib/ansible/executor/task_queue_manager.py b/lib/ansible/executor/task_queue_manager.py
index 70cefee510..7f65e2253e 100644
--- a/lib/ansible/executor/task_queue_manager.py
+++ b/lib/ansible/executor/task_queue_manager.py
@@ -32,6 +32,7 @@ from ansible.executor.process.result import ResultProcess
from ansible.executor.stats import AggregateStats
from ansible.playbook.play_context import PlayContext
from ansible.plugins import callback_loader, strategy_loader, module_loader
+from ansible.plugins.callback import CallbackBase
from ansible.template import Templar
from ansible.vars.hostvars import HostVars
@@ -145,8 +146,15 @@ class TaskQueueManager:
if self._stdout_callback is None:
self._stdout_callback = C.DEFAULT_STDOUT_CALLBACK
- if self._stdout_callback not in callback_loader:
- raise AnsibleError("Invalid callback for stdout specified: %s" % self._stdout_callback)
+ if isinstance(self._stdout_callback, CallbackBase):
+ self._callback_plugins.append(self._stdout_callback)
+ stdout_callback_loaded = True
+ elif isinstance(self._stdout_callback, basestring):
+ if self._stdout_callback not in callback_loader:
+ raise AnsibleError("Invalid callback for stdout specified: %s" % self._stdout_callback)
+ else:
+ raise AnsibleError("callback must be an instance of CallbackBase or the name of a callback plugin")
+
for callback_plugin in callback_loader.all(class_only=True):
if hasattr(callback_plugin, 'CALLBACK_VERSION') and callback_plugin.CALLBACK_VERSION >= 2.0: