Skip to content

Add a new Ironic field representing node health to Gophercloud - #3619

Merged
mandre merged 1 commit into
gophercloud:mainfrom
jacob-anders:health-field
Feb 12, 2026
Merged

mandre merged 1 commit into
gophercloud:mainfrom
jacob-anders:health-field

Conversation

@jacob-anders

@jacob-anders jacob-anders commented Jan 28, 2026 •

Copy link
Copy Markdown
Contributor

Add support for the node health field which reports hardware health status from the BMC. Requires Ironic API microversion 1.109.

Signed-off-by: Jacob Anders [email protected]
Assisted-by: Claude-4.5-opus-high

Fixes #[3618]

Links to the line numbers/files in the OpenStack source code that support the
code in this PR:

https://review.opendev.org/c/openstack/ironic/+/966946

@github-actions github-actions Bot added edit:baremetal This PR updates baremetal code semver:minor Backwards-compatible change backport-v2 This PR will be backported to v2 labels Jan 28, 2026
Comment thread openstack/baremetal/v1/nodes/requests.go
Comment thread openstack/baremetal/v1/nodes/results.go
Comment thread openstack/baremetal/v1/nodes/results.go Outdated
Add support for the node health field which reports hardware health
status from the BMC. Requires Ironic API microversion 1.109.

Partially implements metal3-io#2888

Signed-off-by: Jacob Anders <[email protected]>
Assisted-by: Claude-4.5-opus-high
Co-authored-by: Cursor <[email protected]>
@coveralls

Copy link
Copy Markdown

Coverage Status

coverage: 63.865%. remained the same
when pulling 67428ef on jacob-anders:health-field
into c716223 on gophercloud:main.

@mandre
mandre enabled auto-merge February 12, 2026 08:18
@mandre
mandre added this pull request to the merge queue Feb 12, 2026
Merged via the queue into gophercloud:main with commit 5db1251 Feb 12, 2026
66 of 68 checks passed
@jacob-anders
jacob-anders deleted the health-field branch February 24, 2026 06:08
jacob-anders added a commit to jacob-anders/baremetal-operator that referenced this pull request Feb 24, 2026
Implements the Healthy condition for BareMetalHosts as specified in
the conditions RFE (metal3-io#2888). The condition reflects the health status
reported by the BMC via Ironic's health rollup feature.

- Add HealthyCondition constants and reasons to API types
- Add GetHealth() method to provisioner interface with named health
  status constants (HealthOK, HealthWarning, HealthCritical)
- Implement GetHealth() in ironic, demo, and fixture provisioners
- Update computeConditions() to set Healthy based on health status
- Use ConditionUnknown when health status is unavailable or when
  provisioner is nil (e.g. before registration)
- Add unit tests for health condition logic at both controller and
  ironic provisioner levels

Health mapping:
- "OK" -> True/Healthy
- "Warning" -> False/Warning
- "Critical" -> False/CriticalError
- "" or unknown -> Unknown/Unknown

Depends on gophercloud/gophercloud#3619 (merged) which adds the
Health field to the Ironic node struct.

Partially implements metal3-io#2888

Assisted-by: Claude Code
Signed-off-by: Jacob Anders <[email protected]>
jacob-anders added a commit to jacob-anders/baremetal-operator that referenced this pull request Feb 24, 2026
Implements the Healthy condition for BareMetalHosts as specified in
the conditions RFE (metal3-io#2888). The condition reflects the health status
reported by the BMC via Ironic's health rollup feature.

- Add HealthyCondition constants and reasons to API types
- Add GetHealth() method to provisioner interface with named health
  status constants (HealthOK, HealthWarning, HealthCritical)
- Implement GetHealth() in ironic, demo, and fixture provisioners
- Update computeConditions() to set Healthy based on health status
- Use ConditionUnknown when health status is unavailable or when
  provisioner is nil (e.g. before registration)
- Add unit tests for health condition logic at both controller and
  ironic provisioner levels

Health mapping:
- "OK" -> True/Healthy
- "Warning" -> False/Warning
- "Critical" -> False/CriticalError
- "" or unknown -> Unknown/Unknown

Depends on gophercloud/gophercloud#3619 (merged) which adds the
Health field to the Ironic node struct.

Partially implements metal3-io#2888

Signed-off-by: Jacob Anders <[email protected]>
Assisted-By: Claude Code Sonnet 4.6
jacob-anders added a commit to jacob-anders/baremetal-operator that referenced this pull request Mar 4, 2026
Implements the Healthy condition for BareMetalHosts as specified in
the conditions RFE (metal3-io#2888). The condition reflects the health status
reported by the BMC via Ironic's health rollup feature.

- Add HealthyCondition constants and reasons to API types
- Add GetHealth() method to provisioner interface with named health
  status constants (HealthOK, HealthWarning, HealthCritical)
- Implement GetHealth() in ironic, demo, and fixture provisioners
- Update computeConditions() to set Healthy based on health status
- Use ConditionUnknown when health status is unavailable or when
  provisioner is nil (e.g. before registration)
- Add unit tests for health condition logic at both controller and
  ironic provisioner levels

Health mapping:
- "OK" -> True/Healthy
- "Warning" -> False/Warning
- "Critical" -> False/CriticalError
- "" or unknown -> Unknown/Unknown

Depends on gophercloud/gophercloud#3619 (merged) which adds the
Health field to the Ironic node struct.

Partially implements metal3-io#2888

Signed-off-by: Jacob Anders <[email protected]>
Assisted-By: Claude Code Sonnet 4.6
jacob-anders added a commit to jacob-anders/baremetal-operator that referenced this pull request Mar 10, 2026
Implements the Healthy condition for BareMetalHosts as specified in
the conditions RFE (metal3-io#2888). The condition reflects the health status
reported by the BMC via Ironic's health rollup feature.

- Add HealthyCondition constants and reasons to API types
- Add GetHealth() method to provisioner interface with named health
  status constants (HealthOK, HealthWarning, HealthCritical)
- Implement GetHealth() in ironic, demo, and fixture provisioners
- Update computeConditions() to set Healthy based on health status
- Use ConditionUnknown when health status is unavailable or when
  provisioner is nil (e.g. before registration)
- Add unit tests for health condition logic at both controller and
  ironic provisioner levels

Health mapping:
- "OK" -> True/Healthy
- "Warning" -> False/Warning
- "Critical" -> False/CriticalError
- "" or unknown -> Unknown/Unknown

Depends on gophercloud/gophercloud#3619 (merged) which adds the
Health field to the Ironic node struct.

Partially implements metal3-io#2888

Signed-off-by: Jacob Anders <[email protected]>
Assisted-By: Claude Code Sonnet 4.6
jacob-anders added a commit to jacob-anders/baremetal-operator that referenced this pull request Mar 10, 2026
Implements the Healthy condition for BareMetalHosts as specified in
the conditions RFE (metal3-io#2888). The condition reflects the health status
reported by the BMC via Ironic's health rollup feature.

- Add HealthyCondition constants and reasons to API types
- Add GetHealth() method to provisioner interface with named health
  status constants (HealthOK, HealthWarning, HealthCritical)
- Implement GetHealth() in ironic, demo, and fixture provisioners
- Update computeConditions() to set Healthy based on health status
- Use ConditionUnknown when health status is unavailable or when
  provisioner is nil (e.g. before registration)
- Add unit tests for health condition logic at both controller and
  ironic provisioner levels

Health mapping:
- "OK" -> True/Healthy
- "Warning" -> False/Warning
- "Critical" -> False/CriticalError
- "" or unknown -> Unknown/Unknown

Depends on gophercloud/gophercloud#3619 (merged) which adds the
Health field to the Ironic node struct.

Partially implements metal3-io#2888

Signed-off-by: Jacob Anders <[email protected]>
Assisted-By: Claude Code Sonnet 4.6
jacob-anders added a commit to jacob-anders/baremetal-operator that referenced this pull request Mar 11, 2026
Implements the Healthy condition for BareMetalHosts as specified in
the conditions RFE (metal3-io#2888). The condition reflects the health status
reported by the BMC via Ironic's health rollup feature.

- Add HealthyCondition constants and reasons to API types
- Add GetHealth() method to provisioner interface with named health
  status constants (HealthOK, HealthWarning, HealthCritical)
- Implement GetHealth() in ironic, demo, and fixture provisioners
- Update computeConditions() to set Healthy based on health status
- Use ConditionUnknown when health status is unavailable or when
  provisioner is nil (e.g. before registration)
- Add unit tests for health condition logic at both controller and
  ironic provisioner levels

Health mapping:
- "OK" -> True/Healthy
- "Warning" -> False/Warning
- "Critical" -> False/CriticalError
- "" or unknown -> Unknown/Unknown

Depends on gophercloud/gophercloud#3619 (merged) which adds the
Health field to the Ironic node struct.

Partially implements metal3-io#2888

Signed-off-by: Jacob Anders <[email protected]>
Assisted-By: Claude Code Sonnet 4.6
Made-with: Cursor
jacob-anders added a commit to jacob-anders/baremetal-operator that referenced this pull request Mar 11, 2026
Implements the Healthy condition for BareMetalHosts as specified in
the conditions RFE (metal3-io#2888). The condition reflects the health status
reported by the BMC via Ironic's health rollup feature.

- Add HealthyCondition constants and reasons to API types
- Add GetHealth() method to provisioner interface with named health
  status constants (HealthOK, HealthWarning, HealthCritical)
- Implement GetHealth() in ironic, demo, and fixture provisioners
- Update computeConditions() to set Healthy based on health status
- Use ConditionUnknown when health status is unavailable or when
  provisioner is nil (e.g. before registration)
- Add unit tests for health condition logic at both controller and
  ironic provisioner levels

Health mapping:
- "OK" -> True/Healthy
- "Warning" -> False/Warning
- "Critical" -> False/CriticalError
- "" or unknown -> Unknown/Unknown

Depends on gophercloud/gophercloud#3619 (merged) which adds the
Health field to the Ironic node struct.

Partially implements metal3-io#2888

Signed-off-by: Jacob Anders <[email protected]>
Assisted-By: Claude Code Sonnet 4.6
jacob-anders added a commit to jacob-anders/baremetal-operator that referenced this pull request Mar 13, 2026
Implements the Healthy condition for BareMetalHosts as specified in
the conditions RFE (metal3-io#2888). The condition reflects the health status
reported by the BMC via Ironic's health rollup feature.

- Add HealthyCondition constants and reasons to API types
- Add GetHealth() method to provisioner interface with named health
  status constants (HealthOK, HealthWarning, HealthCritical)
- Implement GetHealth() in ironic, demo, and fixture provisioners
- Update computeConditions() to set Healthy based on health status
- Use ConditionUnknown when health status is unavailable or when
  provisioner is nil (e.g. before registration)
- Add unit tests for health condition logic at both controller and
  ironic provisioner levels

Health mapping:
- "OK" -> True/Healthy
- "Warning" -> False/Warning
- "Critical" -> False/CriticalError
- "" or unknown -> Unknown/Unknown

Depends on gophercloud/gophercloud#3619 (merged) which adds the
Health field to the Ironic node struct.

Partially implements metal3-io#2888

Signed-off-by: Jacob Anders <[email protected]>
Assisted-By: Claude Code Sonnet 4.6
(cherry picked from commit 8421ab6)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport-v2 This PR will be backported to v2 edit:baremetal This PR updates baremetal code semver:minor Backwards-compatible change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants