69 lines
1.8 KiB
Python
69 lines
1.8 KiB
Python
#!/usr/bin/python3
|
|
|
|
from ansible.module_utils.basic import AnsibleModule
|
|
import requests
|
|
import json
|
|
|
|
|
|
class InfluxdbSetup:
|
|
def __init__(self, api_url):
|
|
self.api_url = api_url
|
|
|
|
def already(self):
|
|
url = '{}/api/v2/setup'.format(self.api_url)
|
|
r = requests.get(url)
|
|
|
|
if r.status_code != 200:
|
|
raise Exception(
|
|
'Influxdb',
|
|
'Bad status code {}: {}'.format(r.status_code, r.text)
|
|
)
|
|
|
|
data = json.loads(r.text)
|
|
if 'allowed' not in data or data['allowed'] is True:
|
|
return False
|
|
return True
|
|
|
|
def run(self, username, org, bucket, token):
|
|
url = '{}/api/v2/setup'.format(self.api_url)
|
|
r = requests.post(url, json={
|
|
'username': username,
|
|
'org': org,
|
|
'bucket': bucket,
|
|
'token': token,
|
|
})
|
|
|
|
if r.status_code != 201:
|
|
raise Exception(
|
|
'Influxdb',
|
|
'Bad status code {}: {}'.format(r.status_code, r.text)
|
|
)
|
|
|
|
|
|
def main():
|
|
fields = {
|
|
'username': {'type': 'str', 'required': True},
|
|
'org': {'type': 'str', 'required': True},
|
|
'bucket': {'type': 'str', 'required': True},
|
|
'token': {'type': 'str', 'required': True},
|
|
'api_url': {'type': 'str', 'default': 'http://127.0.0.1:8086'},
|
|
}
|
|
module = AnsibleModule(argument_spec=fields)
|
|
|
|
setup = InfluxdbSetup(
|
|
module.params['api_url'],
|
|
)
|
|
|
|
if setup.already() is True:
|
|
module.exit_json(changed=False)
|
|
setup.run(
|
|
module.params['username'],
|
|
module.params['org'],
|
|
module.params['bucket'],
|
|
module.params['token'],
|
|
)
|
|
module.exit_json(changed=True)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|