diff options
Diffstat (limited to 'lib/ansible/modules/monitoring/sensu/sensu_silence.py')
-rw-r--r-- | lib/ansible/modules/monitoring/sensu/sensu_silence.py | 296 |
1 files changed, 0 insertions, 296 deletions
diff --git a/lib/ansible/modules/monitoring/sensu/sensu_silence.py b/lib/ansible/modules/monitoring/sensu/sensu_silence.py deleted file mode 100644 index 3e5a84244c..0000000000 --- a/lib/ansible/modules/monitoring/sensu/sensu_silence.py +++ /dev/null @@ -1,296 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - -# (c) 2017, Steven Bambling <smbambling@gmail.com> -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import absolute_import, division, print_function -__metaclass__ = type - - -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'community'} - -DOCUMENTATION = ''' ---- -module: sensu_silence -version_added: "2.4" -author: Steven Bambling (@smbambling) -short_description: Manage Sensu silence entries -description: - - Create and clear (delete) a silence entries via the Sensu API - for subscriptions and checks. -options: - check: - description: - - Specifies the check which the silence entry applies to. - creator: - description: - - Specifies the entity responsible for this entry. - expire: - description: - - If specified, the silence entry will be automatically cleared - after this number of seconds. - expire_on_resolve: - description: - - If specified as true, the silence entry will be automatically - cleared once the condition it is silencing is resolved. - type: bool - reason: - description: - - If specified, this free-form string is used to provide context or - rationale for the reason this silence entry was created. - state: - description: - - Specifies to create or clear (delete) a silence entry via the Sensu API - required: true - default: present - choices: ['present', 'absent'] - subscription: - description: - - Specifies the subscription which the silence entry applies to. - - To create a silence entry for a client prepend C(client:) to client name. - Example - C(client:server1.example.dev) - required: true - default: [] - url: - description: - - Specifies the URL of the Sensu monitoring host server. - required: false - default: http://127.0.01:4567 -''' - -EXAMPLES = ''' -# Silence ALL checks for a given client -- name: Silence server1.example.dev - sensu_silence: - subscription: client:server1.example.dev - creator: "{{ ansible_user_id }}" - reason: Performing maintenance - -# Silence specific check for a client -- name: Silence CPU_Usage check for server1.example.dev - sensu_silence: - subscription: client:server1.example.dev - check: CPU_Usage - creator: "{{ ansible_user_id }}" - reason: Investigation alert issue - -# Silence multiple clients from a dict - silence: - server1.example.dev: - reason: 'Deployment in progress' - server2.example.dev: - reason: 'Deployment in progress' - -- name: Silence several clients from a dict - sensu_silence: - subscription: "client:{{ item.key }}" - reason: "{{ item.value.reason }}" - creator: "{{ ansible_user_id }}" - with_dict: "{{ silence }}" -''' - -RETURN = ''' -''' - -import json - -from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.urls import fetch_url - - -def query(module, url, check, subscription): - headers = { - 'Content-Type': 'application/json', - } - - url = url + '/silenced' - - request_data = { - 'check': check, - 'subscription': subscription, - } - - # Remove keys with None value - for k, v in dict(request_data).items(): - if v is None: - del request_data[k] - - response, info = fetch_url( - module, url, method='GET', - headers=headers, data=json.dumps(request_data) - ) - - if info['status'] == 500: - module.fail_json( - msg="Failed to query silence %s. Reason: %s" % (subscription, info) - ) - - try: - json_out = json.loads(response.read()) - except Exception: - json_out = "" - - return False, json_out, False - - -def clear(module, url, check, subscription): - # Test if silence exists before clearing - (rc, out, changed) = query(module, url, check, subscription) - - d = dict((i['subscription'], i['check']) for i in out) - subscription_exists = subscription in d - if check and subscription_exists: - exists = (check == d[subscription]) - else: - exists = subscription_exists - - # If check/subscription doesn't exist - # exit with changed state of False - if not exists: - return False, out, changed - - # module.check_mode is inherited from the AnsibleMOdule class - if not module.check_mode: - headers = { - 'Content-Type': 'application/json', - } - - url = url + '/silenced/clear' - - request_data = { - 'check': check, - 'subscription': subscription, - } - - # Remove keys with None value - for k, v in dict(request_data).items(): - if v is None: - del request_data[k] - - response, info = fetch_url( - module, url, method='POST', - headers=headers, data=json.dumps(request_data) - ) - - if info['status'] != 204: - module.fail_json( - msg="Failed to silence %s. Reason: %s" % (subscription, info) - ) - - try: - json_out = json.loads(response.read()) - except Exception: - json_out = "" - - return False, json_out, True - return False, out, True - - -def create( - module, url, check, creator, expire, - expire_on_resolve, reason, subscription): - (rc, out, changed) = query(module, url, check, subscription) - for i in out: - if (i['subscription'] == subscription): - if ( - (check is None or check == i['check']) and - ( - creator == '' or - creator == i['creator'])and - ( - reason == '' or - reason == i['reason']) and - ( - expire is None or expire == i['expire']) and - ( - expire_on_resolve is None or - expire_on_resolve == i['expire_on_resolve'] - ) - ): - return False, out, False - - # module.check_mode is inherited from the AnsibleMOdule class - if not module.check_mode: - headers = { - 'Content-Type': 'application/json', - } - - url = url + '/silenced' - - request_data = { - 'check': check, - 'creator': creator, - 'expire': expire, - 'expire_on_resolve': expire_on_resolve, - 'reason': reason, - 'subscription': subscription, - } - - # Remove keys with None value - for k, v in dict(request_data).items(): - if v is None: - del request_data[k] - - response, info = fetch_url( - module, url, method='POST', - headers=headers, data=json.dumps(request_data) - ) - - if info['status'] != 201: - module.fail_json( - msg="Failed to silence %s. Reason: %s" % - (subscription, info['msg']) - ) - - try: - json_out = json.loads(response.read()) - except Exception: - json_out = "" - - return False, json_out, True - return False, out, True - - -def main(): - module = AnsibleModule( - argument_spec=dict( - check=dict(required=False), - creator=dict(required=False), - expire=dict(type='int', required=False), - expire_on_resolve=dict(type='bool', required=False), - reason=dict(required=False), - state=dict(default='present', choices=['present', 'absent']), - subscription=dict(required=True), - url=dict(required=False, default='http://127.0.01:4567'), - ), - supports_check_mode=True - ) - - url = module.params['url'] - check = module.params['check'] - creator = module.params['creator'] - expire = module.params['expire'] - expire_on_resolve = module.params['expire_on_resolve'] - reason = module.params['reason'] - subscription = module.params['subscription'] - state = module.params['state'] - - if state == 'present': - (rc, out, changed) = create( - module, url, check, creator, - expire, expire_on_resolve, reason, subscription - ) - - if state == 'absent': - (rc, out, changed) = clear(module, url, check, subscription) - - if rc != 0: - module.fail_json(msg="failed", result=out) - module.exit_json(msg="success", result=out, changed=changed) - - -if __name__ == '__main__': - main() |