Environment Variables - Slack.py

Hi @sivel

I am trying to get an Slack callback plugin to work (https://github.com/sivel/ansible/blob/slack-callback/plugins/callbacks/slack.py#L142-L147), but I am getting the following error:#

Unexpected Exception: ‘module’ object has no attribute ‘warning’

You can see the what I am trying to achieve here: https://github.com/ansible/ansible/pull/8955

When looking at the file I see that it mentions the following:

class CallbackModule(object):

“”"This is an example ansible callback plugin that sends status

updates to a Slack channel during playbook execution.

This plugin makes use of the following environment variables:

SLACK_TOKEN (required): Slack Integration token

SLACK_TEAM (required): Slack team name TEAM.slack.com

SLACK_CHANNEL (optional): Slack room to post in. Default: ansible

SLACK_USERNAME (optional): Username to post as. Default: ansible

Requires:

prettytable

“”"

Where would I need to insert these SLACK environment variables in order for this file to access this information?

Those environment variables need to be set in the shell that you execute Ansible from. Also that branch/PR that you reference is for Ansible 1.9. If you need a version that works with Ansible 2.0, see https://github.com/ansible/ansible/pull/13408

Hi Matt

I have now updated the slack.py with the following code (https://github.com/sivel/ansible/blob/v2-slack-callback/lib/ansible/plugins/callback/slack.py), as I am running Ansible v2.

I have added the environmental variables into a ver basic playbook to see if it posts the results to Slack (see below):

In Ansible v2 you must whitelist callback plugins in ansible.cfg. Additionally, the environment vars must be set in your shell, not in the playbook.

In bash this would be done from a .bash_profile or directly on the command line by using:

export SLACK_TOKEN=mytoken

Hi Matt

Thanks for your quick responses.

I have now added SLACK_WEBHOOK_URL and SLACK_CHANNEL to the environment var in the shell

SLACK_TOKEN=https://hooks.slack.com/services/xxxxxx/yyyyyyyy/token
SLACK_CHANNEL=#ansible

I have also added the withlist entry into ansible.cfg:

set plugin path directories here, separate with colons

action_plugins = /usr/share/ansible_plugins/action_plugins
callback_plugins = /usr/share/ansible_plugins/callback_plugins
connection_plugins = /usr/share/ansible_plugins/connection_plugins
lookup_plugins = /usr/share/ansible_plugins/lookup_plugins
vars_plugins = /usr/share/ansible_plugins/vars_plugins
filter_plugins = /usr/share/ansible_plugins/filter_plugins

callback_whitelist = slack.py

I then try run the playbook:

I think the whitelist is just slack without the file extension.

Also, if you run Ansible with higher verbosity, it will show you which callbacks are being loaded.

you should not need to whitelist custom plugins, that was done only
for the plugins shipped with ansible (which have a variable that
indicates they NEED the whitelist to work).

All working mate! Thank you so much for your help!

Hi guys

This is working perfectly running playbooks from the server. But when I run any playbooks from Ansible Tower nothing is being send to Slack.

Is there something that you know that needs to be done in order for this to work?

Cheers
Mark