mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
add Local useradd to user (#28420)
* added 'local' option to user fixes #22140
This commit is contained in:
parent
e79b6a03fc
commit
6f2d3fd7d3
1 changed files with 38 additions and 5 deletions
|
@ -197,6 +197,15 @@ options:
|
||||||
description:
|
description:
|
||||||
- An expiry time for the user in epoch, it will be ignored on platforms that do not support this.
|
- An expiry time for the user in epoch, it will be ignored on platforms that do not support this.
|
||||||
Currently supported on Linux and FreeBSD.
|
Currently supported on Linux and FreeBSD.
|
||||||
|
local:
|
||||||
|
version_added: "2.4"
|
||||||
|
required: false
|
||||||
|
default: "False"
|
||||||
|
description:
|
||||||
|
- Forces the use of "local" command alternatives on platforms that implement it.
|
||||||
|
This is useful in environments that use centralized authentification when you want to manipulate the local users.
|
||||||
|
I.E. it uses `luseradd` instead of `useradd`.
|
||||||
|
- This requires that these commands exist on the targeted host, otherwise it will be a fatal error.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
EXAMPLES = '''
|
EXAMPLES = '''
|
||||||
|
@ -252,7 +261,6 @@ try:
|
||||||
except:
|
except:
|
||||||
HAVE_SPWD=False
|
HAVE_SPWD=False
|
||||||
|
|
||||||
|
|
||||||
class User(object):
|
class User(object):
|
||||||
"""
|
"""
|
||||||
This is a generic User manipulation class that is subclassed
|
This is a generic User manipulation class that is subclassed
|
||||||
|
@ -305,6 +313,7 @@ class User(object):
|
||||||
self.home = module.params['home']
|
self.home = module.params['home']
|
||||||
self.expires = None
|
self.expires = None
|
||||||
self.groups = None
|
self.groups = None
|
||||||
|
self.local = module.params['local']
|
||||||
|
|
||||||
if module.params['groups'] is not None:
|
if module.params['groups'] is not None:
|
||||||
self.groups = ','.join(module.params['groups'])
|
self.groups = ','.join(module.params['groups'])
|
||||||
|
@ -332,7 +341,12 @@ class User(object):
|
||||||
return self.module.run_command(cmd, use_unsafe_shell=use_unsafe_shell, data=data)
|
return self.module.run_command(cmd, use_unsafe_shell=use_unsafe_shell, data=data)
|
||||||
|
|
||||||
def remove_user_userdel(self):
|
def remove_user_userdel(self):
|
||||||
cmd = [self.module.get_bin_path('userdel', True)]
|
if self.local:
|
||||||
|
command_name = 'luserdel'
|
||||||
|
else:
|
||||||
|
command_name = 'userdel'
|
||||||
|
|
||||||
|
cmd = [self.module.get_bin_path(command_name, True)]
|
||||||
if self.force:
|
if self.force:
|
||||||
cmd.append('-f')
|
cmd.append('-f')
|
||||||
if self.remove:
|
if self.remove:
|
||||||
|
@ -341,7 +355,13 @@ class User(object):
|
||||||
|
|
||||||
return self.execute_command(cmd)
|
return self.execute_command(cmd)
|
||||||
|
|
||||||
def create_user_useradd(self, command_name='useradd'):
|
def create_user_useradd(self):
|
||||||
|
|
||||||
|
if self.local:
|
||||||
|
command_name = 'luseradd'
|
||||||
|
else:
|
||||||
|
command_name = 'useradd'
|
||||||
|
|
||||||
cmd = [self.module.get_bin_path(command_name, True)]
|
cmd = [self.module.get_bin_path(command_name, True)]
|
||||||
|
|
||||||
if self.uid is not None:
|
if self.uid is not None:
|
||||||
|
@ -417,7 +437,13 @@ class User(object):
|
||||||
|
|
||||||
def _check_usermod_append(self):
|
def _check_usermod_append(self):
|
||||||
# check if this version of usermod can append groups
|
# check if this version of usermod can append groups
|
||||||
usermod_path = self.module.get_bin_path('usermod', True)
|
|
||||||
|
if self.local:
|
||||||
|
command_name = 'lusermod'
|
||||||
|
else:
|
||||||
|
command_name = 'usermod'
|
||||||
|
|
||||||
|
usermod_path = self.module.get_bin_path(command_name, True)
|
||||||
|
|
||||||
# for some reason, usermod --help cannot be used by non root
|
# for some reason, usermod --help cannot be used by non root
|
||||||
# on RH/Fedora, due to lack of execute bit for others
|
# on RH/Fedora, due to lack of execute bit for others
|
||||||
|
@ -439,7 +465,13 @@ class User(object):
|
||||||
|
|
||||||
|
|
||||||
def modify_user_usermod(self):
|
def modify_user_usermod(self):
|
||||||
cmd = [self.module.get_bin_path('usermod', True)]
|
|
||||||
|
if self.local:
|
||||||
|
command_name = 'lusermod'
|
||||||
|
else:
|
||||||
|
command_name = 'usermod'
|
||||||
|
|
||||||
|
cmd = [self.module.get_bin_path(command_name, True)]
|
||||||
info = self.user_info()
|
info = self.user_info()
|
||||||
has_append = self._check_usermod_append()
|
has_append = self._check_usermod_append()
|
||||||
|
|
||||||
|
@ -2143,6 +2175,7 @@ def main():
|
||||||
ssh_key_passphrase=dict(default=None, type='str', no_log=True),
|
ssh_key_passphrase=dict(default=None, type='str', no_log=True),
|
||||||
update_password=dict(default='always',choices=['always','on_create'],type='str'),
|
update_password=dict(default='always',choices=['always','on_create'],type='str'),
|
||||||
expires=dict(default=None, type='float'),
|
expires=dict(default=None, type='float'),
|
||||||
|
local=dict(type='bool'),
|
||||||
),
|
),
|
||||||
supports_check_mode=True
|
supports_check_mode=True
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in a new issue