2
0
mirror of https://github.com/xcat2/confluent.git synced 2026-09-04 20:17:58 +00:00

Read power and boot from a service that has no system

A Redfish service may publish no Systems collection, and power and cooling
equipment does exactly that. sysurl is then None, and get_power and
get_bootdev handed it straight to a request, raising TypeError from inside
the url library.

sysinfo already guarded the same field. Both now ask through _system_url and
get a refusal naming what is missing. DMTF publish three services of this
shape, which is why they sit commented out in inventory-dmtf.yaml.
This commit is contained in:
Markus Hilger
2026-09-01 23:51:32 +02:00
parent 5d5ad821f4
commit 26151c506f
+14 -2
View File
@@ -501,6 +501,18 @@ class Command(object):
'BMC does not implement extended firmware information')
return self._varfwinventory
def _system_url(self):
"""The system this client acts on, or a refusal that says so.
Power and cooling equipment publishes no Systems collection, which is
legal. sysurl is then None, and handing that to a request raised
TypeError from inside the url library.
"""
if not self.sysurl:
raise exc.UnsupportedFunctionality(
'this service publishes no computer system to act on')
return self.sysurl
async def sysinfo(self):
if not self.sysurl:
return {}
@@ -517,7 +529,7 @@ class Command(object):
return await self._do_web_request(bmcurl)
async def get_power(self):
currinfo = await self._do_web_request(self.sysurl, cache=False)
currinfo = await self._do_web_request(self._system_url(), cache=False)
return {'powerstate': str(currinfo['PowerState'].lower())}
async def reseat_bay(self, bay):
@@ -640,7 +652,7 @@ class Command(object):
:raises: PyghmiException on error
:returns: dict
"""
result = await self._do_web_request(self.sysurl)
result = await self._do_web_request(self._system_url())
overridestate = result.get('Boot', {}).get(
'BootSourceOverrideEnabled', None)
if overridestate == 'Disabled':