1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

Add Description parameter in os_user

Fixes #18914

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
This commit is contained in:
Abhijeet Kasurde 2017-05-29 11:19:38 +05:30 committed by Brian Coca
parent 45f07fdeae
commit da6f6d27e8
2 changed files with 53 additions and 25 deletions

View file

@ -55,6 +55,10 @@ options:
- Email address for the user
required: false
default: None
description:
description:
- Description about the user
version_added: "2.4"
default_project:
description:
- Project name or ID that the user should be associated with by default
@ -147,11 +151,14 @@ try:
HAS_SHADE = True
except ImportError:
HAS_SHADE = False
from distutils.version import StrictVersion
from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.openstack import openstack_full_argument_spec, openstack_module_kwargs
def _needs_update(params_dict, user):
for k, v in params_dict.items():
if k not in ('password', 'update_password') and user[k] != v:
for k in params_dict:
if k not in ('password', 'update_password') and user[k] != params_dict[k]:
return True
# We don't get password back in the user object, so assume any supplied
@ -162,6 +169,7 @@ def _needs_update(params_dict, user):
return False
def _get_domain_id(cloud, domain):
try:
# We assume admin is passing domain id
@ -177,6 +185,7 @@ def _get_domain_id(cloud, domain):
return domain_id
def _get_default_project_id(cloud, default_project, module):
project = cloud.get_project(default_project)
if not project:
@ -184,18 +193,18 @@ def _get_default_project_id(cloud, default_project, module):
return project['id']
def main():
def main():
argument_spec = openstack_full_argument_spec(
name=dict(required=True),
password=dict(required=False, default=None, no_log=True),
email=dict(required=False, default=None),
default_project=dict(required=False, default=None),
description=dict(type='str'),
domain=dict(required=False, default=None),
enabled=dict(default=True, type='bool'),
state=dict(default='present', choices=['absent', 'present']),
update_password=dict(default='always', choices=['always',
'on_create']),
update_password=dict(default='always', choices=['always', 'on_create']),
)
module_kwargs = openstack_module_kwargs()
@ -214,6 +223,10 @@ def main():
enabled = module.params['enabled']
state = module.params['state']
update_password = module.params['update_password']
description = module.params['description']
if description and StrictVersion(shade.__version__) < StrictVersion('1.13.0'):
module.fail_json(msg="To utilize description, the installed version of the shade library MUST be >=1.13.0")
try:
cloud = shade.openstack_cloud(**module.params)
@ -227,23 +240,30 @@ def main():
if state == 'present':
if update_password in ('always', 'on_create'):
if not password:
msg = ("update_password is %s but a password value is "
"missing") % update_password
msg = "update_password is %s but a password value is missing" % update_password
module.fail_json(msg=msg)
default_project_id = None
if default_project:
default_project_id = _get_default_project_id(cloud, default_project, module)
if user is None:
user = cloud.create_user(
name=name, password=password, email=email,
default_project=default_project_id, domain_id=domain_id,
enabled=enabled)
if description is not None:
user = cloud.create_user(
name=name, password=password, email=email,
default_project=default_project_id, domain_id=domain_id,
enabled=enabled, description=description)
else:
user = cloud.create_user(
name=name, password=password, email=email,
default_project=default_project_id, domain_id=domain_id,
enabled=enabled)
changed = True
else:
params_dict = {'email': email, 'enabled': enabled,
'password': password,
'update_password': update_password}
if description is not None:
params_dict['description'] = description
if domain_id is not None:
params_dict['domain_id'] = domain_id
if default_project_id is not None:
@ -251,15 +271,27 @@ def main():
if _needs_update(params_dict, user):
if update_password == 'always':
user = cloud.update_user(
user['id'], password=password, email=email,
default_project=default_project_id,
domain_id=domain_id, enabled=enabled)
if description is not None:
user = cloud.update_user(
user['id'], password=password, email=email,
default_project=default_project_id,
domain_id=domain_id, enabled=enabled, description=description)
else:
user = cloud.update_user(
user['id'], password=password, email=email,
default_project=default_project_id,
domain_id=domain_id, enabled=enabled)
else:
user = cloud.update_user(
user['id'], email=email,
default_project=default_project_id,
domain_id=domain_id, enabled=enabled)
if description is not None:
user = cloud.update_user(
user['id'], email=email,
default_project=default_project_id,
domain_id=domain_id, enabled=enabled, description=description)
else:
user = cloud.update_user(
user['id'], email=email,
default_project=default_project_id,
domain_id=domain_id, enabled=enabled)
changed = True
else:
changed = False
@ -267,18 +299,15 @@ def main():
elif state == 'absent':
if user is None:
changed=False
changed = False
else:
cloud.delete_user(user['id'])
changed=True
changed = True
module.exit_json(changed=changed)
except shade.OpenStackCloudException as e:
module.fail_json(msg=str(e), extra_data=e.extra_data)
from ansible.module_utils.basic import *
from ansible.module_utils.openstack import *
if __name__ == '__main__':
main()

View file

@ -150,7 +150,6 @@ lib/ansible/modules/cloud/openstack/os_server_volume.py
lib/ansible/modules/cloud/openstack/os_stack.py
lib/ansible/modules/cloud/openstack/os_subnet.py
lib/ansible/modules/cloud/openstack/os_subnets_facts.py
lib/ansible/modules/cloud/openstack/os_user.py
lib/ansible/modules/cloud/openstack/os_user_facts.py
lib/ansible/modules/cloud/openstack/os_user_group.py
lib/ansible/modules/cloud/openstack/os_user_role.py