Fixes to group module for better error handling

Takes a lot of the fixes to the user module and applies them to the
group module: provide stdout/stderr in result if available and call
fail_json() if the attempted action fails.
pull/603/head
Stephen Fromm 13 years ago
parent 238e4adba2
commit 3a5f2126a6

@ -54,11 +54,10 @@ def add_group_info(kwargs):
def group_del(group): def group_del(group):
cmd = [GROUPDEL, group] cmd = [GROUPDEL, group]
rc = subprocess.call(cmd, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE) p = subprocess.Popen(cmd, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
if rc == 0: (out, err) = p.communicate()
return True rc = p.returncode
else: return (rc, out, err)
return False
def group_add(group, **kwargs): def group_add(group, **kwargs):
cmd = [GROUPADD] cmd = [GROUPADD]
@ -69,11 +68,10 @@ def group_add(group, **kwargs):
elif key == 'system' and kwargs[key] == 'yes': elif key == 'system' and kwargs[key] == 'yes':
cmd.append('-r') cmd.append('-r')
cmd.append(group) cmd.append(group)
rc = subprocess.call(cmd, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE) p = subprocess.Popen(cmd, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
if rc == 0: (out, err) = p.communicate()
return True rc = p.returncode
else: return (rc, out, err)
return False
def group_mod(group, **kwargs): def group_mod(group, **kwargs):
cmd = [GROUPMOD] cmd = [GROUPMOD]
@ -84,13 +82,12 @@ def group_mod(group, **kwargs):
cmd.append('-g') cmd.append('-g')
cmd.append(kwargs[key]) cmd.append(kwargs[key])
if len(cmd) == 1: if len(cmd) == 1:
return False return (None, '', '')
cmd.append(group) cmd.append(group)
rc = subprocess.call(cmd, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE) p = subprocess.Popen(cmd, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
if rc == 0: (out, err) = p.communicate()
return True rc = p.returncode
else: return (rc, out, err)
return False
def group_exists(group): def group_exists(group):
try: try:
@ -156,18 +153,32 @@ if system not in ['yes', 'no']:
if name is None: if name is None:
fail_json(msg='name is required') fail_json(msg='name is required')
changed = False rc = None
rc = 0 out = ''
err = ''
result = {}
result['name'] = name
if state == 'absent': if state == 'absent':
if group_exists(name): if group_exists(name):
changed = group_del(name) (rc, out, err) = group_del(name)
exit_json(name=name, changed=changed) if rc != 0:
fail_json(name=name, msg=err)
elif state == 'present': elif state == 'present':
if not group_exists(name): if not group_exists(name):
changed = group_add(name, gid=gid, system=system) (rc, out, err) = group_add(name, gid=gid, system=system)
else: else:
changed = group_mod(name, gid=gid) (rc, out, err) = group_mod(name, gid=gid)
exit_json(name=name, changed=changed) if rc is not None and rc != 0:
fail_json(name=name, msg=err)
if rc is None:
result['changed'] = False
else:
result['changed'] = True
if out:
result['stdout'] = out
if err:
result['stderr'] = err
exit_json(**result)
fail_json(name=name, msg='Unexpected position reached') fail_json(name=name, msg='Unexpected position reached')

Loading…
Cancel
Save