added control to fail or not on missing key

made split 'smarter' but still overridable
reviewable/pr18780/r1
Brian Coca 11 years ago committed by Michael DeHaan
parent 391f8ec600
commit 5aa2ca762a

@ -25,23 +25,33 @@ DOCUMENTATION = '''
module: getent
short_description: a wrapper to the unix getent utility
description:
- Runs getent against one of it's various databases and returns information into the host's facts
- Runs getent against one of it's various databases and returns information into
the host's facts
version_added: "1.6"
options:
database:
required: True
description:
- the name of a getent database supported by the target system (passwd, group, hosts, etc).
- the name of a getent database supported by the target system (passwd, group,
hosts, etc).
key:
required: False
default: ''
description:
- key from which to return values from the specified database, otherwise the full contents are returned.
- key from which to return values from the specified database, otherwise the
full contents are returned.
split:
required: False
default: None
description:
- character used to override the split the database values into lists/arrays, i.e ':' or '\t'.
- character used to override the split the database values into lists/arrays,
i.e ':' or '\t'. Otherwise split tries to be 'smart' depending on DB.
fail_key:
required: False
default: True
description:
- If a supplied key is missing this will make the task fail if True
notes: [ Not all databases support enumeration, check system documentation for details ]
requirements: [ ]
author: Brian Coca
@ -49,7 +59,7 @@ author: Brian Coca
EXAMPLES = '''
# get root user info
- getent: database=passwd key=root split=':'
- getent: database=passwd key=root
# get all groups
- getent: database=group split=':'
@ -57,8 +67,8 @@ EXAMPLES = '''
# get all hosts, split by tab
- getent: database=hosts
# get http service info
- getent: database=services key=http
# get http service info, no error if missing
- getent: database=services key=http fail_key=False
# get user password hash (requires sudo/root)
- getent: database=shadow key=www-data split=:
@ -71,13 +81,17 @@ def main():
database = dict(required=True),
key = dict(required=False, default=None),
split = dict(required=False, default=None),
fail_key = dict(required=False, default=True),
),
supports_check_mode = True,
)
colon = [ 'passwd', 'shadow', 'group', 'gshadow' ]
database = module.params['database']
key = module.params.get('key')
split = module.params.get('split')
fail_key = module.params.get('fail_key')
getent_bin = module.get_bin_path('getent', True)
@ -86,6 +100,9 @@ def main():
else:
cmd = [ getent_bin, database ]
if split is None and database in colon:
split = ':'
try:
rc, out, err = module.run_command(cmd)
except Exception, e:
@ -105,8 +122,10 @@ def main():
elif rc == 1:
msg = "Missing arguments, or database unknown."
elif rc == 2:
results[dbtree][key] = None
module.exit_json(ansible_facts=results, msg="One or more supplied key could not be found in the database.")
msg = "One or more supplied key could not be found in the database."
if not fail_key:
results[dbtree][key] = None
module.exit_json(ansible_facts=results, msg=msg)
elif rc == 3:
msg = "Enumeration not supported on this database."

Loading…
Cancel
Save