I am trying to create a playbook to unmount an AFS mounted home directory, but I can’t unmount it because the user running ansible has open files because of ansible. I can’t do this with user with a local home, or ssh configs or anything like that. I need to do it with a regular ansible play and regular user, so no funky ssh configs or other changes to my hosts.
Here is my play:
- name: check if files are open in /afs
raw: “cd / && /usr/sbin/lsof /afs”
register: command_result
failed_when: “command_result.rc != 1”
If I run it with ansible, it will succeed, but ansible-playbook will show two processes spawned by the ansible run (sh and sudo).
Is there a way to change the current directory before tasks are run?
Thanks,
Jesse
Does the chdir argument to raw work?
raw: "/usr/sbin/lsof /afs" chdir="/"
Another thought might be to use the “at” module to defer execution of this particular command, sleep a bit to let it run, and then proceed?
Or configure ansible.cfg to use a different temp dir path?
raw doesn’t seem to have a chdir option or it doesn’t have the effect I need, command does but it still shows open files. I already have remote_tmp set to a different directory. I’m sure I could do something with at, but that’s not the cleanest way to do it. I had thought to set “sudo_exe = cd / && sudo” but that caused errors about executing sudo.
If remote temp is outside of your home why would it still prevent things from unmounting?
The CWD of the shell and sudo are still the home directory. The chdir needs to happen before sudo is called.