1#!/usr/bin/python
2# -*- coding: utf-8 -*-
3#
4# Copyright (c) 2018, Yanis Guenane <yanis+ansible@guenane.org>
5# Copyright (c) 2019, René Moser <mail@renemoser.net>
6# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
7
8from __future__ import (absolute_import, division, print_function)
9__metaclass__ = type
10
11ANSIBLE_METADATA = {'metadata_version': '1.1',
12                    'status': ['preview'],
13                    'supported_by': 'community'}
14
15DOCUMENTATION = r'''
16---
17module: vultr_user_info
18short_description: Get information about the Vultr user available.
19description:
20  - Get infos about users available in Vultr.
21version_added: "2.9"
22author:
23  - "Yanis Guenane (@Spredzy)"
24  - "René Moser (@resmo)"
25extends_documentation_fragment: vultr
26'''
27
28EXAMPLES = r'''
29- name: Get Vultr user infos
30  vultr_user_info:
31  register: result
32
33- name: Print the infos
34  debug:
35    var: result.vultr_user_info
36'''
37
38RETURN = r'''
39---
40vultr_api:
41  description: Response from Vultr API with a few additions/modification
42  returned: success
43  type: complex
44  contains:
45    api_account:
46      description: Account used in the ini file to select the key
47      returned: success
48      type: str
49      sample: default
50    api_timeout:
51      description: Timeout used for the API requests
52      returned: success
53      type: int
54      sample: 60
55    api_retries:
56      description: Amount of max retries for the API requests
57      returned: success
58      type: int
59      sample: 5
60    api_retry_max_delay:
61      description: Exponential backoff delay in seconds between retries up to this max delay value.
62      returned: success
63      type: int
64      sample: 12
65      version_added: '2.9'
66    api_endpoint:
67      description: Endpoint used for the API requests
68      returned: success
69      type: str
70      sample: "https://api.vultr.com"
71vultr_user_info:
72  description: Response from Vultr API as list
73  returned: available
74  type: complex
75  contains:
76    id:
77      description: ID of the user.
78      returned: success
79      type: str
80      sample: 5904bc6ed9234
81    api_key:
82      description: API key of the user.
83      returned: only after resource was created
84      type: str
85      sample: 567E6K567E6K567E6K567E6K567E6K
86    name:
87      description: Name of the user.
88      returned: success
89      type: str
90      sample: john
91    email:
92      description: Email of the user.
93      returned: success
94      type: str
95      sample: "john@exmaple.com"
96    api_enabled:
97      description: Whether the API is enabled or not.
98      returned: success
99      type: bool
100      sample: true
101    acls:
102      description: List of ACLs of the user.
103      returned: success
104      type: list
105      sample: [ manage_users, support, upgrade ]
106'''
107
108from ansible.module_utils.basic import AnsibleModule
109from ansible.module_utils.vultr import (
110    Vultr,
111    vultr_argument_spec,
112)
113
114
115class AnsibleVultrUserInfo(Vultr):
116
117    def __init__(self, module):
118        super(AnsibleVultrUserInfo, self).__init__(module, "vultr_user_info")
119
120        self.returns = {
121            "USERID": dict(key='id'),
122            "acls": dict(),
123            "api_enabled": dict(),
124            "email": dict(),
125            "name": dict()
126        }
127
128    def get_regions(self):
129        return self.api_query(path="/v1/user/list")
130
131
132def main():
133    argument_spec = vultr_argument_spec()
134
135    module = AnsibleModule(
136        argument_spec=argument_spec,
137        supports_check_mode=True,
138    )
139
140    user_info = AnsibleVultrUserInfo(module)
141    result = user_info.get_result(user_info.get_regions())
142    module.exit_json(**result)
143
144
145if __name__ == '__main__':
146    main()
147