#!/usr/bin/python

from ansible.module_utils.basic import *
from ansible.module_utils.elasticsearch_api import *
import subprocess

class ElasticsearchInitPassword:
    def __init__(self, api_url, api_user, api_password):
        self.api = ElasticsearchApi(
            api_url,
            api_user,
            api_password
        )
        self.user = api_user
        self.password = api_password

    def is_set(self):
        status_code, _ = self.api.get('_cluster/health')
        if status_code == 401:
            return False

        return True

    def change(self):
        subprocess.run(
            ['/usr/share/elasticsearch/bin/elasticsearch-reset-password', '-u', self.user, '-b', '-i'],
            input='{}\n{}'.format(self.password, self.password).encode()
        )
        
def main():
    fields = {
        'api_url':      { 'type': 'str', 'default': 'http://127.0.0.1:9200' },
        'api_user':     { 'type': 'str', 'default': None },
        'api_password': { 'type': 'str', 'default': None, 'no_log': True },
    }
    module = AnsibleModule(argument_spec=fields)
    changed = False

    init = ElasticsearchInitPassword(
        module.params['api_url'],
        module.params['api_user'],
        module.params['api_password'],
    )

    if not init.is_set():
        init.change()
        changed = True

    module.exit_json(changed=changed)

if __name__ == '__main__':
    main()