From 2c4ba7a9e9bc9afffe7bef1589efe9fe555d9ffb Mon Sep 17 00:00:00 2001 From: Yanis Guenane Date: Wed, 18 Jul 2018 21:49:02 +0200 Subject: [PATCH] Vultr: Introducing vr_user_facts module (#42951) This commit introduces a new module called vr_user_facts. This module aims to return the list of user avaiable avaiable in Vultr. Sample available here: ``` "vultr_user_facts": [ { "acls": [], "api_enabled": "yes", "email": "mytestuser@example.com", "id": "a235b4f45e87f", "name": "mytestuser" } ] ``` --- .../modules/cloud/vultr/vr_user_facts.py | 118 ++++++++++++++++++ .../roles/vr_user_facts/defaults/main.yml | 8 ++ .../legacy/roles/vr_user_facts/tasks/main.yml | 31 +++++ test/legacy/vultr.yml | 1 + 4 files changed, 158 insertions(+) create mode 100644 lib/ansible/modules/cloud/vultr/vr_user_facts.py create mode 100644 test/legacy/roles/vr_user_facts/defaults/main.yml create mode 100644 test/legacy/roles/vr_user_facts/tasks/main.yml diff --git a/lib/ansible/modules/cloud/vultr/vr_user_facts.py b/lib/ansible/modules/cloud/vultr/vr_user_facts.py new file mode 100644 index 00000000000..483958b5137 --- /dev/null +++ b/lib/ansible/modules/cloud/vultr/vr_user_facts.py @@ -0,0 +1,118 @@ +#!/usr/bin/python +# +# (c) 2018, Yanis Guenane +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + +ANSIBLE_METADATA = {'metadata_version': '1.1', + 'status': ['preview'], + 'supported_by': 'community'} + +DOCUMENTATION = r''' +--- +module: vr_user_facts +short_description: Gather facts about the Vultr user available. +description: + - Gather facts about users available in Vultr. +version_added: "2.7" +author: "Yanis Guenane (@Spredzy)" +extends_documentation_fragment: vultr +''' + +EXAMPLES = r''' +- name: Gather Vultr user facts + local_action: + module: vr_user_facts + +- name: Print the gathered facts + debug: + var: ansible_facts.vultr_user_facts +''' + +RETURN = r''' +--- +vultr_api: + description: Response from Vultr API with a few additions/modification + returned: success + type: complex + contains: + api_account: + description: Account used in the ini file to select the key + returned: success + type: string + sample: default + api_timeout: + description: Timeout used for the API requests + returned: success + type: int + sample: 60 + api_retries: + description: Amount of max retries for the API requests + returned: success + type: int + sample: 5 + api_endpoint: + description: Endpoint used for the API requests + returned: success + type: string + sample: "https://api.vultr.com" +vultr_user_facts: + description: Response from Vultr API + returned: success + type: complex + contains: + "vultr_user_facts": [ + { + "acls": [], + "api_enabled": "yes", + "email": "mytestuser@example.com", + "id": "a235b4f45e87f", + "name": "mytestuser" + } + ] +''' + +from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils.vultr import ( + Vultr, + vultr_argument_spec, +) + + +class AnsibleVultrUserFacts(Vultr): + + def __init__(self, module): + super(AnsibleVultrUserFacts, self).__init__(module, "vultr_user_facts") + + self.returns = { + "USERID": dict(key='id'), + "acls": dict(), + "api_enabled": dict(), + "email": dict(), + "name": dict() + } + + def get_regions(self): + return self.api_query(path="/v1/user/list") + + +def main(): + argument_spec = vultr_argument_spec() + + module = AnsibleModule( + argument_spec=argument_spec, + supports_check_mode=True, + ) + + user_facts = AnsibleVultrUserFacts(module) + result = user_facts.get_result(user_facts.get_regions()) + ansible_facts = { + 'vultr_user_facts': result['vultr_user_facts'] + } + module.exit_json(ansible_facts=ansible_facts, **result) + + +if __name__ == '__main__': + main() diff --git a/test/legacy/roles/vr_user_facts/defaults/main.yml b/test/legacy/roles/vr_user_facts/defaults/main.yml new file mode 100644 index 00000000000..4127d161a20 --- /dev/null +++ b/test/legacy/roles/vr_user_facts/defaults/main.yml @@ -0,0 +1,8 @@ +user_name: mytestuser +user_email: mytestuser@example.com +user_password: aP4ssw0rd! +user_acls: + - upgrade + - dns + - manage_users + - subscriptions diff --git a/test/legacy/roles/vr_user_facts/tasks/main.yml b/test/legacy/roles/vr_user_facts/tasks/main.yml new file mode 100644 index 00000000000..f87e3aea5b8 --- /dev/null +++ b/test/legacy/roles/vr_user_facts/tasks/main.yml @@ -0,0 +1,31 @@ +# Copyright (c) 2018, Yanis Guenane +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) +--- +- name: Create the user + vr_user: + name: '{{ user_name }}' + email: '{{ user_email }}' + password: '{{ user_password }}' + acls: '{{ user_acls }}' + +- name: test gather vultr user facts in check mode + vr_user_facts: + check_mode: yes + +- name: verify test gather vultr user facts in check mode + assert: + that: + - ansible_facts.vultr_user_facts|selectattr('name','equalto','{{ user_name }}') | list | count == 1 + +- name: test gather vultr user facts + vr_user_facts: + +- name: verify test gather vultr user facts + assert: + that: + - ansible_facts.vultr_user_facts|selectattr('name','equalto','{{ user_name }}') | list | count == 1 + +- name: Delete the user + vr_user: + name: '{{ user_name }}' + state: absent diff --git a/test/legacy/vultr.yml b/test/legacy/vultr.yml index b0befd67a97..42bc644d41d 100644 --- a/test/legacy/vultr.yml +++ b/test/legacy/vultr.yml @@ -18,3 +18,4 @@ - { role: vr_ssh_key_facts, tags: test_vr_ssh_key_facts } - { role: vr_startup_script, tags: test_vr_startup_script } - { role: vr_user, tags: test_vr_user } + - { role: vr_user_facts, tags: test_vr_user_facts }