Skip to content

Commit

Permalink
Added references to HostUpdatePolicy in checkServicing code.
Browse files Browse the repository at this point in the history
  • Loading branch information
rhjanders committed Sep 24, 2024
1 parent 6bd549d commit 509027a
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 12 deletions.
45 changes: 36 additions & 9 deletions controllers/metal3.io/baremetalhost_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -1366,18 +1366,45 @@ func (r *BareMetalHostReconciler) checkServicing(prov provisioner.Provisioner, i
servicingData := provisioner.ServicingData{}

var fwDirty bool
if !reflect.DeepEqual(info.host.Status.Provisioning.Firmware, info.host.Spec.Firmware) {
servicingData.FirmwareConfig = info.host.Spec.Firmware
fwDirty = true
}
var hfsDirty bool

hfsDirty, hfs, err := r.getHostFirmwareSettings(info)
// (NOTE)janders: since Servicing is an opt-in feature that requires HostUpdatePolicy to be created and set to onReboot
// set below booleans to false by default and change to true based on policy settings

servicingData.LiveFirmwareUpdateAllowed = false
servicingData.LiveFirmwareSettingsAllowed = false

hup := &metal3api.HostUpdatePolicy{}
err := r.Get(info.ctx, info.request.NamespacedName, hup)
if err != nil {
return actionError{fmt.Errorf("could not determine updated settings: %w", err)}, false
return actionError{fmt.Errorf("unable to fetch HostUpdatePolicy, aborting servicing. Error: %w", err)}, false
}
if hfsDirty {
servicingData.ActualFirmwareSettings = hfs.Status.Settings
servicingData.TargetFirmwareSettings = hfs.Spec.Settings

if hup != nil {
if hup.Spec.FirmwareSettings == metal3api.HostUpdatePolicyOnReboot {
servicingData.LiveFirmwareSettingsAllowed = true
}
if hup.Spec.FirmwareUpdates == metal3api.HostUpdatePolicyOnReboot {
servicingData.LiveFirmwareUpdateAllowed = true
}
}

if servicingData.LiveFirmwareUpdateAllowed {
if !reflect.DeepEqual(info.host.Status.Provisioning.Firmware, info.host.Spec.Firmware) {
servicingData.FirmwareConfig = info.host.Spec.Firmware
fwDirty = true
}
}

if servicingData.LiveFirmwareSettingsAllowed {
hfsDirty, hfs, err := r.getHostFirmwareSettings(info)
if err != nil {
return actionError{fmt.Errorf("could not determine updated settings: %w", err)}, false
}
if hfsDirty {
servicingData.ActualFirmwareSettings = hfs.Status.Settings
servicingData.TargetFirmwareSettings = hfs.Spec.Settings
}
}

dirty := fwDirty || hfsDirty
Expand Down
8 changes: 5 additions & 3 deletions pkg/provisioner/provisioner.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,9 +108,11 @@ type PrepareData struct {
}

type ServicingData struct {
FirmwareConfig *metal3api.FirmwareConfig
TargetFirmwareSettings metal3api.DesiredSettingsMap
ActualFirmwareSettings metal3api.SettingsMap
FirmwareConfig *metal3api.FirmwareConfig
TargetFirmwareSettings metal3api.DesiredSettingsMap
ActualFirmwareSettings metal3api.SettingsMap
LiveFirmwareUpdateAllowed bool
LiveFirmwareSettingsAllowed bool
// TargetFirmwareComponents []metal3api.FirmwareUpdate
}

Expand Down

0 comments on commit 509027a

Please sign in to comment.