summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--notification/campfire.py72
1 files changed, 27 insertions, 45 deletions
diff --git a/notification/campfire.py b/notification/campfire.py
index 2400ad3b..62d65015 100644
--- a/notification/campfire.py
+++ b/notification/campfire.py
@@ -42,7 +42,7 @@ options:
"vuvuzela", "what", "whoomp", "yeah", "yodel"]
# informational: requirements for nodes
-requirements: [ urllib2, cgi ]
+requirements: [ ]
author: "Adam Garside (@fabulops)"
'''
@@ -53,19 +53,10 @@ EXAMPLES = '''
msg="Task completed ... with feeling."
'''
+import cgi
def main():
- try:
- import urllib2
- except ImportError:
- module.fail_json(msg="urllib2 is required")
-
- try:
- import cgi
- except ImportError:
- module.fail_json(msg="cgi is required")
-
module = AnsibleModule(
argument_spec=dict(
subscription=dict(required=True),
@@ -102,42 +93,33 @@ def main():
MSTR = "<message><body>%s</body></message>"
AGENT = "Ansible/1.2"
- try:
-
- # Setup basic auth using token as the username
- pm = urllib2.HTTPPasswordMgrWithDefaultRealm()
- pm.add_password(None, URI, token, 'X')
-
- # Setup Handler and define the opener for the request
- handler = urllib2.HTTPBasicAuthHandler(pm)
- opener = urllib2.build_opener(handler)
-
- target_url = '%s/room/%s/speak.xml' % (URI, room)
-
- # Send some audible notification if requested
- if notify:
- req = urllib2.Request(target_url, NSTR % cgi.escape(notify))
- req.add_header('Content-Type', 'application/xml')
- req.add_header('User-agent', AGENT)
- response = opener.open(req)
-
- # Send the message
- req = urllib2.Request(target_url, MSTR % cgi.escape(msg))
- req.add_header('Content-Type', 'application/xml')
- req.add_header('User-agent', AGENT)
- response = opener.open(req)
-
- except urllib2.HTTPError, e:
- if not (200 <= e.code < 300):
- module.fail_json(msg="unable to send msg: '%s', campfire api"
- " returned error code: '%s'" %
- (msg, e.code))
-
- except Exception, e:
- module.fail_json(msg="unable to send msg: %s" % msg)
+ # Hack to add basic auth username and password the way fetch_url expects
+ module.params['username'] = token
+ module.params['password'] = 'X'
+
+ target_url = '%s/room/%s/speak.xml' % (URI, room)
+ headers = {'Content-Type': 'application/xml',
+ 'User-agent': AGENT}
+
+ # Send some audible notification if requested
+ if notify:
+ response, info = fetch_url(module, target_url, data=NSTR % cgi.escape(notify), headers=headers)
+ if info['status'] != 200:
+ module.fail_json(msg="unable to send msg: '%s', campfire api"
+ " returned error code: '%s'" %
+ (notify, info['status']))
+
+ # Send the message
+ response, info = fetch_url(module, target_url, data=MSTR %cgi.escape(msg), headers=headers)
+ if info['status'] != 200:
+ module.fail_json(msg="unable to send msg: '%s', campfire api"
+ " returned error code: '%s'" %
+ (msg, info['status']))
module.exit_json(changed=True, room=room, msg=msg, notify=notify)
# import module snippets
from ansible.module_utils.basic import *
-main()
+from ansible.module_utils.urls import *
+if __name__ == '__main__':
+ main()