mirror of
https://github.com/xcat2/confluent.git
synced 2026-09-24 08:44:05 +00:00
9e811dd81c
Reading an event log skipped every log service whose id or name said journal, dump, post code, host logger or crash, on every implementation. Those names are bmcweb's: the AMI and Lenovo bmcs call theirs SEL, EventLog, AuditLog and PlatformLog. bmcweb does need the distinction, keeping its event log under the system while a clear would destroy its dumps, so it gets a handler that names the words and generic names none, reading whatever a platform publishes.
70 lines
3.0 KiB
Python
70 lines
3.0 KiB
Python
# Copyright 2019 Lenovo Corporation
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
import aiohmi.redfish.oem.dell.main as dell
|
|
import aiohmi.redfish.oem.generic as generic
|
|
import aiohmi.redfish.oem.lenovo.main as lenovo
|
|
import aiohmi.redfish.oem.ami.main as ami
|
|
import aiohmi.redfish.oem.megware.main as megware
|
|
import aiohmi.redfish.oem.openbmc.main as openbmc
|
|
|
|
OEMMAP = {
|
|
'Lenovo': lenovo,
|
|
'Dell': dell,
|
|
'AMI': ami,
|
|
'Ami': ami,
|
|
'Megware': megware,
|
|
# bmcweb spells its oem key OpenBmc on the manager and OpenBMC elsewhere
|
|
'OpenBMC': openbmc,
|
|
'OpenBmc': openbmc,
|
|
}
|
|
|
|
|
|
async def get_oem_handler(sysinfo, sysurl, webclient, cache, cmd, rootinfo={}):
|
|
if rootinfo.get('Vendor', None) in OEMMAP:
|
|
return await OEMMAP[rootinfo['Vendor']].get_handler(sysinfo, sysurl,
|
|
webclient, cache, cmd, rootinfo)
|
|
for oem in sysinfo.get('Oem', {}):
|
|
if oem in OEMMAP:
|
|
return await OEMMAP[oem].get_handler(sysinfo, sysurl, webclient, cache,
|
|
cmd, rootinfo)
|
|
for oem in sysinfo.get('Links', {}).get('OEM', []):
|
|
if oem in OEMMAP:
|
|
return await OEMMAP[oem].get_handler(sysinfo, sysurl, webclient, cache,
|
|
cmd, rootinfo)
|
|
# The manager document names the vendor on implementations that do not say
|
|
# so at the service root or on the system, so consult it before settling for
|
|
# generic. During the early invocation the client cannot fetch it through
|
|
# cmd yet, so ask for it directly.
|
|
bmcinfo = {}
|
|
if rootinfo:
|
|
managers = rootinfo.get('Managers', {}).get('@odata.id', None)
|
|
if managers:
|
|
mgrcol, status = await webclient.grab_json_response_with_status(
|
|
managers)
|
|
if status == 200:
|
|
for manager in mgrcol.get('Members', []):
|
|
mgrinfo, status = await webclient.grab_json_response_with_status(
|
|
manager['@odata.id'])
|
|
if status == 200:
|
|
bmcinfo = mgrinfo
|
|
break
|
|
else:
|
|
bmcinfo = await cmd.bmcinfo()
|
|
for oem in bmcinfo.get('Oem', {}):
|
|
if oem in OEMMAP:
|
|
return await OEMMAP[oem].get_handler(sysinfo, sysurl, webclient, cache,
|
|
cmd, rootinfo)
|
|
return await generic.OEMHandler.create(sysinfo, sysurl, webclient, cache, cmd._gpool, rootinfo)
|