From d99e29cd576e85dadfebe9d7af4967616c024f79 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Thu, 21 Jan 2021 15:14:41 -0500 Subject: [PATCH] Add NTP support to TSMA The TSMA code for SR635/SR655 now supports manipulating NTP configuration. Change-Id: I75885b6a1ea8ed7e751143fc7827b59d53101c12 --- pyghmi/ipmi/oem/lenovo/handler.py | 10 ++++++ pyghmi/redfish/oem/lenovo/tsma.py | 51 +++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/pyghmi/ipmi/oem/lenovo/handler.py b/pyghmi/ipmi/oem/lenovo/handler.py index 0f32f1df..fd32c5fb 100755 --- a/pyghmi/ipmi/oem/lenovo/handler.py +++ b/pyghmi/ipmi/oem/lenovo/handler.py @@ -292,6 +292,8 @@ class OEMHandler(generic.OEMHandler): return ntpres['data'][0] == '\x01' elif self.is_fpc: return self.smmhandler.get_ntp_enabled(self._fpc_variant) + elif self.has_tsma: + return self.tsmahandler.get_ntp_enabled() return None def get_ntp_servers(self): @@ -303,6 +305,8 @@ class OEMHandler(generic.OEMHandler): return srvs if self.is_fpc: return self.smmhandler.get_ntp_servers() + if self.has_tsma: + return self.tsmahandler.get_ntp_servers() return None def set_ntp_enabled(self, enabled): @@ -317,6 +321,8 @@ class OEMHandler(generic.OEMHandler): if self.is_fpc: self.smmhandler.set_ntp_enabled(enabled) return True + if self.has_tsma: + self.tsmahandler.set_ntp_enabled(enabled) return None def set_ntp_server(self, server, index=0): @@ -333,6 +339,10 @@ class OEMHandler(generic.OEMHandler): 'SMM supports indexes 0 through 2') self.smmhandler.set_ntp_server(server, index) return True + elif self.has_tsma: + if not (0 <= index <= 1): + raise pygexc.InvalidParameterValue("Index must be 0 or 1") + return self.tsmahandler.set_ntp_server(server, index) return None def set_user_access(self, uid, channel, callback, link_auth, ipmi_msg, diff --git a/pyghmi/redfish/oem/lenovo/tsma.py b/pyghmi/redfish/oem/lenovo/tsma.py index 52db9b15..b62c87b1 100644 --- a/pyghmi/redfish/oem/lenovo/tsma.py +++ b/pyghmi/redfish/oem/lenovo/tsma.py @@ -143,6 +143,57 @@ class TsmHandler(generic.OEMHandler): self.tsm, self.username, self.password, verifycallback=self._certverify) + def get_ntp_enabled(self): + wc = self.wc + rsp, status = wc.grab_json_response_with_status( + '/api/settings/date-time') + if status != 200: + raise Exception(repr(rsp)) + return rsp.get('ntp_auto_date', 0) > 0 + + def set_ntp_enabled(self, enabled): + wc = self.wc + rsp, status = wc.grab_json_response_with_status( + '/api/settings/date-time') + if status != 200: + raise Exception(repr(rsp)) + rsp['ntp_auto_date'] = 1 if enabled else 0 + rsp, status = wc.grab_json_response_with_status( + '/api/settings/date-time', rsp, method='PUT') + if status != 200: + raise Exception(repr(rsp)) + + def get_ntp_servers(self): + wc = self.wc + rsp, status = wc.grab_json_response_with_status( + '/api/settings/date-time') + if status != 200: + raise Exception(repr(rsp)) + srvs = [] + pntp = rsp.get('primary_ntp', None) + if pntp: + srvs.append(pntp) + pntp = rsp.get('secondary_ntp', None) + if pntp: + srvs.append(pntp) + return srvs + + def set_ntp_server(self, server, index=0): + wc = self.wc + rsp, status = wc.grab_json_response_with_status( + '/api/settings/date-time') + if status != 200: + raise Exception(repr(rsp)) + if index == 0: + rsp['primary_ntp'] = server + elif index == 1: + rsp['secondary_ntp'] = server + rsp['ntp_auto_date'] = 1 + rsp, status = wc.grab_json_response_with_status( + '/api/settings/date-time', rsp, method='PUT') + if status != 200: + raise Exception(repr(rsp)) + def get_firmware_inventory(self, components, raisebypass=True): wc = self.wc fwinf, status = wc.grab_json_response_with_status(