%PDF- %PDF-
Direktori : /usr/lib/python2.7/site-packages/salt/modules/ |
Current File : //usr/lib/python2.7/site-packages/salt/modules/msteams.py |
# -*- coding: utf-8 -*- ''' Module for sending messages to MS Teams .. versionadded:: 2017.7.0 :configuration: This module can be used by either passing a hook_url directly or by specifying it in a configuration profile in the salt master/minion config. For example: .. code-block:: yaml msteams: hook_url: https://outlook.office.com/webhook/837 ''' # Import Python libs from __future__ import absolute_import, print_function, unicode_literals import logging # Import Salt libs import salt.utils.json from salt.exceptions import SaltInvocationError # Import 3rd-party libs import salt.ext.six.moves.http_client # pylint: disable=import-error,no-name-in-module,redefined-builtin log = logging.getLogger(__name__) __virtualname__ = 'msteams' def __virtual__(): ''' Return virtual name of the module. :return: The virtual name of the module. ''' return __virtualname__ def _get_hook_url(): ''' Return hook_url from minion/master config file or from pillar ''' hook_url = __salt__['config.get']('msteams.hook_url') or \ __salt__['config.get']('msteams:hook_url') if not hook_url: raise SaltInvocationError('No MS Teams hook_url found.') return hook_url def post_card(message, hook_url=None, title=None, theme_color=None): ''' Send a message to an MS Teams channel. :param message: The message to send to the MS Teams channel. :param hook_url: The Teams webhook URL, if not specified in the configuration. :param title: Optional title for the posted card :param theme_color: Optional hex color highlight for the posted card :return: Boolean if message was sent successfully. CLI Example: .. code-block:: bash salt '*' msteams.post_card message="Build is done" ''' if not hook_url: hook_url = _get_hook_url() if not message: log.error('message is a required option.') payload = { "text": message, "title": title, "themeColor": theme_color } result = salt.utils.http.query(hook_url, method='POST', data=salt.utils.json.dumps(payload), status=True) if result['status'] <= 201: return True else: return { 'res': False, 'message': result.get('body', result['status']) }