Some attributes of callbacks aren't in v2. Port plugins to the v2 way to do that

Update porting guide with info on callback porting
This commit is contained in:
Toshio Kuratomi 2016-01-29 18:58:01 -08:00
parent fb57818ea3
commit 9e3932ffca
3 changed files with 47 additions and 2 deletions

View file

@ -168,7 +168,33 @@ Action plugins
Callback plugins
----------------
* callback plugins
Although Ansible 2.0 provides a new callback API the old one continues to work
for most callback plugins. However, if your callback plugin makes use of
:attr:`self.playbook`, :attr:`self.play`, or :attr:`self.task` then you will
have to store the values for these yourself as ansible no longer automatically
populates the callback with them. Here's a short snippet that shows you how::
from ansible.plugins.callback import CallbackBase
class CallbackModule(CallbackBase):
def __init__(self):
self.playbook = None
self.play = None
self.task = None
def v2_playbook_on_start(self, playbook):
self.playbook = playbook
def v2_playbook_on_play_start(self, play):
self.play = play
def v2_playbook_on_task_start(self, task, is_conditional):
self.task = task
def v2_on_any(self, *args, **kwargs):
self._display.display('%s: %s: %s' % (self.playbook.name,
self.play.name, self.task))
Connection plugins
------------------

View file

@ -31,8 +31,18 @@ class CallbackModule(CallbackBase):
CALLBACK_NAME = 'context_demo'
CALLBACK_NEEDS_WHITELIST = True
def __init__(self, *args, **kwargs):
self.task = None
self.play = None
def v2_on_any(self, *args, **kwargs):
i = 0
if self.play:
play_str = 'play: %s' % self.play.name
if self.task:
task_str = 'task: %s' % self.task
self._display.display("--- %s %s ---" % (self.play_str, self.task_str))
self._display.display(" --- ARGS ")
for a in args:
self._display.display(' %s: %s' % (i, a))
@ -41,3 +51,9 @@ class CallbackModule(CallbackBase):
self._display.display(" --- KWARGS ")
for k in kwargs:
self._display.display(' %s: %s' % (k, kwargs[k]))
def v2_playbook_on_play_start(self, play):
self.play = play
def v2_playbook_on_task_start(self, task, is_conditional):
self.task = task

View file

@ -73,6 +73,7 @@ class CallbackModule(CallbackBase):
self.printed_playbook = False
self.playbook_name = None
self.play = None
def send_msg(self, msg, msg_format='text', color='yellow', notify=False):
"""Method for sending a message to HipChat"""
@ -93,9 +94,11 @@ class CallbackModule(CallbackBase):
self.display.warning('Could not submit message to hipchat')
def playbook_on_play_start(self, name):
def v2_playbook_on_play_start(self, play):
"""Display Playbook and play start messages"""
self.play = play
name = play.name
# This block sends information about a playbook when it starts
# The playbook object is not immediately available at
# playbook_on_start so we grab it via the play