@@ -800,10 +800,14 @@ func (r *BareMetalHostReconciler) registerHost(prov provisioner.Provisioner, inf
800800 return actionError {err }
801801 }
802802 switch info .host .Status .Provisioning .State {
803- case metal3api .StateRegistering , metal3api .StateExternallyProvisioned , metal3api . StateDeleting , metal3api .StatePoweringOffBeforeDelete :
803+ case metal3api .StateRegistering , metal3api .StateDeleting , metal3api .StatePoweringOffBeforeDelete :
804804 // No need to create PreprovisioningImage if host is not yet registered
805- // or is externally provisioned
806805 preprovImgFormats = nil
806+ case metal3api .StateProvisioned , metal3api .StateExternallyProvisioned :
807+ // Provisioned hosts only need the image for servicing
808+ if info .host .Status .OperationalStatus != metal3api .OperationalStatusServicing {
809+ preprovImgFormats = nil
810+ }
807811 case metal3api .StateDeprovisioning :
808812 // PreprovisioningImage is not required for deprovisioning when cleaning is disabled
809813 if info .host .Spec .AutomatedCleaningMode == metal3api .CleaningModeDisabled {
@@ -835,6 +839,7 @@ func (r *BareMetalHostReconciler) registerHost(prov provisioner.Provisioner, inf
835839 BootMode : info .host .Status .Provisioning .BootMode ,
836840 AutomatedCleaningMode : info .host .Spec .AutomatedCleaningMode ,
837841 State : info .host .Status .Provisioning .State ,
842+ OperationalStatus : info .host .Status .OperationalStatus ,
838843 CurrentImage : getCurrentImage (info .host ),
839844 PreprovisioningImage : preprovImg ,
840845 PreprovisioningNetworkData : preprovisioningNetworkData ,
@@ -1460,6 +1465,8 @@ func (r *BareMetalHostReconciler) doServiceIfNeeded(prov provisioner.Provisioner
14601465 // going to impact a small subset of Firmware Settings implementations.
14611466 if info .host .Status .OperationalStatus != metal3api .OperationalStatusServicing {
14621467 info .host .Status .OperationalStatus = metal3api .OperationalStatusServicing
1468+ // NOTE(dtantsur): it's very important to yield to the controller and retry before actually calling Ironic:
1469+ // a PreprovisioningImage may be missing until we get to the registration code.
14631470 return actionUpdate {}
14641471 }
14651472
0 commit comments