1+ #!/usr/bin/python
2+
3+ # Copyright (c) 2024, Tobias Bauriedel <tobias.bauriedel@netways.de>
4+ # GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or
5+ # https://www.gnu.org/licenses/gpl-3.0.txt)
6+
7+ from ansible .module_utils .basic import AnsibleModule
8+ from ansible_collections .netways .elasticstack .plugins .module_utils .elasticsearch_api import (
9+ UserObject ,
10+ )
11+ from __future__ import (absolute_import , division , print_function )
12+ __metaclass__ = type
13+
14+
15+ def run_module ():
16+ '''
17+ Elasticsearch user management.
18+ '''
19+
20+ # https://github.com/NETWAYS/ansible-collection-elasticstack/blob/main/roles/logstash/tasks/logstash-security.yml#L405-L472
21+
22+ # get user
23+ # https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-get-user.html
24+
25+ # create or update user
26+ # https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-put-user.html
27+
28+ # delete user
29+ # https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-delete-user.html
30+
31+ # enable user
32+ # https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-enable-user.html
33+
34+ # disable user
35+ # https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-disable-user.html
36+
37+ module = AnsibleModule (
38+ argument_spec = dict (
39+ name = dict (type = str , required = True ),
40+ fullname = dict (type = str , required = False ),
41+ password = dict (type = str , required = True ),
42+ email = dict (type = str , required = False ),
43+ roles = dict (type = list , required = True ),
44+ metadata = dict (type = dict , required = False ),
45+ state = dict (type = str , required = False , default = "present" ), # 'present' or 'absent'
46+ enabled = dict (type = bool , required = False , default = True ), # True=enabled & False=disabled
47+ endpoint = dict (type = str , required = False , default = "https://localhost:9200" ),
48+ ca = dict (type = str , required = True ), # Path to ca to authenticate API requests
49+ es_version = dict (type = int , required = False , default = 8 ), # Elasticsearch version
50+ )
51+ )
52+
53+ # Check if provided state is valid
54+ valid_states = list ("present" , "absent" )
55+ if module .params ['state' ] not in valid_states :
56+ module .exit_json (
57+ failed = True ,
58+ changed = False ,
59+ stderr = "Invalid state provided. Use 'present' or 'absent."
60+ )
61+
62+ user = UserObject (module )
63+
64+ module .exit_json (
65+ debug = user
66+ )
67+
68+ # Block 1
69+ # if (current state == configured state) && (current properties == configured properties) -> exit
70+
71+ # if (current enabled != configured enable) -> change
72+
73+ # if current state != configured state -> create or delete (based on configured state)
74+
75+ # if (current state == configured state) && (current properties != configured properties) -> update user properties
76+
77+ # Block 2
78+
79+ if __name__ == "__main__" :
80+ run_module ()
0 commit comments