From 2f2a69ad8832446f2992286c8ab5822c480c695d Mon Sep 17 00:00:00 2001 From: Matthew Makai Date: Mon, 13 Apr 2015 10:25:24 -0400 Subject: [PATCH] updating sendgrid module based on code review by @abadger --- notification/sendgrid.py | 47 ++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/notification/sendgrid.py b/notification/sendgrid.py index 6c5264521c2..d8bfb7d6a2e 100644 --- a/notification/sendgrid.py +++ b/notification/sendgrid.py @@ -27,8 +27,10 @@ description: - Sends an email with a SendGrid account through their API, not through the SMTP service. notes: - - Like the other notification modules, this one requires an external - dependency to work. In this case, you'll need an active SendGrid + - This module is non-idempotent because it sends an email through the + external API. It is idempotent only in the case that the module fails. + - Like the other notification modules, this one requires an external + dependency to work. In this case, you'll need an active SendGrid account. options: username: @@ -51,31 +53,32 @@ options: the desired subject for the email required: true -requirements: [ urllib, urllib2 ] author: Matt Makai ''' EXAMPLES = ''' # send an email to a single recipient that the deployment was successful -- local_action: sendgrid - username={{ sendgrid_username }} - password={{ sendgrid_password }} - from_address="ansible@mycompany.com" - to_addresses: - - "ops@mycompany.com" - subject="Deployment success." - body="The most recent Ansible deployment was successful." +- sendgrid: + username: "{{ sendgrid_username }}" + password: "{{ sendgrid_password }}" + from_address: "ansible@mycompany.com" + to_addresses: + - "ops@mycompany.com" + subject: "Deployment success." + body: "The most recent Ansible deployment was successful." + delegate_to: localhost # send an email to more than one recipient that the build failed -- local_action: sendgrid - username={{ sendgrid_username }} - password={{ sendgrid_password }} - from_address="build@mycompany.com" +- sendgrid + username: "{{ sendgrid_username }}" + password: "{{ sendgrid_password }}" + from_address: "build@mycompany.com" to_addresses: - "ops@mycompany.com" - "devteam@mycompany.com" - subject="Build failure!." - body="Unable to pull source repository from Git server." + subject: "Build failure!." + body: "Unable to pull source repository from Git server." + delegate_to: localhost ''' # ======================================= @@ -91,13 +94,15 @@ import base64 def post_sendgrid_api(module, username, password, from_address, to_addresses, subject, body): SENDGRID_URI = "https://api.sendgrid.com/api/mail.send.json" - AGENT = "Ansible/1.7" - data = {'api_user':username, 'api_key':password, + AGENT = "Ansible" + data = {'api_user': username, 'api_key':password, 'from':from_address, 'subject': subject, 'text': body} encoded_data = urllib.urlencode(data) to_addresses_api = '' for recipient in to_addresses: - to_addresses_api += '&to[]=%s' % str(recipient) + if isinstance(recipient, unicode): + recipient = recipient.encode('utf-8') + to_addresses_api += '&to[]=%s' % recipient encoded_data += to_addresses_api request = urllib2.Request(SENDGRID_URI) request.add_header('User-Agent', AGENT) @@ -133,7 +138,7 @@ def main(): try: response = post_sendgrid_api(module, username, password, from_address, to_addresses, subject, body) - except Exception, e: + except Exception: module.fail_json(msg="unable to send email through SendGrid API") module.exit_json(msg=subject, changed=False)