- name: Get user home directory
userhomedir: loginid=targetuser
register: user
- name: Debug info
debug: msg="Home directory for user {{ user.loginid }} is {{ user.dest }}"
#!/usr/bin/python
# -------
# Imports
# -------
import sys, pwd, re
from ansible.module_utils.basic import *
# --------------
# Define Globals
# --------------
module = AnsibleModule(
argument_spec = dict(
loginid = dict(required=True, type='str')
)
)
if sys.platform.startswith('linux'):
default_home = "/home"
default_useradd_file = "/etc/default/useradd"
default_useradd_entry = "HOME"
elif sys.platform.startswith('freebsd'):
default_home = "/home"
default_useradd_file = "/etc/adduser.conf"
default_useradd_entry = "homeprefix"
else:
module.fail_json(msg="Module does not know how to handle operating system " + sys.platform)
was_useradd_parsed = False
# ----------------
# Define Functions
# ----------------
def getDirFromPasswd(check_username):
pwd_homedir = ""
try:
user_entry = pwd.getpwnam(check_username)
pwd_homedir = user_entry[5]
except:
pass
return {'method': "Password File", 'directory':pwd_homedir}
def getDirFromUseradd(check_username):
global was_useradd_parsed
def_dir = ""
home_regex = "^" + re.escape(default_useradd_entry) + "=(.*)"
try:
default_file = open(default_useradd_file)
was_useradd_parsed = True
for line in default_file:
match = re.search(home_regex, line)
if match:
def_dir = match.group(1) + "/" + check_username
module.exit_json(changed=False, loginid="TEST", homedir=chosen_home['directory'], source=chosen_home['method'], platform=sys.platform)
break
default_file.close()
except:
pass
return {'method': "Useradd Default", 'directory':def_dir}
def getDirFromFallback(check_username):
assumed_directory = default_home + "/" + check_username
return {'method': "Fall-back", 'directory': assumed_directory}
# -------------
# Main Function
# -------------
def main():
username = module.params['loginid']
chosen_home = getDirFromPasswd(username)
if chosen_home['directory'] == "":
chosen_home = getDirFromUseradd(username)
if chosen_home['directory'] == "":
chosen_home = getDirFromFallback(username)
module.exit_json(changed=False, loginid=username, dest=chosen_home['directory'], source=chosen_home['method'], platform=sys.platform, useradd_parsed=was_useradd_parsed)
# ------
# Run Me
# ------
if __name__ == '__main__':
main()