mirror of
				https://github.com/ansible-collections/community.general.git
				synced 2024-09-14 20:13:21 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			143 lines
		
	
	
	
		
			4.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			143 lines
		
	
	
	
		
			4.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#!/usr/bin/python
 | 
						|
# -*- coding: utf-8 -*-
 | 
						|
#
 | 
						|
# Author: Artūras 'arturaz' Šlajus <x11@arturaz.net>
 | 
						|
#
 | 
						|
# This module is proudly sponsored by iGeolise (www.igeolise.com) and
 | 
						|
# Tiny Lab Productions (www.tinylabproductions.com).
 | 
						|
 | 
						|
DOCUMENTATION = '''
 | 
						|
---
 | 
						|
module: datadog_event
 | 
						|
short_description: Posts events to DataDog  service
 | 
						|
description:
 | 
						|
- "Allows to post events to DataDog (www.datadoghq.com) service."
 | 
						|
- "Uses http://docs.datadoghq.com/api/#events API."
 | 
						|
version_added: "1.3"
 | 
						|
author: Artūras 'arturaz' Šlajus <x11@arturaz.net>
 | 
						|
notes: []
 | 
						|
requirements: [urllib2]
 | 
						|
options:
 | 
						|
    api_key:
 | 
						|
        description: ["Your DataDog API key."]
 | 
						|
        required: true
 | 
						|
        default: null
 | 
						|
    title:
 | 
						|
        description: ["The event title."]
 | 
						|
        required: true
 | 
						|
        default: null
 | 
						|
    text:
 | 
						|
        description: ["The body of the event."]
 | 
						|
        required: true
 | 
						|
        default: null
 | 
						|
    date_happened:
 | 
						|
        description:
 | 
						|
        - POSIX timestamp of the event.
 | 
						|
        - Default value is now.
 | 
						|
        required: false
 | 
						|
        default: now
 | 
						|
    priority:
 | 
						|
        description: ["The priority of the event."]
 | 
						|
        required: false
 | 
						|
        default: normal
 | 
						|
        choices: [normal, low]
 | 
						|
    tags:
 | 
						|
        description: ["Comma separated list of tags to apply to the event."]
 | 
						|
        required: false
 | 
						|
        default: null
 | 
						|
    alert_type:
 | 
						|
        description: ["Type of alert."]
 | 
						|
        required: false
 | 
						|
        default: info
 | 
						|
        choices: ['error', 'warning', 'info', 'success']
 | 
						|
    aggregation_key:
 | 
						|
        description: ["An arbitrary string to use for aggregation."]
 | 
						|
        required: false
 | 
						|
        default: null
 | 
						|
    validate_certs:
 | 
						|
        description:
 | 
						|
            - If C(no), SSL certificates will not be validated. This should only be used
 | 
						|
              on personally controlled sites using self-signed certificates.
 | 
						|
        required: false
 | 
						|
        default: 'yes'
 | 
						|
        choices: ['yes', 'no']
 | 
						|
        version_added: 1.5.1
 | 
						|
'''
 | 
						|
 | 
						|
EXAMPLES = '''
 | 
						|
# Post an event with low priority
 | 
						|
datadog_event: title="Testing from ansible" text="Test!" priority="low"
 | 
						|
               api_key="6873258723457823548234234234"
 | 
						|
# Post an event with several tags
 | 
						|
datadog_event: title="Testing from ansible" text="Test!"
 | 
						|
               api_key="6873258723457823548234234234"
 | 
						|
               tags=aa,bb,cc
 | 
						|
'''
 | 
						|
 | 
						|
import socket
 | 
						|
 | 
						|
def main():
 | 
						|
    module = AnsibleModule(
 | 
						|
        argument_spec=dict(
 | 
						|
            api_key=dict(required=True),
 | 
						|
            title=dict(required=True),
 | 
						|
            text=dict(required=True),
 | 
						|
            date_happened=dict(required=False, default=None, type='int'),
 | 
						|
            priority=dict(
 | 
						|
                required=False, default='normal', choices=['normal', 'low']
 | 
						|
            ),
 | 
						|
            tags=dict(required=False, default=None),
 | 
						|
            alert_type=dict(
 | 
						|
                required=False, default='info',
 | 
						|
                choices=['error', 'warning', 'info', 'success']
 | 
						|
            ),
 | 
						|
            aggregation_key=dict(required=False, default=None),
 | 
						|
            source_type_name=dict(
 | 
						|
                required=False, default='my apps',
 | 
						|
                choices=['nagios', 'hudson', 'jenkins', 'user', 'my apps',
 | 
						|
                         'feed', 'chef', 'puppet', 'git', 'bitbucket', 'fabric',
 | 
						|
                         'capistrano']
 | 
						|
            ),
 | 
						|
            validate_certs = dict(default='yes', type='bool'),
 | 
						|
        )
 | 
						|
    )
 | 
						|
 | 
						|
    post_event(module)
 | 
						|
 | 
						|
def post_event(module):
 | 
						|
    uri = "https://app.datadoghq.com/api/v1/events?api_key=%s" % module.params['api_key']
 | 
						|
 | 
						|
    body = dict(
 | 
						|
        title=module.params['title'],
 | 
						|
        text=module.params['text'],
 | 
						|
        priority=module.params['priority'],
 | 
						|
        alert_type=module.params['alert_type']
 | 
						|
    )
 | 
						|
    if module.params['date_happened'] != None:
 | 
						|
        body['date_happened'] = module.params['date_happened']
 | 
						|
    if module.params['tags'] != None:
 | 
						|
        body['tags'] = module.params['tags'].split(",")
 | 
						|
    if module.params['aggregation_key'] != None:
 | 
						|
        body['aggregation_key'] = module.params['aggregation_key']
 | 
						|
    if module.params['source_type_name'] != None:
 | 
						|
        body['source_type_name'] = module.params['source_type_name']
 | 
						|
 | 
						|
    json_body = module.jsonify(body)
 | 
						|
    headers = {"Content-Type": "application/json"}
 | 
						|
 | 
						|
    (response, info) = fetch_url(module, uri, data=json_body, headers=headers)
 | 
						|
    if info['status'] == 200:
 | 
						|
        response_body = response.read()
 | 
						|
        response_json = module.from_json(response_body)
 | 
						|
        if response_json['status'] == 'ok':
 | 
						|
            module.exit_json(changed=True)
 | 
						|
        else:
 | 
						|
            module.fail_json(msg=response)
 | 
						|
    else:
 | 
						|
        module.fail_json(**info)
 | 
						|
 | 
						|
# import module snippets
 | 
						|
from ansible.module_utils.basic import *
 | 
						|
from ansible.module_utils.urls import *
 | 
						|
 | 
						|
main()
 |