From 24a7da13190db9fe3ac8da93cc9608d8ec157f5f Mon Sep 17 00:00:00 2001 From: Michael DeHaan Date: Mon, 7 Jul 2014 10:36:11 -0400 Subject: [PATCH] Pagerduty has advocated not using ansible for certain sizes of infrastructure. This module is removed until this is corrected. http://blog.pagerduty.com/2014/06/10-common-ops-mistakes/?utm_source=twitter&utm_medium=social&utm_campaign=blog --- monitoring/pagerduty | 177 ------------------------------------------- 1 file changed, 177 deletions(-) delete mode 100644 monitoring/pagerduty diff --git a/monitoring/pagerduty b/monitoring/pagerduty deleted file mode 100644 index 2c89b8f4512..00000000000 --- a/monitoring/pagerduty +++ /dev/null @@ -1,177 +0,0 @@ -#!/usr/bin/python - -DOCUMENTATION = ''' - -module: pagerduty -short_description: Create PagerDuty maintenance windows -description: - - This module will let you create PagerDuty maintenance windows -version_added: "1.2" -author: Justin Johns -requirements: - - PagerDuty API access -options: - state: - description: - - Create a maintenance window or get a list of ongoing windows. - required: true - default: null - choices: [ "running", "started", "ongoing" ] - aliases: [] - name: - description: - - PagerDuty unique subdomain. - required: true - default: null - choices: [] - aliases: [] - user: - description: - - PagerDuty user ID. - required: true - default: null - choices: [] - aliases: [] - passwd: - description: - - PagerDuty user password. - required: true - default: null - choices: [] - aliases: [] - service: - description: - - PagerDuty service ID. - required: false - default: null - choices: [] - aliases: [] - hours: - description: - - Length of maintenance window in hours. - required: false - default: 1 - choices: [] - aliases: [] - desc: - description: - - Short description of maintenance window. - required: false - default: Created by Ansible - choices: [] - aliases: [] - 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 - -notes: - - This module does not yet have support to end maintenance windows. -''' - -EXAMPLES=''' -# List ongoing maintenance windows. -- pagerduty: name=companyabc user=example@example.com passwd=password123 state=ongoing - -# Create a 1 hour maintenance window for service FOO123. -- pagerduty: name=companyabc - user=example@example.com - passwd=password123 - state=running - service=FOO123 - -# Create a 4 hour maintenance window for service FOO123 with the description "deployment". -- pagerduty: name=companyabc - user=example@example.com - passwd=password123 - state=running - service=FOO123 - hours=4 - desc=deployment -''' - -import json -import datetime -import base64 - - -def ongoing(module, name, user, passwd): - - url = "https://" + name + ".pagerduty.com/api/v1/maintenance_windows/ongoing" - auth = base64.encodestring('%s:%s' % (user, passwd)).replace('\n', '') - headers = {"Authorization": "Basic %s" % auth} - - response, info = fetch_url(module, url, headers=headers) - if info['status'] != 200: - module.fail_json(msg="failed to lookup the ongoing window: %s" % info['msg']) - - return False, response.read() - - -def create(module, name, user, passwd, service, hours, desc): - - now = datetime.datetime.utcnow() - later = now + datetime.timedelta(hours=int(hours)) - start = now.strftime("%Y-%m-%dT%H:%M:%SZ") - end = later.strftime("%Y-%m-%dT%H:%M:%SZ") - - url = "https://" + name + ".pagerduty.com/api/v1/maintenance_windows" - auth = base64.encodestring('%s:%s' % (user, passwd)).replace('\n', '') - headers = { - 'Authorization': 'Basic %s' % auth, - 'Content-Type' : 'application/json', - } - data = json.dumps({'maintenance_window': {'start_time': start, 'end_time': end, 'description': desc, 'service_ids': [service]}}) - - response, info = fetch_url(module, url, data=data, headers=headers, method='POST') - if info['status'] != 200: - module.fail_json(msg="failed to create the window: %s" % info['msg']) - - return False, response.read() - - -def main(): - - module = AnsibleModule( - argument_spec=dict( - state=dict(required=True, choices=['running', 'started', 'ongoing']), - name=dict(required=True), - user=dict(required=True), - passwd=dict(required=True), - service=dict(required=False), - hours=dict(default='1', required=False), - desc=dict(default='Created by Ansible', required=False), - validate_certs = dict(default='yes', type='bool'), - ) - ) - - state = module.params['state'] - name = module.params['name'] - user = module.params['user'] - passwd = module.params['passwd'] - service = module.params['service'] - hours = module.params['hours'] - desc = module.params['desc'] - - if state == "running" or state == "started": - if not service: - module.fail_json(msg="service not specified") - (rc, out) = create(module, name, user, passwd, service, hours, desc) - - if state == "ongoing": - (rc, out) = ongoing(module, name, user, passwd) - - if rc != 0: - module.fail_json(msg="failed", result=out) - - module.exit_json(msg="success", result=out) - -# import module snippets -from ansible.module_utils.basic import * -from ansible.module_utils.urls import * - -main()