mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Add BusyBox support to user module (#45507)
This commit is contained in:
parent
3e2817c478
commit
bf3e397ea7
1 changed files with 139 additions and 0 deletions
|
@ -2613,6 +2613,145 @@ class HPUX(User):
|
||||||
return self.execute_command(cmd)
|
return self.execute_command(cmd)
|
||||||
|
|
||||||
|
|
||||||
|
class BusyBox(User):
|
||||||
|
"""
|
||||||
|
This is the BusyBox class for use on systems that have adduser, deluser,
|
||||||
|
and delgroup commands. It overrides the following methods:
|
||||||
|
- create_user()
|
||||||
|
- remove_user()
|
||||||
|
- modify_user()
|
||||||
|
"""
|
||||||
|
|
||||||
|
def create_user(self):
|
||||||
|
cmd = [self.module.get_bin_path('adduser', True)]
|
||||||
|
|
||||||
|
cmd.append('-D')
|
||||||
|
|
||||||
|
if self.uid is not None:
|
||||||
|
cmd.append('-u')
|
||||||
|
cmd.append(self.uid)
|
||||||
|
|
||||||
|
if self.group is not None:
|
||||||
|
if not self.group_exists(self.group):
|
||||||
|
self.module.fail_json(msg='Group {0} does not exist'.format(self.group))
|
||||||
|
cmd.append('-G')
|
||||||
|
cmd.append(self.group)
|
||||||
|
|
||||||
|
if self.comment is not None:
|
||||||
|
cmd.append('-g')
|
||||||
|
cmd.append(self.comment)
|
||||||
|
|
||||||
|
if self.home is not None:
|
||||||
|
cmd.append('-h')
|
||||||
|
cmd.append(self.home)
|
||||||
|
|
||||||
|
if self.shell is not None:
|
||||||
|
cmd.append('-s')
|
||||||
|
cmd.append(self.shell)
|
||||||
|
|
||||||
|
if not self.create_home:
|
||||||
|
cmd.append('-H')
|
||||||
|
|
||||||
|
if self.skeleton is not None:
|
||||||
|
cmd.append('-k')
|
||||||
|
cmd.append(self.skeleton)
|
||||||
|
|
||||||
|
if self.system:
|
||||||
|
cmd.append('-S')
|
||||||
|
|
||||||
|
cmd.append(self.name)
|
||||||
|
|
||||||
|
rc, out, err = self.execute_command(cmd)
|
||||||
|
|
||||||
|
if rc is not None and rc != 0:
|
||||||
|
self.module.fail_json(name=self.name, msg=err, rc=rc)
|
||||||
|
|
||||||
|
if self.password is not None:
|
||||||
|
cmd = [self.module.get_bin_path('chpasswd', True)]
|
||||||
|
cmd.append('--encrypted')
|
||||||
|
data = '{name}:{password}'.format(name=self.name, password=self.password)
|
||||||
|
rc, out, err = self.execute_command(cmd, data=data)
|
||||||
|
|
||||||
|
if rc is not None and rc != 0:
|
||||||
|
self.module.fail_json(name=self.name, msg=err, rc=rc)
|
||||||
|
|
||||||
|
# Add to additional groups
|
||||||
|
if self.groups is not None and len(self.groups):
|
||||||
|
groups = self.get_groups_set()
|
||||||
|
add_cmd_bin = self.module.get_bin_path('adduser', True)
|
||||||
|
for group in groups:
|
||||||
|
cmd = [add_cmd_bin, self.name, group]
|
||||||
|
rc, out, err = self.execute_command(cmd)
|
||||||
|
if rc is not None and rc != 0:
|
||||||
|
self.module.fail_json(name=self.name, msg=err, rc=rc)
|
||||||
|
|
||||||
|
return rc, out, err
|
||||||
|
|
||||||
|
def remove_user(self):
|
||||||
|
|
||||||
|
cmd = [
|
||||||
|
self.module.get_bin_path('deluser', True),
|
||||||
|
self.name
|
||||||
|
]
|
||||||
|
|
||||||
|
if self.remove:
|
||||||
|
cmd.append('--remove-home')
|
||||||
|
|
||||||
|
return self.execute_command(cmd)
|
||||||
|
|
||||||
|
def modify_user(self):
|
||||||
|
current_groups = self.user_group_membership()
|
||||||
|
groups = []
|
||||||
|
rc = None
|
||||||
|
out = ''
|
||||||
|
err = ''
|
||||||
|
info = self.user_info()
|
||||||
|
add_cmd_bin = self.module.get_bin_path('adduser', True)
|
||||||
|
remove_cmd_bin = self.module.get_bin_path('delgroup', True)
|
||||||
|
|
||||||
|
# Manage group membership
|
||||||
|
if self.groups is not None and len(self.groups):
|
||||||
|
groups = self.get_groups_set()
|
||||||
|
group_diff = set(current_groups).symmetric_difference(groups)
|
||||||
|
|
||||||
|
if group_diff:
|
||||||
|
for g in groups:
|
||||||
|
if g in group_diff:
|
||||||
|
add_cmd = [add_cmd_bin, self.name, g]
|
||||||
|
rc, out, err = self.execute_command(add_cmd)
|
||||||
|
if rc is not None and rc != 0:
|
||||||
|
self.module.fail_json(name=self.name, msg=err, rc=rc)
|
||||||
|
|
||||||
|
for g in group_diff:
|
||||||
|
if g not in groups and not self.append:
|
||||||
|
remove_cmd = [remove_cmd_bin, self.name, g]
|
||||||
|
rc, out, err = self.execute_command(remove_cmd)
|
||||||
|
if rc is not None and rc != 0:
|
||||||
|
self.module.fail_json(name=self.name, msg=err, rc=rc)
|
||||||
|
|
||||||
|
# Manage password
|
||||||
|
if self.password is not None:
|
||||||
|
if info[1] != self.password:
|
||||||
|
cmd = [self.module.get_bin_path('chpasswd', True)]
|
||||||
|
cmd.append('--encrypted')
|
||||||
|
data = '{name}:{password}'.format(name=self.name, password=self.password)
|
||||||
|
rc, out, err = self.execute_command(cmd, data=data)
|
||||||
|
|
||||||
|
if rc is not None and rc != 0:
|
||||||
|
self.module.fail_json(name=self.name, msg=err, rc=rc)
|
||||||
|
|
||||||
|
return rc, out, err
|
||||||
|
|
||||||
|
|
||||||
|
class Alpine(BusyBox):
|
||||||
|
"""
|
||||||
|
This is the Alpine User manipulation class. It inherits the BusyBox class
|
||||||
|
behaviors such as using adduser and deluser commands.
|
||||||
|
"""
|
||||||
|
platform = 'Linux'
|
||||||
|
distribution = 'Alpine'
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
ssh_defaults = dict(
|
ssh_defaults = dict(
|
||||||
bits=0,
|
bits=0,
|
||||||
|
|
Loading…
Reference in a new issue