ansible-role-sensu/library/sensugo_check.py

103 lines
2.7 KiB
Python
Raw Permalink Normal View History

2019-01-01 19:44:04 +00:00
#!/usr/bin/python
from ansible.module_utils.basic import *
from ansible.module_utils.sensu_api import *
class SensuCheck:
def __init__(self, api, name, namespace):
self.api = api
self.name = name
self.namespace = namespace
self.exist = False
def get_data(self):
status_code, data = self.api.get('namespaces/{}/checks/{}'.format(self.namespace, self.name))
if status_code == 200:
self.exist = True
self.options = data
self.options.pop('metadata')
def has_changed(self, options):
for option, value in self.options.iteritems():
if not option in options:
if value:
return True
elif options[option] != value:
return True
return False
def create(self, options):
options.update({
'metadata': {
'name': self.name,
'namespace': self.namespace
}
})
self.api.put(
'namespaces/{}/checks/{}'.format(self.namespace, self.name),
options
)
def delete(self):
self.api.delete(
'namespaces/{}/checks/{}'.format(self.namespace, self.name)
)
def main():
fields = {
'name': { 'type': 'str', 'required': True },
'namespace': { 'type': 'str', 'default': 'default' },
'command': { 'type': 'str', 'required': True },
'handlers': { 'type': 'list', 'default': [] },
'subscriptions': { 'type': 'list', 'required': True },
'interval': { 'type': 'int', 'default': 60 },
'options': { 'type': 'dict', 'default': {} },
'api_url': { 'type': 'str', 'default': 'http://127.0.0.1:8080' },
'api_user': { 'type': 'str', 'default': 'admin' },
'api_password': { 'type': 'str', 'default': 'P@ssw0rd!' },
'state': { 'type': 'str', 'default': 'present', 'choices': ['present', 'absent'] }
}
module = AnsibleModule(argument_spec=fields)
changed = False
options = {
'command': module.params['command'],
'handlers': module.params['handlers'],
'subscriptions': module.params['subscriptions'],
'interval': module.params['interval'],
'publish': True
}
options.update(module.params['options'])
if 'cron' in options:
options.pop('interval')
api = SensuApi(
module.params['api_url'],
module.params['api_user'],
module.params['api_password']
)
api.auth()
check = SensuCheck(
api,
module.params['name'],
module.params['namespace']
)
check.get_data()
if module.params['state'] == 'present':
if not check.exist or check.has_changed(options):
check.create(options)
changed = True
elif check.exist:
check.delete()
changed = True
module.exit_json(changed=changed)
if __name__ == '__main__':
main()