salt/modules/pushbullet.py
# -*- coding: utf-8 -*-
'''
Module for sending messages to Pushbullet (https://www.pushbullet.com)
.. versionadded:: 2015.8.0
Requires an ``api_key`` in ``/etc/salt/minion``:
.. code-block: yaml
pushbullet:
api_key: 'ABC123abc123ABC123abc123ABC123ab'
For example:
.. code-block:: yaml
pushbullet:
device: "Chrome"
title: "Example push message"
body: "Message body."
'''
# Import python libs
from __future__ import absolute_import, print_function, unicode_literals
import logging
try:
import pushbullet
HAS_PUSHBULLET = True
except ImportError:
HAS_PUSHBULLET = False
log = logging.getLogger(__name__)
def __virtual__():
if not HAS_PUSHBULLET:
return (False, 'Missing pushbullet library.')
if not __salt__['config.get']('pushbullet.api_key') and \
not __salt__['config.get']('pushbullet:api_key'):
return (False, 'Pushbullet API Key Unavailable, not loading.')
return True
class _SaltPushbullet(object):
def __init__(self, device_name):
api_key = __salt__['config.get']('pushbullet.api_key') or \
__salt__['config.get']('pushbullet:api_key')
self.pb = pushbullet.Pushbullet(api_key)
self.target = self._find_device_by_name(device_name)
def push_note(self, title, body):
push = self.pb.push_note(title, body, device=self.target)
return push
def _find_device_by_name(self, name):
for dev in self.pb.devices:
if dev.nickname == name:
return dev
def push_note(device=None, title=None, body=None):
'''
Pushing a text note.
:param device: Pushbullet target device
:param title: Note title
:param body: Note body
:return: Boolean if message was sent successfully.
CLI Example:
.. code-block:: bash
salt "*" pushbullet.push_note device="Chrome" title="Example title" body="Example body."
'''
spb = _SaltPushbullet(device)
res = spb.push_note(title, body)
return res