diff --git a/lib/ansible/modules/network/avi/avi_useraccount.py b/lib/ansible/modules/network/avi/avi_useraccount.py new file mode 100644 index 00000000000..d697a81d243 --- /dev/null +++ b/lib/ansible/modules/network/avi/avi_useraccount.py @@ -0,0 +1,134 @@ +#!/usr/bin/python +""" +# Created on Aug 12, 2016 +# +# @author: Gaurav Rastogi (grastogi@avinetworks.com) GitHub ID: grastogi23 +# +# module_check: not supported +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible. If not, see . +# +""" + +ANSIBLE_METADATA = {'metadata_version': '1.1', + 'status': ['preview'], + 'supported_by': 'community'} + + +DOCUMENTATION = ''' +--- +module: avi_useraccount +author: Chaitanya Deshpande (chaitanya.deshpande@avinetworks.com) + +short_description: Avi UserAccount Module +description: + - This module can be used for updating the password of a user. + - This module is useful for setting up admin password for Controller bootstrap. +version_added: 2.6 +requirements: [ avisdk ] +options: + old_password: + description: + - Old password for update password or default password for bootstrap. + +extends_documentation_fragment: + - avi +''' + +EXAMPLES = ''' + + - name: Update user password + avi_useraccount: + controller: "" + username: "" + password: new_password + old_password: "" + api_version: "" + + - name: Update user password using avi_credentials + avi_useraccount: + avi_credentials: "" + old_password: "" +''' + +RETURN = ''' +obj: + description: Avi REST resource + returned: success, changed + type: dict +''' + +import json +import time +from ansible.module_utils.basic import AnsibleModule +from copy import deepcopy + +try: + from ansible.module_utils.network.avi.avi import ( + avi_common_argument_spec, ansible_return, AviCredentials, HAS_AVI) + from avi.sdk.avi_api import ApiSession + from avi.sdk.utils.ansible_utils import avi_obj_cmp, cleanup_absent_fields + +except ImportError: + HAS_AVI = False + + +def main(): + argument_specs = dict( + old_password=dict(type='str', required=True, no_log=True) + ) + argument_specs.update(avi_common_argument_spec()) + module = AnsibleModule(argument_spec=argument_specs) + + if not HAS_AVI: + return module.fail_json(msg=( + 'Avi python API SDK (avisdk) is not installed. ' + 'For more details visit https://github.com/avinetworks/sdk.')) + + api_creds = AviCredentials() + api_creds.update_from_ansible_module(module) + password_updated = False + old_password = module.params.get('old_password') + data = { + 'old_password': old_password, + 'password': api_creds.password + } + password_changed = False + try: + api = ApiSession.get_session( + api_creds.controller, api_creds.username, + password=api_creds.password, timeout=api_creds.timeout, + tenant=api_creds.tenant, tenant_uuid=api_creds.tenant_uuid, + token=api_creds.token, port=api_creds.port) + password_changed = True + return ansible_return(module, None, False, req=data) + except: + pass + + if not password_changed: + api = ApiSession.get_session( + api_creds.controller, api_creds.username, password=old_password, + timeout=api_creds.timeout, tenant=api_creds.tenant, + tenant_uuid=api_creds.tenant_uuid, token=api_creds.token, + port=api_creds.port) + rsp = api.put('useraccount', data=data) + if rsp: + return ansible_return(module, rsp, True, req=data) + return module.exit_json(changed=False, obj=data) + + +if __name__ == '__main__': + main()