Skip to content

BMCVersion

BMCVersion upgrades BMC firmware for one BMC.

It is the BMC counterpart of BIOSVersion, with additional multi-server maintenance gating because one BMC can manage multiple hosts.

What It Does

  • Targets one BMC via spec.bmcRef.
  • Starts firmware update with image metadata from spec.image.
  • Tracks BMC-reported task state in status.upgradeTask.
  • Requests maintenance for associated servers (policy-driven).
  • Resets BMC and verifies final firmware version before completion.

Spec Reference

FieldRequiredDescription
spec.bmcRef.nameNoTarget BMC. Immutable after create. Required for the resource to function.
spec.versionYesDesired firmware version.
spec.image.URIYesFirmware image URI.
spec.image.transferProtocolNoDownload protocol, such as HTTPS.
spec.image.secretRefNoSecret credentials for image source.
spec.updatePolicyNoUpdate override. Current supported enum value: Force.
spec.serverMaintenancePolicyNoMaintenance policy for managed servers.
spec.serverMaintenanceRefs[]NoExisting maintenance refs, typically controller-managed.

Status Fields In Detail

FieldWhat it meansHow to use it for debugging
status.stateLifecycle (Pending, InProgress, Completed, Failed).First triage dimension for blockers vs active failures.
status.upgradeTask.URIFirmware task identifier on BMC.Empty URI indicates issue stage failed before task creation.
status.upgradeTask.stateTask execution state.Use to identify running vs terminal task behavior.
status.upgradeTask.statusTask health/status classification.Correlate with failure reason in conditions.
status.upgradeTask.percentageCompleteReported task progress.Long flatlines indicate stalled vendor-side execution.
status.conditions[]Maintenance wait, task issue/completion, reset, verification checkpoints.Primary error location and action hints.

Detailed State Machine

Detailed Workflow (All Main Cases)

  1. Prechecks and references:
  • Resolve target BMC from spec.bmcRef.
  • Ensure ownership/finalizer and cleanup stale refs.
  1. Version check:
  • If current firmware already equals desired version, transition to Completed.
  1. Maintenance orchestration:
  • Identify all servers managed by BMC.
  • Request maintenance resources as needed and wait for approvals.
  1. Upgrade issue:
  • Call BMC update endpoint with spec.image and policy.
  • Persist task data in status.upgradeTask.
  1. Upgrade monitoring:
  • Poll task state and completion percentage.
  • Handle vendor task disappearance by fallback version verification.
  1. Reset and verify:
  • Reset/reboot BMC when workflow requires it.
  • Read back version and compare against spec.version.
  1. Terminalization:
  • Success path sets Completed.
  • Failure path sets Failed with reason-specific condition updates.

Troubleshooting Guide

SymptomWhere to checkLikely causeAction
Stuck in Pendingstatus.conditions[], maintenance refsServer maintenance not approvedApprove all referenced maintenance resources.
No task URI after issue attemptstatus.conditions[]Invalid image URI/protocol/secret or vendor rejectionValidate image source and vendor update prerequisites.
Task progress frozenstatus.upgradeTask.percentageCompleteBMC task stalledInspect BMC task endpoint/logs; retry after stabilization.
Task missing unexpectedlycondition messages + current versionVendor cleaned task earlyUse version readback to decide completion vs retry.
Failed after resetverify conditionVersion did not convergeConfirm supported upgrade path and perform controlled retry.

Example

yaml
apiVersion: metal.ironcore.dev/v1alpha1
kind: BMCVersion
metadata:
  name: bmcversion-sample
spec:
  bmcRef:
    name: endpoint-sample
  version: 2.45.455b66-rev4
  image:
    URI: https://fw.example.com/contoso/bmc/2.45.455b66-rev4.bin
    transferProtocol: HTTPS
  updatePolicy: Force
  serverMaintenancePolicy: OwnerApproval
EU and German government funding logos

Funded by the European Union – NextGenerationEU.

The views and opinions expressed are solely those of the author(s) and do not necessarily reflect the views of the European Union or the European Commission. Neither the European Union nor the European Commission can be held responsible for them.