Mini Shell
"""
Management of NTP servers on Windows
.. versionadded:: 2014.1.0
"""
import logging
import salt.utils.platform
log = logging.getLogger(__name__)
# Define the module's virtual name
__virtualname__ = "ntp"
def __virtual__():
"""
This only supports Windows
"""
if not salt.utils.platform.is_windows():
return (False, "Module win_system: module only works on Windows systems")
return __virtualname__
def set_servers(*servers):
"""
Set Windows to use a list of NTP servers
CLI Example:
.. code-block:: bash
salt '*' ntp.set_servers 'pool.ntp.org' 'us.pool.ntp.org'
"""
service_name = "w32time"
if not __salt__["service.status"](service_name):
if not __salt__["service.start"](service_name):
return False
server_cmd = [
"W32tm",
"/config",
"/syncfromflags:manual",
"/manualpeerlist:{}".format(" ".join(servers)),
]
reliable_cmd = ["W32tm", "/config", "/reliable:yes"]
update_cmd = ["W32tm", "/config", "/update"]
for cmd in server_cmd, reliable_cmd, update_cmd:
__salt__["cmd.run"](cmd, python_shell=False)
if not sorted(list(servers)) == get_servers():
return False
__salt__["service.restart"](service_name)
return True
def get_servers():
"""
Get list of configured NTP servers
CLI Example:
.. code-block:: bash
salt '*' ntp.get_servers
"""
cmd = ["w32tm", "/query", "/configuration"]
lines = __salt__["cmd.run"](cmd, python_shell=False).splitlines()
for line in lines:
try:
if line.startswith("NtpServer:"):
_, ntpsvrs = line.rsplit(" (", 1)[0].split(":", 1)
return sorted(ntpsvrs.split())
except ValueError as e:
return False
return False
Zerion Mini Shell 1.0