1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2026-02-04 07:51:50 +00:00
community.general/plugins/modules/uptimerobot.py
2025-11-01 13:46:53 +01:00

141 lines
3.6 KiB
Python

#!/usr/bin/python
# Copyright Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
from __future__ import annotations
DOCUMENTATION = r"""
module: uptimerobot
short_description: Pause and start Uptime Robot monitoring
description:
- This module lets you start and pause Uptime Robot Monitoring.
author: "Nate Kingsley (@nate-kingsley)"
requirements:
- Valid Uptime Robot API Key
extends_documentation_fragment:
- community.general.attributes
attributes:
check_mode:
support: none
diff_mode:
support: none
options:
state:
type: str
description:
- Define whether or not the monitor should be running or paused.
required: true
choices: ["started", "paused"]
monitorid:
type: str
description:
- ID of the monitor to check.
required: true
apikey:
type: str
description:
- Uptime Robot API key.
required: true
notes:
- Support for adding and removing monitors and alert contacts has not yet been implemented.
"""
EXAMPLES = r"""
- name: Pause the monitor with an ID of 12345
community.general.uptimerobot:
monitorid: 12345
apikey: 12345-1234512345
state: paused
- name: Start the monitor with an ID of 12345
community.general.uptimerobot:
monitorid: 12345
apikey: 12345-1234512345
state: started
"""
import json
from urllib.parse import urlencode
from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.urls import fetch_url
from ansible.module_utils.common.text.converters import to_text
API_BASE = "https://api.uptimerobot.com/"
API_ACTIONS = dict(status="getMonitors?", editMonitor="editMonitor?")
API_FORMAT = "json"
API_NOJSONCALLBACK = 1
CHANGED_STATE = False
SUPPORTS_CHECK_MODE = False
def checkID(module, params):
data = urlencode(params)
full_uri = API_BASE + API_ACTIONS["status"] + data
req, info = fetch_url(module, full_uri)
result = to_text(req.read())
jsonresult = json.loads(result)
req.close()
return jsonresult
def startMonitor(module, params):
params["monitorStatus"] = 1
data = urlencode(params)
full_uri = API_BASE + API_ACTIONS["editMonitor"] + data
req, info = fetch_url(module, full_uri)
result = to_text(req.read())
jsonresult = json.loads(result)
req.close()
return jsonresult["stat"]
def pauseMonitor(module, params):
params["monitorStatus"] = 0
data = urlencode(params)
full_uri = API_BASE + API_ACTIONS["editMonitor"] + data
req, info = fetch_url(module, full_uri)
result = to_text(req.read())
jsonresult = json.loads(result)
req.close()
return jsonresult["stat"]
def main():
module = AnsibleModule(
argument_spec=dict(
state=dict(required=True, choices=["started", "paused"]),
apikey=dict(required=True, no_log=True),
monitorid=dict(required=True),
),
supports_check_mode=SUPPORTS_CHECK_MODE,
)
params = dict(
apiKey=module.params["apikey"],
monitors=module.params["monitorid"],
monitorID=module.params["monitorid"],
format=API_FORMAT,
noJsonCallback=API_NOJSONCALLBACK,
)
check_result = checkID(module, params)
if check_result["stat"] != "ok":
module.fail_json(msg="failed", result=check_result["message"])
if module.params["state"] == "started":
monitor_result = startMonitor(module, params)
else:
monitor_result = pauseMonitor(module, params)
module.exit_json(msg="success", result=monitor_result)
if __name__ == "__main__":
main()