From 23e6c7044906efa3ad7dbe19c3d327c897c38548 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Wed, 23 Sep 2026 15:08:55 -0400 Subject: [PATCH] Wire up generic redfish device configuration Have redfishbmc be able to attempt a redfish onboarding. User must supply initial user and password, since we have no idea about the vendor choices at this level. --- confluent_server/confluent/discovery/core.py | 3 ++- .../discovery/handlers/redfishbmc.py | 19 +++++++++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/confluent_server/confluent/discovery/core.py b/confluent_server/confluent/discovery/core.py index 0b4c2bbe..ddefa172 100644 --- a/confluent_server/confluent/discovery/core.py +++ b/confluent_server/confluent/discovery/core.py @@ -78,6 +78,7 @@ import confluent.discovery.handlers.smm as smm import confluent.discovery.handlers.xcc as xcc import confluent.discovery.handlers.xcc3 as xcc3 import confluent.discovery.handlers.smm3 as smm3 +import confluent.discovery.handlers.redfishbmc as redfishbmc import confluent.discovery.handlers.megarac as megarac import confluent.discovery.handlers.nvos as nvos import confluent.discovery.handlers.eureka as eureka @@ -132,7 +133,7 @@ nodehandlers = { 'onie-switch': None, 'cumulus-switch': None, 'affluent-switch': None, - 'generic-redfish': None, + 'generic-redfish': redfishbmc, 'generic-https': None, 'generic-ssh': None, 'nvos-switch': nvos, diff --git a/confluent_server/confluent/discovery/handlers/redfishbmc.py b/confluent_server/confluent/discovery/handlers/redfishbmc.py index c4e4a5af..153331a9 100644 --- a/confluent_server/confluent/discovery/handlers/redfishbmc.py +++ b/confluent_server/confluent/discovery/handlers/redfishbmc.py @@ -54,6 +54,8 @@ class NodeHandler(generic.NodeHandler): self.atdefault = True self._srvroot = None self._mgrinfo = None + self.defuser = None + self.defpass = None super(NodeHandler, self).__init__(info, configmanager) async def srvroot(self, wc): @@ -117,13 +119,20 @@ class NodeHandler(generic.NodeHandler): async def _get_wc(self): await self.get_https_cert() - defuser, defpass = self.get_firmware_default_account_info() wc = webclient.WebConnection(self.ipaddr, 443, verifycallback=self.validate_cert) - wc.set_basic_credentials(defuser, defpass) + wc.set_basic_credentials(self.targuser, self.targpass) wc.set_header('Content-Type', 'application/json') wc.set_header('Accept', 'application/json') wc.set_header('Host', 'credible-bmc') + rsp, status = await wc.grab_json_response_with_status('/redfish/v1/Managers') + if status >= 200 and status < 300: + self.trieddefault = True + self.curruser = self.targuser + self.currpass = self.targpass + return wc if not self.trieddefault: + defuser, defpass = self.defuser, self.defpass + wc.set_basic_credentials(defuser, defpass) rsp, status = await wc.grab_json_response_with_status('/redfish/v1/Managers') if status == 403: self.trieddefault = True @@ -230,6 +239,12 @@ class NodeHandler(generic.NodeHandler): defuser = ndefuser if not defpass: defpass = ndefpass + if not isinstance(defuser, str) and isinstance(defuser, bytes): + defuser = defuser.decode('utf-8') + if not isinstance(defpass, str) and isinstance(defpass, bytes): + defpass = defpass.decode('utf-8') + self.defuser = defuser + self.defpass = defpass user, passwd, _ = self.get_node_credentials( nodename, creds, defuser, defpass) user = util.stringify(user)