mirror of
https://github.com/valitydev/salt.git
synced 2024-11-08 17:33:54 +00:00
Merge pull request #1984 from 0xDEC0DE/develop
Make the ability to determine the SysV runlevel on Upstart track how the system does it
This commit is contained in:
commit
b793afc3fa
@ -49,18 +49,68 @@ def __virtual__():
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def _find_utmp():
|
||||||
|
'''
|
||||||
|
Figure out which utmp file to use when determining runlevel.
|
||||||
|
Sometimes /var/run/utmp doesn't exist, /run/utmp is the new hotness.
|
||||||
|
'''
|
||||||
|
result = {}
|
||||||
|
# These are the likely locations for the file on Ubuntu
|
||||||
|
for utmp in ('/var/run/utmp', '/run/utmp'):
|
||||||
|
try:
|
||||||
|
result[os.stat(utmp).st_mtime] = utmp
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
return result[sorted(result.keys()).pop()]
|
||||||
|
|
||||||
|
|
||||||
|
def _default_runlevel():
|
||||||
|
'''
|
||||||
|
Try to figure out the default runlevel. It is kept in
|
||||||
|
/etc/init/rc-sysinit.conf, but can be overridden with entries
|
||||||
|
in /etc/inittab, or via the kernel command-line at boot
|
||||||
|
'''
|
||||||
|
# Try to get the "main" default. If this fails, throw up our
|
||||||
|
# hands and just guess "2", because things are horribly broken
|
||||||
|
try:
|
||||||
|
for line in open('/etc/init/rc-sysinit.conf'):
|
||||||
|
if line.startswith('env DEFAULT_RUNLEVEL'):
|
||||||
|
runlevel = line.split('=')[-1].strip()
|
||||||
|
except:
|
||||||
|
return '2'
|
||||||
|
|
||||||
|
# Look for an optional "legacy" override in /etc/inittab
|
||||||
|
try:
|
||||||
|
for line in open('/etc/inittab'):
|
||||||
|
if not line.startswith('#') and 'initdefault' in line:
|
||||||
|
runlevel = line.split(':')[1]
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# The default runlevel can also be set via the kernel command-line.
|
||||||
|
# Kinky.
|
||||||
|
try:
|
||||||
|
valid_strings = set(('0', '1', '2', '3', '4', '5', '6', 's', 'S', '-s', 'single'))
|
||||||
|
for line in open('/proc/cmdline'):
|
||||||
|
for arg in split(line.strip()):
|
||||||
|
if arg in valid_strings:
|
||||||
|
runlevel = arg
|
||||||
|
break
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
return runlevel
|
||||||
|
|
||||||
def _runlevel():
|
def _runlevel():
|
||||||
'''
|
'''
|
||||||
Return the current runlevel
|
Return the current runlevel
|
||||||
TODO: Should this return the "default" runlevel? For example, bad
|
|
||||||
things will likely happen when 'salt' is run in single-user mode.
|
|
||||||
'''
|
'''
|
||||||
out = __salt__['cmd.run']('runlevel').strip()
|
out = __salt__['cmd.run']('runlevel {0}'.format(_find_utmp())).strip()
|
||||||
try:
|
try:
|
||||||
return out.split()[1]
|
return out.split()[1]
|
||||||
except IndexError:
|
except IndexError:
|
||||||
# The runlevel is unknown, return 3 for a default
|
# The runlevel is unknown, return the default
|
||||||
return '2'
|
return _default_runlevel()
|
||||||
|
|
||||||
|
|
||||||
def _is_symlink(name):
|
def _is_symlink(name):
|
||||||
|
Loading…
Reference in New Issue
Block a user