Skip to content

Commit

Permalink
Set PowerManagementError state in state machine
Browse files Browse the repository at this point in the history
The state machine itself should be responsible for all state
transitions, not the action methods.
  • Loading branch information
zaneb committed Jan 8, 2020
1 parent 8e37ff6 commit 8c5bd63
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 5 deletions.
2 changes: 0 additions & 2 deletions pkg/controller/baremetalhost/baremetalhost_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -584,7 +584,6 @@ func (r *ReconcileBareMetalHost) manageHostPower(prov provisioner.Provisioner, i
}

if provResult.ErrorMessage != "" {
info.host.Status.Provisioning.State = metal3v1alpha1.StatePowerManagementError
return recordActionFailure(info, metal3v1alpha1.PowerManagementError, provResult.ErrorMessage)
}

Expand Down Expand Up @@ -615,7 +614,6 @@ func (r *ReconcileBareMetalHost) manageHostPower(prov provisioner.Provisioner, i
}

if provResult.ErrorMessage != "" {
info.host.Status.Provisioning.State = metal3v1alpha1.StatePowerManagementError
return recordActionFailure(info, metal3v1alpha1.PowerManagementError, provResult.ErrorMessage)
}

Expand Down
27 changes: 24 additions & 3 deletions pkg/controller/baremetalhost/host_state_machine.go
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,14 @@ func (hsm *hostStateMachine) handleMatchProfile(info *reconcileInfo) actionResul

func (hsm *hostStateMachine) handleExternallyProvisioned(info *reconcileInfo) actionResult {
if hsm.Host.Spec.ExternallyProvisioned {
return hsm.Reconciler.actionManageSteadyState(hsm.Provisioner, info)
actResult := hsm.Reconciler.actionManageSteadyState(hsm.Provisioner, info)
if r, f := actResult.(actionFailed); f {
switch r.ErrorType {
case metal3v1alpha1.PowerManagementError:
hsm.NextState = metal3v1alpha1.StatePowerManagementError
}
}
return actResult
}

switch {
Expand All @@ -232,7 +239,14 @@ func (hsm *hostStateMachine) handleReady(info *reconcileInfo) actionResult {
case hsm.Host.NeedsProvisioning():
hsm.NextState = metal3v1alpha1.StateProvisioning
default:
return hsm.Reconciler.actionManageReady(hsm.Provisioner, info)
actResult := hsm.Reconciler.actionManageReady(hsm.Provisioner, info)
if r, f := actResult.(actionFailed); f {
switch r.ErrorType {
case metal3v1alpha1.PowerManagementError:
hsm.NextState = metal3v1alpha1.StatePowerManagementError
}
}
return actResult
}
return actionComplete{}
}
Expand Down Expand Up @@ -269,7 +283,14 @@ func (hsm *hostStateMachine) handleProvisioned(info *reconcileInfo) actionResult
return actionComplete{}
}

return hsm.Reconciler.actionManageSteadyState(hsm.Provisioner, info)
actResult := hsm.Reconciler.actionManageSteadyState(hsm.Provisioner, info)
if r, f := actResult.(actionFailed); f {
switch r.ErrorType {
case metal3v1alpha1.PowerManagementError:
hsm.NextState = metal3v1alpha1.StatePowerManagementError
}
}
return actResult
}

func (hsm *hostStateMachine) handlePowerManagementError(info *reconcileInfo) actionResult {
Expand Down

0 comments on commit 8c5bd63

Please sign in to comment.