File: //usr/lib/python2.7/site-packages/salt/returners/sms_return.py
# -*- coding: utf-8 -*-
'''
Return data by SMS.
.. versionadded:: 2015.5.0
:maintainer: Damian Myerscough
:maturity: new
:depends: twilio
:platform: all
To enable this returner the minion will need the python twilio library
installed and the following values configured in the minion or master
config:
.. code-block:: yaml
twilio.sid: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
twilio.token: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
twilio.to: '+1415XXXXXXX'
twilio.from: '+1650XXXXXXX'
To use the sms returner, append '--return sms' to the salt command.
.. code-block:: bash
salt '*' test.ping --return sms
'''
from __future__ import absolute_import, print_function, unicode_literals
import logging
import salt.returners
log = logging.getLogger(__name__)
try:
from twilio.rest import TwilioRestClient
from twilio.rest.exceptions import TwilioRestException
HAS_TWILIO = True
except ImportError:
HAS_TWILIO = False
__virtualname__ = 'sms'
def __virtual__():
if HAS_TWILIO:
return __virtualname__
return False, 'Could not import sms returner; twilio is not installed.'
def _get_options(ret=None):
'''
Get the Twilio options from salt.
'''
attrs = {'sid': 'sid',
'token': 'token',
'to': 'to',
'from': 'from'}
_options = salt.returners.get_returner_options(__virtualname__,
ret,
attrs,
__salt__=__salt__,
__opts__=__opts__)
return _options
def returner(ret):
'''
Return a response in an SMS message
'''
_options = _get_options(ret)
sid = _options.get('sid', None)
token = _options.get('token', None)
sender = _options.get('from', None)
receiver = _options.get('to', None)
if sid is None or token is None:
log.error('Twilio sid/authentication token missing')
return None
if sender is None or receiver is None:
log.error('Twilio to/from fields are missing')
return None
client = TwilioRestClient(sid, token)
try:
message = client.messages.create(
body='Minion: {0}\nCmd: {1}\nSuccess: {2}\n\nJid: {3}'.format(
ret['id'], ret['fun'], ret['success'], ret['jid']
), to=receiver, from_=sender)
except TwilioRestException as e:
log.error(
'Twilio [https://www.twilio.com/docs/errors/%s]',
e.code
)
return False
return True