diff --git a/notification/hipchat b/notification/hipchat new file mode 100644 index 00000000000..207b1bf1298 --- /dev/null +++ b/notification/hipchat @@ -0,0 +1,143 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +DOCUMENTATION = ''' +--- +module: hipchat +short_description: Send a message to hipchat +description: + - Send a message to hipchat +options: + token: + description: + - API token. + required: true + room: + description: + - ID or name of the room. + required: true + from: + description: + - Name the message will appear be sent from. max 15 characters. + Over 15, will be shorten. + required: false + default: Ansible + msg: + description: + - The message body. + required: true + default: null + color: + description: + - Background color for the message. Default is yellow. + required: false + default: yellow + choices: [ "yellow", "red", "green", "purple", "gray", "random" ] + msg_format: + description: + - message format. html or text. Default is text. + required: false + default: text + choices: [ "text", "html" ] + notify: + description: + - notify or not (change the tab color, play a sound, etc) + required: false + default: true + choices: [ "true", "false" ] + +# informational: requirements for nodes +requirements: [ urllib, urllib2 ] +author: WAKAYAMA Shirou +''' + +EXAMPLES = ''' +action: hipchat token=AAAAAA room=notify msg=Ansible task finished +''' + +# =========================================== +# HipChat module specific support methods. +# + +HAS_URLLIB = True +try: + import urllib +except ImportError: + HAS_URLLIB = False + +HAS_URLLIB2 = True +try: + import urllib2 +except ImportError: + HAS_URLLIB2 = False + +MSG_URI = "https://api.hipchat.com/v1/rooms/message?" + + +def send_msg(token, room, msg_from, msg, msg_format='text', + color='yellow', notify=False): + '''sending message to hipchat''' + + params = {} + params['room_id'] = room + params['from'] = msg_from[:15] # max length is 15 + params['message'] = msg + params['message_format'] = msg_format + params['color'] = color + + if notify: + params['notify'] = 1 + else: + params['notify'] = 0 + + url = MSG_URI + "auth_token=%s" % (token) + response = urllib2.urlopen(url, urllib.urlencode(params)) + return response.read() + + +# =========================================== +# Module execution. +# + +def main(): + + if not HAS_URLLIB: + module.fail_json(msg="urllib is not installed") + if not HAS_URLLIB2: + module.fail_json(msg="urllib2 is not installed") + + module = AnsibleModule( + argument_spec=dict( + token=dict(required=True), + room=dict(required=True), + msg=dict(required=True), + msg_from=dict(default="Ansible"), + color=dict(default="yellow", choices=["yellow", "red", "green", + "purple", "gray", "random"]), + msg_format=dict(default="text", choices=["text", "html"]), + notify=dict(default=True, choices=BOOLEANS), + ), + supports_check_mode=True + ) + + token = module.params["token"] + room = module.params["room"] + msg = module.params["msg"] + msg_from = module.params["msg_from"] + color = module.params["color"] + msg_format = module.params["msg_format"] + notify = module.params["notify"] + + try: + send_msg(token, room, msg_from, msg, msg_format, + color, notify) + except Exception, e: + module.fail_json(msg="unable to sent msg: %s" % e) + + changed = True + module.exit_json(changed=changed, room=room, msg_from=msg_from, + msg=msg) + +# this is magic, see lib/ansible/module_common.py +#<> +main()