diff options
-rw-r--r-- | lib/ansible/modules/cloud/cloudstack/cs_user.py | 201 | ||||
-rw-r--r-- | test/sanity/pep8/legacy-files.txt | 1 |
2 files changed, 95 insertions, 107 deletions
diff --git a/lib/ansible/modules/cloud/cloudstack/cs_user.py b/lib/ansible/modules/cloud/cloudstack/cs_user.py index 2c848eaaa9..0970328abd 100644 --- a/lib/ansible/modules/cloud/cloudstack/cs_user.py +++ b/lib/ansible/modules/cloud/cloudstack/cs_user.py @@ -202,8 +202,12 @@ domain: sample: ROOT ''' -# import cloudstack common -from ansible.module_utils.cloudstack import * +from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils.cloudstack import ( + AnsibleCloudStack, + cs_argument_spec, + cs_required_together, +) class AnsibleCloudStackUser(AnsibleCloudStack): @@ -211,32 +215,33 @@ class AnsibleCloudStackUser(AnsibleCloudStack): def __init__(self, module): super(AnsibleCloudStackUser, self).__init__(module) self.returns = { - 'username': 'username', - 'firstname': 'first_name', - 'lastname': 'last_name', - 'email': 'email', - 'secretkey': 'api_secret', - 'apikey': 'api_key', - 'timezone': 'timezone', + 'username': 'username', + 'firstname': 'first_name', + 'lastname': 'last_name', + 'email': 'email', + 'secretkey': 'api_secret', + 'apikey': 'api_key', + 'timezone': 'timezone', } self.account_types = { - 'user': 0, - 'root_admin': 1, + 'user': 0, + 'root_admin': 1, 'domain_admin': 2, } self.user = None - def get_account_type(self): account_type = self.module.params.get('account_type') return self.account_types[account_type] - def get_user(self): if not self.user: - args = {} - args['domainid'] = self.get_domain('id') - users = self.cs.listUsers(**args) + args = { + 'domainid': self.get_domain('id'), + } + + users = self.query_api('listUsers', **args) + if users: user_name = self.module.params.get('username') for u in users['user']: @@ -245,7 +250,6 @@ class AnsibleCloudStackUser(AnsibleCloudStack): break return self.user - def enable_user(self): user = self.get_user() if not user: @@ -253,16 +257,14 @@ class AnsibleCloudStackUser(AnsibleCloudStack): if user['state'].lower() != 'enabled': self.result['changed'] = True - args = {} - args['id'] = user['id'] + args = { + 'id': user['id'], + } if not self.module.check_mode: - res = self.cs.enableUser(**args) - if 'errortext' in res: - self.module.fail_json(msg="Failed: '%s'" % res['errortext']) + res = self.query_api('enableUser', **args) user = res['user'] return user - def lock_user(self): user = self.get_user() if not user: @@ -274,17 +276,16 @@ class AnsibleCloudStackUser(AnsibleCloudStack): if user['state'].lower() != 'locked': self.result['changed'] = True - args = {} - args['id'] = user['id'] - if not self.module.check_mode: - res = self.cs.lockUser(**args) - if 'errortext' in res: - self.module.fail_json(msg="Failed: '%s'" % res['errortext']) + args = { + 'id': user['id'], + } + if not self.module.check_mode: + res = self.query_api('lockUser', **args) user = res['user'] - return user + return user def disable_user(self): user = self.get_user() @@ -293,32 +294,26 @@ class AnsibleCloudStackUser(AnsibleCloudStack): if user['state'].lower() != 'disabled': self.result['changed'] = True - args = {} - args['id'] = user['id'] + args = { + 'id': user['id'], + } if not self.module.check_mode: - user = self.cs.disableUser(**args) - if 'errortext' in user: - self.module.fail_json(msg="Failed: '%s'" % user['errortext']) + user = self.query_api('disableUser', **args) poll_async = self.module.params.get('poll_async') if poll_async: user = self.poll_job(user, 'user') return user - def present_user(self): - missing_params = [] - for required_params in [ + required_params = [ 'account', 'email', 'password', 'first_name', 'last_name', - ]: - if not self.module.params.get(required_params): - missing_params.append(required_params) - if missing_params: - self.module.fail_json(msg="missing required arguments: %s" % ','.join(missing_params)) + ] + self.module.fail_on_missing_params(required_params=required_params) user = self.get_user() if user: @@ -327,56 +322,58 @@ class AnsibleCloudStackUser(AnsibleCloudStack): user = self._create_user(user) return user + def _get_common_args(self): + return { + 'firstname': self.module.params.get('first_name'), + 'lastname': self.module.params.get('last_name'), + 'email': self.module.params.get('email'), + 'timezone': self.module.params.get('timezone'), + } def _create_user(self, user): self.result['changed'] = True - args = {} - args['account'] = self.get_account(key='name') - args['domainid'] = self.get_domain('id') - args['username'] = self.module.params.get('username') - args['password'] = self.module.params.get('password') - args['firstname'] = self.module.params.get('first_name') - args['lastname'] = self.module.params.get('last_name') - args['email'] = self.module.params.get('email') - args['timezone'] = self.module.params.get('timezone') + args = self._get_common_args() + args.update({ + 'account': self.get_account(key='name'), + 'domainid': self.get_domain('id'), + 'username': self.module.params.get('username'), + 'password': self.module.params.get('password'), + }) + if not self.module.check_mode: - res = self.cs.createUser(**args) - if 'errortext' in res: - self.module.fail_json(msg="Failed: '%s'" % res['errortext']) + res = self.query_api('createUser', **args) user = res['user'] + # register user api keys - res = self.cs.registerUserKeys(id=user['id']) - if 'errortext' in res: - self.module.fail_json(msg="Failed: '%s'" % res['errortext']) + res = self.query_api('registerUserKeys', id=user['id']) user.update(res['userkeys']) - return user + return user def _update_user(self, user): - args = {} - args['id'] = user['id'] - args['firstname'] = self.module.params.get('first_name') - args['lastname'] = self.module.params.get('last_name') - args['email'] = self.module.params.get('email') - args['timezone'] = self.module.params.get('timezone') + args = self._get_common_args() + args.update({ + 'id': user['id'], + }) + if self.has_changed(args, user): self.result['changed'] = True + if not self.module.check_mode: - res = self.cs.updateUser(**args) - if 'errortext' in res: - self.module.fail_json(msg="Failed: '%s'" % res['errortext']) + res = self.query_api('updateUser', **args) + user = res['user'] + # register user api keys if 'apikey' not in user: self.result['changed'] = True + if not self.module.check_mode: - res = self.cs.registerUserKeys(id=user['id']) - if 'errortext' in res: - self.module.fail_json(msg="Failed: '%s'" % res['errortext']) + res = self.query_api('registerUserKeys', id=user['id']) user.update(res['userkeys']) - return user + return user def absent_user(self): user = self.get_user() @@ -384,18 +381,15 @@ class AnsibleCloudStackUser(AnsibleCloudStack): self.result['changed'] = True if not self.module.check_mode: - res = self.cs.deleteUser(id=user['id']) + self.query_api('deleteUser', id=user['id']) - if 'errortext' in res: - self.module.fail_json(msg="Failed: '%s'" % res['errortext']) return user - def get_result(self, user): super(AnsibleCloudStackUser, self).get_result(user) if user: if 'accounttype' in user: - for key,value in self.account_types.items(): + for key, value in self.account_types.items(): if value == user['accounttype']: self.result['account_type'] = key break @@ -405,16 +399,16 @@ class AnsibleCloudStackUser(AnsibleCloudStack): def main(): argument_spec = cs_argument_spec() argument_spec.update(dict( - username = dict(required=True), - account = dict(default=None), - state = dict(choices=['present', 'absent', 'enabled', 'disabled', 'locked', 'unlocked'], default='present'), - domain = dict(default='ROOT'), - email = dict(default=None), - first_name = dict(default=None), - last_name = dict(default=None), - password = dict(default=None, no_log=True), - timezone = dict(default=None), - poll_async = dict(type='bool', default=True), + username=dict(required=True), + account=dict(), + state=dict(choices=['present', 'absent', 'enabled', 'disabled', 'locked', 'unlocked'], default='present'), + domain=dict(default='ROOT'), + email=dict(), + first_name=dict(), + last_name=dict(), + password=dict(no_log=True), + timezone=dict(), + poll_async=dict(type='bool', default=True), )) module = AnsibleModule( @@ -423,34 +417,29 @@ def main(): supports_check_mode=True ) - try: - acs_acc = AnsibleCloudStackUser(module) + acs_acc = AnsibleCloudStackUser(module) - state = module.params.get('state') + state = module.params.get('state') - if state in ['absent']: - user = acs_acc.absent_user() + if state in ['absent']: + user = acs_acc.absent_user() - elif state in ['enabled', 'unlocked']: - user = acs_acc.enable_user() + elif state in ['enabled', 'unlocked']: + user = acs_acc.enable_user() - elif state in ['disabled']: - user = acs_acc.disable_user() + elif state in ['disabled']: + user = acs_acc.disable_user() - elif state in ['locked']: - user = acs_acc.lock_user() + elif state in ['locked']: + user = acs_acc.lock_user() - else: - user = acs_acc.present_user() - - result = acs_acc.get_result(user) + else: + user = acs_acc.present_user() - except CloudStackException as e: - module.fail_json(msg='CloudStackException: %s' % str(e)) + result = acs_acc.get_result(user) module.exit_json(**result) -# import module snippets -from ansible.module_utils.basic import * + if __name__ == '__main__': main() diff --git a/test/sanity/pep8/legacy-files.txt b/test/sanity/pep8/legacy-files.txt index 7b70480808..fd7adf0070 100644 --- a/test/sanity/pep8/legacy-files.txt +++ b/test/sanity/pep8/legacy-files.txt @@ -93,7 +93,6 @@ lib/ansible/modules/cloud/cloudstack/cs_securitygroup.py lib/ansible/modules/cloud/cloudstack/cs_securitygroup_rule.py lib/ansible/modules/cloud/cloudstack/cs_snapshot_policy.py lib/ansible/modules/cloud/cloudstack/cs_template.py -lib/ansible/modules/cloud/cloudstack/cs_user.py lib/ansible/modules/cloud/cloudstack/cs_vmsnapshot.py lib/ansible/modules/cloud/cloudstack/cs_volume.py lib/ansible/modules/cloud/docker/_docker.py |