From 0fe2a34e11041f40b033a50abdbac41baedc0b21 Mon Sep 17 00:00:00 2001 From: Iury Gregory Melo Ferreira Date: Wed, 8 May 2024 08:44:58 -0300 Subject: [PATCH] Handle HSM for HFC --- controllers/metal3.io/host_state_machine.go | 8 ++++++++ pkg/provisioner/ironic/ironic.go | 11 +++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/controllers/metal3.io/host_state_machine.go b/controllers/metal3.io/host_state_machine.go index 24389496cd..73a94b13f8 100644 --- a/controllers/metal3.io/host_state_machine.go +++ b/controllers/metal3.io/host_state_machine.go @@ -481,6 +481,14 @@ func (hsm *hostStateMachine) handleAvailable(info *reconcileInfo) actionResult { return actionComplete{} } + // Check if hostFirmwareComponents have changed + if dirty, _, err := hsm.Reconciler.getHostFirmwareComponents(info); err != nil { + return actionError{err} + } else if dirty { + hsm.NextState = metal3api.StatePreparing + return actionComplete{} + } + // ErrorCount is cleared when appropriate inside actionManageAvailable actResult := hsm.Reconciler.actionManageAvailable(hsm.Provisioner, info) if _, complete := actResult.(actionComplete); complete { diff --git a/pkg/provisioner/ironic/ironic.go b/pkg/provisioner/ironic/ironic.go index cee3bc7fb2..4680d9aae0 100644 --- a/pkg/provisioner/ironic/ironic.go +++ b/pkg/provisioner/ironic/ironic.go @@ -1426,11 +1426,18 @@ func (p *ironicProvisioner) buildManualCleaningSteps(bmcAccess bmc.AccessDetails } // extract to generate the updates that will trigger a clean step - newUpdates := make(map[string]string) + // the format we send to ironic is: + // [{"component":"...", "url":"..."}, {"component":"...","url":".."}] + var newUpdates []map[string]string if data.TargetFirmwareComponents != nil { for _, update := range data.TargetFirmwareComponents { - newUpdates[update.Component] = update.URL + newComponentUpdate := map[string]string{ + "component": update.Component, + "url": update.URL, + } + newUpdates = append(newUpdates, newComponentUpdate) } + } if len(newUpdates) != 0 {