2
0
mirror of https://opendev.org/x/pyghmi synced 2026-03-29 06:13:30 +00:00

Implement NTP support for Lenovo Thinkserver

Provide a framework for augmenting configuration with NTP data
and implement it for Lenovo thinkservers

Change-Id: I87dc79549619b8d912425a26d56d73f515630981
This commit is contained in:
Jarrod Johnson
2015-09-08 14:28:51 -04:00
parent 79d23bd4c6
commit 9b16aba8a8
3 changed files with 83 additions and 0 deletions

View File

@@ -547,6 +547,22 @@ class Command(object):
self.oem_init()
return self._oem.get_leds()
def get_ntp_enabled(self):
self.oem_init()
return self._oem.get_ntp_enabled()
def set_ntp_enabled(self, enable):
self.oem_init()
return self._oem.set_ntp_enabled(enable)
def get_ntp_servers(self):
self.oem_init()
return self._oem.get_ntp_servers()
def set_ntp_server(self, server, index=0):
self.oem_init()
return self._oem.set_ntp_server(server, index)
def get_health(self):
"""Summarize health of managed system

View File

@@ -105,6 +105,37 @@ class OEMHandler(object):
"""
return ()
def get_ntp_enabled(self):
"""Get whether ntp is enabled or not
:returns: True if enabled, False if disabled, None if unsupported
"""
return None
def set_ntp_enabled(self, enabled):
"""Set whether NTP should be enabled
:returns: True on success
"""
return None
def get_ntp_servers(self):
"""Get current set of configured NTP servers
:returns iterable of configured NTP servers:
"""
return ()
def set_ntp_server(self, server, index=0):
"""Set an ntp server
:param server: Destination address of server to reach
:param index: Index of server to configure, primary assumed if not
specified
:returns: True if success
"""
return None
def process_fru(self, fru):
"""Modify a fru entry with OEM understanding.

View File

@@ -189,6 +189,42 @@ class OEMHandler(generic.OEMHandler):
event['component_type_id'] == 13):
event['component'] += ' {0}'.format(evdata[1] & 0b11111)
def get_ntp_enabled(self):
if self.has_tsm:
ntpres = self.ipmicmd.xraw_command(netfn=0x32, command=0xa7)
return ntpres['data'][0] == '\x01'
return None
def get_ntp_servers(self):
if self.has_tsm:
srvs = []
ntpres = self.ipmicmd.xraw_command(netfn=0x32, command=0xa7)
srvs.append(ntpres['data'][1:129].rstrip('\x00'))
srvs.append(ntpres['data'][129:257].rstrip('\x00'))
return srvs
return None
def set_ntp_enabled(self, enabled):
if self.has_tsm:
if enabled:
self.ipmicmd.xraw_command(
netfn=0x32, command=0xa8, data=(3, 1))
else:
self.ipmicmd.xraw_command(
netfn=0x32, command=0xa8, data=(3, 0))
return True
return None
def set_ntp_server(self, server, index=0):
if self.has_tsm:
if not (0 <= index <= 1):
raise pygexc.InvalidParameterValue("Index must be 0 or 1")
cmddata = bytearray((1 + index, ))
cmddata += server.ljust(128, '\x00')
self.ipmicmd.xraw_command(netfn=0x32, command=0xa8, data=cmddata)
return True
return None
@property
def has_tsm(self):
"""True if this particular server have a TSM based service processor