Merge pull request #37426 from jfindlay/mac_sleep

Wait for macOS to change system settings
This commit is contained in:
Mike Place 2016-11-04 17:35:51 +13:00 committed by GitHub
commit 766b1437c2
3 changed files with 110 additions and 33 deletions

View file

@ -6,7 +6,6 @@ Module for editing power settings on Mac OS X
'''
# Import python libs
from __future__ import absolute_import
import time
# Import salt libs
import salt.utils
@ -112,9 +111,14 @@ def set_sleep(minutes):
value = _validate_sleep(minutes)
cmd = 'systemsetup -setsleep {0}'.format(value)
salt.utils.mac_utils.execute_return_success(cmd)
return get_sleep() == {'Computer': value,
'Display': value,
'Hard Disk': value}
state = []
for check in (get_computer_sleep, get_display_sleep, get_harddisk_sleep):
state.append(salt.utils.mac_utils.confirm_updated(
value,
check,
))
return all(state)
def get_computer_sleep():
@ -156,7 +160,11 @@ def set_computer_sleep(minutes):
value = _validate_sleep(minutes)
cmd = 'systemsetup -setcomputersleep {0}'.format(value)
salt.utils.mac_utils.execute_return_success(cmd)
return str(value) in get_computer_sleep()
return salt.utils.mac_utils.confirm_updated(
str(value),
get_computer_sleep,
)
def get_display_sleep():
@ -198,7 +206,11 @@ def set_display_sleep(minutes):
value = _validate_sleep(minutes)
cmd = 'systemsetup -setdisplaysleep {0}'.format(value)
salt.utils.mac_utils.execute_return_success(cmd)
return str(value) in get_display_sleep()
return salt.utils.mac_utils.confirm_updated(
str(value),
get_display_sleep,
)
def get_harddisk_sleep():
@ -241,11 +253,10 @@ def set_harddisk_sleep(minutes):
cmd = 'systemsetup -setharddisksleep {0}'.format(value)
salt.utils.mac_utils.execute_return_success(cmd)
# Give macOS some time to change the setting
for i in range(5):
if str(value) in get_harddisk_sleep():
return True
time.sleep(1)
return salt.utils.mac_utils.confirm_updated(
str(value),
get_harddisk_sleep,
)
def get_wake_on_modem():
@ -288,7 +299,11 @@ def set_wake_on_modem(enabled):
state = salt.utils.mac_utils.validate_enabled(enabled)
cmd = 'systemsetup -setwakeonmodem {0}'.format(state)
salt.utils.mac_utils.execute_return_success(cmd)
return get_wake_on_modem() == state
return salt.utils.mac_utils.confirm_updated(
state,
get_wake_on_modem,
)
def get_wake_on_network():
@ -331,7 +346,11 @@ def set_wake_on_network(enabled):
state = salt.utils.mac_utils.validate_enabled(enabled)
cmd = 'systemsetup -setwakeonnetworkaccess {0}'.format(state)
salt.utils.mac_utils.execute_return_success(cmd)
return get_wake_on_network() == state
return salt.utils.mac_utils.confirm_updated(
state,
get_wake_on_network,
)
def get_restart_power_failure():
@ -374,7 +393,11 @@ def set_restart_power_failure(enabled):
state = salt.utils.mac_utils.validate_enabled(enabled)
cmd = 'systemsetup -setrestartpowerfailure {0}'.format(state)
salt.utils.mac_utils.execute_return_success(cmd)
return get_restart_power_failure() == state
return salt.utils.mac_utils.confirm_updated(
state,
get_restart_power_failure,
)
def get_restart_freeze():
@ -419,7 +442,11 @@ def set_restart_freeze(enabled):
state = salt.utils.mac_utils.validate_enabled(enabled)
cmd = 'systemsetup -setrestartfreeze {0}'.format(state)
salt.utils.mac_utils.execute_return_success(cmd)
return get_restart_freeze() == state
return salt.utils.mac_utils.confirm_updated(
state,
get_restart_freeze,
)
def get_sleep_on_power_button():
@ -463,4 +490,8 @@ def set_sleep_on_power_button(enabled):
state = salt.utils.mac_utils.validate_enabled(enabled)
cmd = 'systemsetup -setallowpowerbuttontosleepcomputer {0}'.format(state)
salt.utils.mac_utils.execute_return_success(cmd)
return get_sleep_on_power_button() == state
return salt.utils.mac_utils.confirm_updated(
state,
get_sleep_on_power_button,
)

View file

@ -226,9 +226,11 @@ def set_remote_login(enable):
cmd = 'systemsetup -f -setremotelogin {0}'.format(state)
salt.utils.mac_utils.execute_return_success(cmd)
enabled = salt.utils.mac_utils.validate_enabled(get_remote_login())
return state == enabled
return salt.utils.mac_utils.confirm_updated(
state,
get_remote_login,
normalize_ret=True,
)
def get_remote_events():
@ -276,9 +278,11 @@ def set_remote_events(enable):
cmd = 'systemsetup -setremoteappleevents {0}'.format(state)
salt.utils.mac_utils.execute_return_success(cmd)
enabled = salt.utils.mac_utils.validate_enabled(get_remote_events())
return state == enabled
return salt.utils.mac_utils.confirm_updated(
state,
get_remote_events,
normalize_ret=True,
)
def get_computer_name():
@ -318,7 +322,10 @@ def set_computer_name(name):
cmd = 'systemsetup -setcomputername "{0}"'.format(name)
salt.utils.mac_utils.execute_return_success(cmd)
return get_computer_name() == name
return salt.utils.mac_utils.confirm_updated(
name,
get_computer_name,
)
def get_subnet_name():
@ -362,7 +369,10 @@ def set_subnet_name(name):
cmd = 'systemsetup -setlocalsubnetname "{0}"'.format(name)
salt.utils.mac_utils.execute_return_success(cmd)
return get_subnet_name() == name
return salt.utils.mac_utils.confirm_updated(
name,
get_subnet_name,
)
def get_startup_disk():
@ -429,7 +439,10 @@ def set_startup_disk(path):
cmd = 'systemsetup -setstartupdisk {0}'.format(path)
salt.utils.mac_utils.execute_return_result(cmd)
return get_startup_disk() == path
return salt.utils.mac_utils.confirm_updated(
path,
get_startup_disk,
)
def get_restart_delay():
@ -490,7 +503,10 @@ def set_restart_delay(seconds):
cmd = 'systemsetup -setwaitforstartupafterpowerfailure {0}'.format(seconds)
salt.utils.mac_utils.execute_return_success(cmd)
return get_restart_delay() == seconds
return salt.utils.mac_utils.confirm_updated(
seconds,
get_restart_delay,
)
def get_disable_keyboard_on_lock():
@ -540,10 +556,11 @@ def set_disable_keyboard_on_lock(enable):
'{0}'.format(state)
salt.utils.mac_utils.execute_return_success(cmd)
enabled = salt.utils.mac_utils.validate_enabled(
get_disable_keyboard_on_lock())
return enabled == state
return salt.utils.mac_utils.confirm_updated(
state,
get_disable_keyboard_on_lock,
normalize_ret=True,
)
def get_boot_arch():
@ -612,4 +629,7 @@ def set_boot_arch(arch='default'):
cmd = 'systemsetup -setkernelbootarchitecture {0}'.format(arch)
salt.utils.mac_utils.execute_return_success(cmd)
return arch in get_boot_arch()
return salt.utils.mac_utils.confirm_updated(
arch,
get_boot_arch,
)

View file

@ -9,8 +9,7 @@ from __future__ import absolute_import
import logging
import subprocess
import os
# Import Third Party Libs
import time
# Import Salt Libs
import salt.utils
@ -19,6 +18,9 @@ import salt.grains.extra
from salt.exceptions import CommandExecutionError, SaltInvocationError,\
TimedProcTimeoutError
# Import Third Party Libs
from salt.ext.six.moves import range
DEFAULT_SHELL = salt.grains.extra.shell()['shell']
# Set up logging
@ -193,3 +195,27 @@ def validate_enabled(enabled):
return 'on' if enabled.lower() in ['on', 'yes'] else 'off'
return 'on' if bool(enabled) else 'off'
def confirm_updated(value, check_fun, normalize_ret=False, wait=5):
'''
Wait upto ``wait`` seconds for a system parameter to be changed before
deciding it hasn't changed.
:param str value: The value indicating a successful change
:param function check_fun: The function whose return is compared with
``value``
:param bool normalize_ret: Whether to normalize the return from
``check_fun`` with ``validate_enabled``
:param int wait: The maximum amount of seconds to wait for a system
parameter to change
'''
for i in range(wait):
state = validate_enabled(check_fun()) if normalize_ret else check_fun()
if value in state:
return True
time.sleep(1)
return False