def v2_playbook_on_stats(self, stats):
if stats.failures and stats.ok:
color = 'warning'
elif not stats.failures:
color = 'good'
else:
color = 'danger'
end_ts = datetime.now()
delta = humanize.naturaldelta(end_ts - self.start_ts) if self.start_ts else 'unknown'
title = "Playbook {name} run in {time}".format(name=self.playbook_name, time=delta)
hosts = stats.processed.keys()
payload = {'attachments': [
{
'title': title,
'color': color,
'author_name': self.user,
'fields': [{
'title': '',
'value': "{emoji} {host}".format(
emoji=':boom:' if host in stats.failures else ':ok_hand:',
host=host,
),
'short': True,
} for host in hosts],
# For IRC users
'fallback': '\n'.join([title, "by {0}".format(self.user)] + [
' - {host}: {status}'.format(
host=host,
status='failed' if host in stats.failures else 'ok',
)
for host in hosts
]),
}
]}
if os.environ.get('VAGRANT_EXECUTABLE'): # Do not post on slack when playbook is run by Vagrant
print('{delimiter}POST {url}\n{payload}{delimiter}'.format(
url=self.slack_hook_url,
payload=json.dumps(payload, indent=True),
delimiter='\n' + '-' * 30 + ' slack ' + '-' * 30 + '\n',
))
elif not self.skip_slack:
requests.post(self.slack_hook_url, data=json.dumps(payload))
评论列表
文章目录