Add 'system' option for user and group modules

Creates system accounts/groups; corresponds to the '-r' option for {user,group}add.

The option is only honored when users/groups are added, not when modified.
reviewable/pr18780/r1
Daniel Néri 13 years ago
parent 31f6cd6408
commit 0c4c3422f3

@ -65,6 +65,8 @@ def group_add(group, **kwargs):
if key == 'gid' and kwargs[key] is not None: if key == 'gid' and kwargs[key] is not None:
cmd.append('-g') cmd.append('-g')
cmd.append(kwargs[key]) cmd.append(kwargs[key])
elif key == 'system' and kwargs[key] == 'yes':
cmd.append('-r')
cmd.append(group) cmd.append(group)
rc = subprocess.call(cmd, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE) rc = subprocess.call(cmd, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
if rc == 0: if rc == 0:
@ -142,9 +144,12 @@ for x in items:
state = params.get('state','present') state = params.get('state','present')
name = params.get('name', None) name = params.get('name', None)
gid = params.get('gid', None) gid = params.get('gid', None)
system = params.get('system', 'no')
if state not in [ 'present', 'absent' ]: if state not in [ 'present', 'absent' ]:
fail_json(msg='invalid state') fail_json(msg='invalid state')
if system not in ['yes', 'no']:
fail_json(msg='invalid system')
if name is None: if name is None:
fail_json(msg='name is required') fail_json(msg='name is required')
@ -156,7 +161,7 @@ if state == 'absent':
exit_json(name=name, changed=changed) exit_json(name=name, changed=changed)
elif state == 'present': elif state == 'present':
if not group_exists(name): if not group_exists(name):
changed = group_add(name, gid=gid) changed = group_add(name, gid=gid, system=system)
else: else:
changed = group_mod(name, gid=gid) changed = group_mod(name, gid=gid)

@ -110,6 +110,8 @@ def user_add(user, **kwargs):
cmd.append('-m') cmd.append('-m')
else: else:
cmd.append('-M') cmd.append('-M')
elif key == 'system' and kwargs[key] == 'yes':
cmd.append('-r')
cmd.append(user) cmd.append(user)
rc = subprocess.call(cmd, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE) rc = subprocess.call(cmd, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
if rc == 0: if rc == 0:
@ -269,6 +271,7 @@ remove = params.get('remove', False)
# =========================================== # ===========================================
# following options are specific to useradd # following options are specific to useradd
createhome = params.get('createhome', 'yes') createhome = params.get('createhome', 'yes')
system = params.get('system', 'no')
# =========================================== # ===========================================
# following options are specific to usermod # following options are specific to usermod
@ -278,6 +281,8 @@ if state not in [ 'present', 'absent' ]:
fail_json(msg='invalid state') fail_json(msg='invalid state')
if createhome not in [ 'yes', 'no' ]: if createhome not in [ 'yes', 'no' ]:
fail_json(msg='invalid createhome') fail_json(msg='invalid createhome')
if system not in ['yes', 'no']:
fail_json(msg='invalid system')
if append not in [ 'yes', 'no' ]: if append not in [ 'yes', 'no' ]:
fail_json(msg='invalid append') fail_json(msg='invalid append')
if name is None: if name is None:
@ -293,7 +298,8 @@ elif state == 'present':
if not user_exists(name): if not user_exists(name):
changed = user_add(name, uid=uid, group=group, groups=groups, changed = user_add(name, uid=uid, group=group, groups=groups,
comment=comment, home=home, shell=shell, comment=comment, home=home, shell=shell,
password=password, createhome=createhome) password=password, createhome=createhome,
system=system)
else: else:
changed = user_mod(name, uid=uid, group=group, groups=groups, changed = user_mod(name, uid=uid, group=group, groups=groups,
comment=comment, home=home, shell=shell, comment=comment, home=home, shell=shell,

Loading…
Cancel
Save