Skip to content

[FEATURE] support Redfish Endpoint FQDNs in static discovery #50

@rainest

Description

@rainest

Is your feature request related to a problem? Please describe.
Currently, ochami discover static inserts nodes whose Redfish endpoints assume an FQDN equal to the node xname. This is not true in all environments' DNS.

Downstream, this prevents PCS and RCS from interacting with nodes.

Describe the solution you'd like
Static discover provides some means of setting the Redfish endpoint FQDN from node configuration.

Describe alternatives you've considered
Similar to #47, node objects do not have a means to configure Redfish endpoints directly. I'm not sure if that'd be desirable or not--it could just mean a lot of boilerplate that's annoying to write out manually.

Currently Redfish endpoints are constructed from other node fields. IDK the extent to which:

  • There are use cases where you'd need to configure multiple RFEs per node, and those RFEs need independent field values.
  • There are use cases that require multiple Systems or Managers per RFE.
  • How annoying it'd be to support both manual RFE configuration if provided and the existing generated RFE if you only provide node-level fields.

I suspect the answer is that we'll want to continue having the one generated RFE, adding node fields as needed. I think we intend discover static mostly for testing and development, and don't expect it to support all use cases, with Magellan expected to handle prod. Maybe that's wrong?

Additional context

See OpenCHAMI/power-control#47 for an example downstream problem. After reviewing the exchange between SMD and PCS, it looks like my main issue should be handled by SMD. If it provides an RFE FQDN, PCS will see and use that, rather than the xname.

Roughly, a discover static with

nodes:
-   bmc_ipaddr: 10.49.186.68
    ipaddr: 10.119.4.198
    group: example
    mac: "5e:72:59:e4:6a:a8"
    name: ba004
    nid: 1
    xname: x1000c0s0b0n0
    interfaces: []

will send

POST /hsm/v2/Inventory/RedfishEndpoints HTTP/1.1                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                               
{                                                                                                                                                                                                                                                                                              
  "ID": "x1000c0s0b0",                                                                                                                                                                                                                                                                         
  "Type": "NodeBMC",                                                                                                                                                                                                                                                                           
  "Name": "ba004",                                                                                                                                                                                                                                                                             
  "UUID": "f0798ffa-1f27-4d01-aa30-0b1a76eb75e3",                                                                                                                                                                                                                                              
  "DiscoveryInfo": {                                                                                                                                                                                                                                                                           
    "LastAttempt": "0001-01-01T00:00:00Z"                                                                                                                                                                                                                                                      
  },                                                                                                                                                                                                                                                                                           
  "SchemaVersion": 1,                                                                                                                                                                                                                                                                          
  "Systems": [ ... ],                                                                                                                                                                                                                                                                                           
  "Managers": [ ... ]                                                                                                                                                                                                                                                                                            
}

but result in DB entries like

smd=# select * from rf_endpoints where id='x1000c0s0b0';
-[ RECORD 1 ]------+----------------------------------------
id                 | x1000c0s0b0
type               | NodeBMC
name               | ba004
hostname           | 
domain             | 
fqdn               | x1000c0s0b0
ip_info            | {}
enabled            | t
uuid               | f0798ffa-1f27-4d01-aa30-0b1a76eb75e3
user               | 
password           | 
usessdp            | f
macrequired        | f
macaddr            | 
rediscoveronupdate | f
templateid         | 
discovery_info     | {"LastDiscoveryStatus":"NotYetQueried"}
ipaddr             | 

There's some other bits of the DB I don't fully understand, but the main bit is that fqdn is set despite our not sending it. I know sending it works (Magellan does), I don't know where exactly SMD defaults it to the xname.

2025-08-27-smd-discover.tar.gz has some additional example resources, comparing static versus Magellan SMD entries.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions