2
0
mirror of https://opendev.org/x/pyghmi synced 2026-02-25 11:49:20 +00:00

Add facility for managing ikvm launch

Change-Id: I7db63b95d5740b3fa94ab70da0e7a4db56a5690c
This commit is contained in:
Jarrod Johnson
2025-03-13 15:43:28 -04:00
parent c392b76b37
commit 4e19aa985c
8 changed files with 71 additions and 1 deletions

View File

@@ -654,6 +654,14 @@ class Command(object):
return sel.EventHandler(self.init_sdr(), self).decode_pet(specifictrap,
petdata)
def get_ikvm_methods(self):
self.oem_init()
return self._oem.get_ikvm_methods()
def get_ikvm_launchdata(self):
self.oem_init()
return self._oem.get_ikvm_launchdata()
def get_inventory_descriptions(self):
"""Retrieve list of things that could be inventoried

View File

@@ -47,7 +47,14 @@ class OEMHandler(object):
rsp = ipmicmd.xraw_command(netfn=0x2c, command=2, data=(0xdc, 1, 0, 0))
wattage = struct.unpack('<H', rsp['data'][1:3])[0]
return wattage
def get_ikvm_methods(self):
return []
def get_ikvm_launchdata(self):
# no standard ikvm behavior, must be oem defined
return {}
def get_average_processor_temperature(self, ipmicmd):
# DCMI suggests preferrence for 0x37 ('Air inlet')
# If not that, then 0x40 ('Air inlet')

View File

@@ -216,6 +216,15 @@ class OEMHandler(generic.OEMHandler):
return self.immhandler.remove_storage_configuration(cfgspec)
return super(OEMHandler, self).remove_storage_configuration()
def get_ikvm_methods(self):
if self.has_xcc:
return ['url']
def get_ikvm_launchdata(self):
if self.has_xcc:
return self.immhandler.get_ikvm_launchdata()
return {}
def clear_storage_arrays(self):
if self.has_xcc:
return self.immhandler.clear_storage_arrays()

View File

@@ -922,6 +922,18 @@ class XCCClient(IMMClient):
return accinfo.get('RoleId', None)
return None
def get_ikvm_methods(self):
return ['url']
def get_ikvm_launchdata(self):
access = self.grab_redfish_response_with_status('/redfish/v1/Managers/1/Oem/Lenovo/RemoteControl/Actions/LenovoRemoteControlService.GetRemoteConsoleToken', {})
if access[0].get('Token', None):
accessinfo = {
'url': '/#/login?{}&context=remote&mode=multi'.format(access[0]['Token'])
}
return accessinfo
return {}
def set_user_access(self, uid, privilege_level):
uid = uid - 1
role = None

View File

@@ -432,6 +432,12 @@ class Command(object):
self._do_web_request(accinfo[0], userinfo, method='PATCH', etag=etag)
return True
def get_ikvm_methods(self):
return self.oem.get_ikvm_methods()
def get_ikvm_launchdata(self):
return self.oem.get_ikvm_launchdata()
def user_delete(self, uid):
self.oem.user_delete(uid)

View File

@@ -1021,6 +1021,12 @@ class OEMHandler(object):
return topdata
return topdata
def get_ikvm_methods(self):
return []
def get_ikvm_launchdata(self):
return {}
def get_storage_configuration(self):
raise exc.UnsupportedFunctionality(
'Remote storage configuration not supported on this platform')

View File

@@ -157,6 +157,17 @@ class OEMHandler(generic.OEMHandler):
del immsettings[setting]
return immsettings
def get_ikvm_methods(self):
return ['url']
def get_ikvm_launchdata(self):
access = self._do_web_request('/redfish/v1/Managers/1/Oem/Lenovo/RemoteControl/Actions/LenovoRemoteControlService.GetRemoteConsoleToken', {})
if access.get('Token', None):
accessinfo = {
'url': '/#/login?{}&context=remote&mode=multi'.format(access['Token'])
}
return accessinfo
def get_system_configuration(self, hideadvanced=True, fishclient=None,
fetchimm=False):
if not self.fwc:

View File

@@ -77,6 +77,17 @@ class OEMHandler(generic.OEMHandler):
progress({'phase': 'complete'})
return savefile
def get_ikvm_methods(self):
return ['openbmc', 'url']
def get_ikvm_launchdata(self):
access = self._do_web_request('/redfish/v1/Managers/1/Oem/Lenovo/RemoteControl/Actions/LenovoRemoteControlService.GetRemoteConsoleToken', {})
if access.get('Token', None):
accessinfo = {
'url': '/#/login?{}&context=remote&mode=multi'.format(access['Token'])
}
return accessinfo
def get_system_power_watts(self, fishclient):
powerinfo = fishclient._do_web_request('/redfish/v1/Chassis/1/Sensors/power_Sys_Power')
return powerinfo['Reading']