diff options
Diffstat (limited to 'ansible_collections/community/general/plugins/modules/catapult.py')
-rw-r--r-- | ansible_collections/community/general/plugins/modules/catapult.py | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/ansible_collections/community/general/plugins/modules/catapult.py b/ansible_collections/community/general/plugins/modules/catapult.py new file mode 100644 index 000000000..a3bbef6c4 --- /dev/null +++ b/ansible_collections/community/general/plugins/modules/catapult.py @@ -0,0 +1,162 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2016, Jonathan Mainguy <jon@soh.re> +# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) +# SPDX-License-Identifier: GPL-3.0-or-later +# +# basis of code taken from the ansible twillio and nexmo modules + +from __future__ import absolute_import, division, print_function +__metaclass__ = type + + +DOCUMENTATION = ''' +--- +module: catapult +short_description: Send a sms / mms using the catapult bandwidth api +description: + - Allows notifications to be sent using sms / mms via the catapult bandwidth api. +extends_documentation_fragment: + - community.general.attributes +attributes: + check_mode: + support: none + diff_mode: + support: none +options: + src: + type: str + description: + - One of your catapult telephone numbers the message should come from (must be in E.164 format, like C(+19195551212)). + required: true + dest: + type: list + elements: str + description: + - The phone number or numbers the message should be sent to (must be in E.164 format, like C(+19195551212)). + required: true + msg: + type: str + description: + - The contents of the text message (must be 2048 characters or less). + required: true + media: + type: str + description: + - For MMS messages, a media url to the location of the media to be sent with the message. + user_id: + type: str + description: + - User Id from Api account page. + required: true + api_token: + type: str + description: + - Api Token from Api account page. + required: true + api_secret: + type: str + description: + - Api Secret from Api account page. + required: true + +author: "Jonathan Mainguy (@Jmainguy)" +notes: + - Will return changed even if the media url is wrong. + - Will return changed if the destination number is invalid. + +''' + +EXAMPLES = ''' +- name: Send a mms to multiple users + community.general.catapult: + src: "+15035555555" + dest: + - "+12525089000" + - "+12018994225" + media: "http://example.com/foobar.jpg" + msg: "Task is complete" + user_id: "{{ user_id }}" + api_token: "{{ api_token }}" + api_secret: "{{ api_secret }}" + +- name: Send a sms to a single user + community.general.catapult: + src: "+15035555555" + dest: "+12018994225" + msg: "Consider yourself notified" + user_id: "{{ user_id }}" + api_token: "{{ api_token }}" + api_secret: "{{ api_secret }}" + +''' + +RETURN = ''' +changed: + description: Whether the api accepted the message. + returned: always + type: bool + sample: true +''' + + +import json + +from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils.urls import fetch_url + + +def send(module, src, dest, msg, media, user_id, api_token, api_secret): + """ + Send the message + """ + AGENT = "Ansible" + URI = "https://api.catapult.inetwork.com/v1/users/%s/messages" % user_id + data = {'from': src, 'to': dest, 'text': msg} + if media: + data['media'] = media + + headers = {'User-Agent': AGENT, 'Content-type': 'application/json'} + + # Hack module params to have the Basic auth params that fetch_url expects + module.params['url_username'] = api_token.replace('\n', '') + module.params['url_password'] = api_secret.replace('\n', '') + + return fetch_url(module, URI, data=json.dumps(data), headers=headers, method="post") + + +def main(): + module = AnsibleModule( + argument_spec=dict( + src=dict(required=True), + dest=dict(required=True, type='list', elements='str'), + msg=dict(required=True), + user_id=dict(required=True), + api_token=dict(required=True, no_log=True), + api_secret=dict(required=True, no_log=True), + media=dict(default=None, required=False), + ), + ) + + src = module.params['src'] + dest = module.params['dest'] + msg = module.params['msg'] + media = module.params['media'] + user_id = module.params['user_id'] + api_token = module.params['api_token'] + api_secret = module.params['api_secret'] + + for number in dest: + rc, info = send(module, src, number, msg, media, user_id, api_token, api_secret) + if info["status"] != 201: + body = json.loads(info["body"]) + fail_msg = body["message"] + module.fail_json(msg=fail_msg) + + changed = True + module.exit_json(changed=changed) + + +if __name__ == '__main__': + main() |