Make salt.utils.minion._check_cmdline work on OSes without /proc.

This commit is contained in:
C. R. Oldham 2016-10-14 17:07:41 -06:00
parent c30656814d
commit 1ac87e0efd

View file

@ -17,6 +17,7 @@ def running(opts):
'''
Return the running jobs on this minion
'''
ret = []
proc_dir = os.path.join(opts['cachedir'], 'proc')
if not os.path.isdir(proc_dir):
@ -110,13 +111,30 @@ def _read_proc_file(path, opts):
def _check_cmdline(data):
'''
Check the proc filesystem cmdline to see if this process is a salt process
In some cases where there are an insane number of processes being created
on a system a PID can get recycled or assigned to a non-Salt process.
This fn checks to make sure the PID we are checking on is actually
a Salt process.
For non-Linux systems with no procfs style /proc mounted
we punt and just return True (assuming that the data has a PID in it)
'''
if salt.utils.is_windows():
return True
pid = data.get('pid')
if not pid:
return False
if not os.path.isdir('/proc') or salt.utils.is_windows():
return True
# Some BSDs have a /proc dir, but procfs is not mounted there. Since
# processes are represented by directories in /proc, if there are no
# dirs in proc, this is a non-procfs supporting OS. In this case
# like the one above we just return True
dirs_in_proc = False
for dirpath, dirnames, files in os.walk('/proc'):
if dirnames:
dirs_in_proc = True
break
if not dirs_in_proc:
return True
path = os.path.join('/proc/{0}/cmdline'.format(pid))
if not os.path.isfile(path):
return False