diff --git a/docs/dev/config_fsm.md b/docs/dev/config_fsm.md index 24f03d0f..344bcb86 100644 --- a/docs/dev/config_fsm.md +++ b/docs/dev/config_fsm.md @@ -1,6 +1,6 @@ # Configuration applied state machine The State diagram of the configuration state machine is generated below in dot format. - A Link to the rendered diagram is at: [link](https://dreampuf.github.io/GraphvizOnline/?presentation#digraph%20%7B%0A%09compound=true%3B%0A%09node%20%5Bshape=Mrecord%5D%3B%0A%09rankdir=%22LR%22%3B%0A%0A%09ClusterNotReady%20%5Blabel=%22ClusterNotReady%7Centry%20%2F%20func2%22%5D%3B%0A%09Completed%20%5Blabel=%22Completed%7Centry%20%2F%20func5%22%5D%3B%0A%09InProgress%20%5Blabel=%22InProgress%7Centry%20%2F%20func3%22%5D%3B%0A%09Missing%20%5Blabel=%22Missing%7Centry%20%2F%20func1%22%5D%3B%0A%09OutOfDate%20%5Blabel=%22OutOfDate%7Centry%20%2F%20func4%22%5D%3B%0A%09Start%20%5Blabel=%22Start%22%5D%3B%0A%09TimedOut%20%5Blabel=%22TimedOut%7Centry%20%2F%20func6%22%5D%3B%0A%09ClusterNotReady%20-%3E%20ClusterNotReady%20%5Blabel=%22ClusterNotReady->%3BClusterNotReady%22%5D%3B%0A%09ClusterNotReady%20-%3E%20InProgress%20%5Blabel=%22ClusterNotReady->%3BInProgress%22%5D%3B%0A%09ClusterNotReady%20-%3E%20Missing%20%5Blabel=%22ClusterNotReady->%3BMissing%22%5D%3B%0A%09ClusterNotReady%20-%3E%20TimedOut%20%5Blabel=%22ClusterNotReady->%3BTimedOut%22%5D%3B%0A%09Completed%20-%3E%20Completed%20%5Blabel=%22Completed->%3BCompleted%22%5D%3B%0A%09Completed%20-%3E%20InProgress%20%5Blabel=%22Completed->%3BInProgress%22%5D%3B%0A%09InProgress%20-%3E%20ClusterNotReady%20%5Blabel=%22InProgress->%3BClusterNotReady%22%5D%3B%0A%09InProgress%20-%3E%20Completed%20%5Blabel=%22InProgress->%3BCompleted%22%5D%3B%0A%09InProgress%20-%3E%20InProgress%20%5Blabel=%22InProgress->%3BInProgress%22%5D%3B%0A%09InProgress%20-%3E%20OutOfDate%20%5Blabel=%22InProgress->%3BOutOfDate%22%5D%3B%0A%09InProgress%20-%3E%20TimedOut%20%5Blabel=%22InProgress->%3BTimedOut%22%5D%3B%0A%09Missing%20-%3E%20ClusterNotReady%20%5Blabel=%22Missing->%3BClusterNotReady%22%5D%3B%0A%09Missing%20-%3E%20Missing%20%5Blabel=%22Missing->%3BMissing%22%5D%3B%0A%09OutOfDate%20-%3E%20InProgress%20%5Blabel=%22OutOfDate->%3BInProgress%22%5D%3B%0A%09OutOfDate%20-%3E%20OutOfDate%20%5Blabel=%22OutOfDate->%3BOutOfDate%22%5D%3B%0A%09Start%20-%3E%20Missing%20%5Blabel=%22Start->%3BMissing%22%5D%3B%0A%09TimedOut%20-%3E%20InProgress%20%5Blabel=%22TimedOut->%3BInProgress%22%5D%3B%0A%09TimedOut%20-%3E%20TimedOut%20%5Blabel=%22TimedOut->%3BTimedOut%22%5D%3B%0A%09init%20%5Blabel=%22%22%2C%20shape=point%5D%3B%0A%09init%20-%3E%20Start%0A%7D%0A) + A Link to the rendered diagram is at: [link](https://dreampuf.github.io/GraphvizOnline/?presentation#digraph%20%7B%0A%09compound=true%3B%0A%09node%20%5Bshape=Mrecord%5D%3B%0A%09rankdir=%22LR%22%3B%0A%0A%09ClusterNotReady%20%5Blabel=%22ClusterNotReady%7Centry%20%2F%20func2%22%5D%3B%0A%09Completed%20%5Blabel=%22Completed%7Centry%20%2F%20func5%22%5D%3B%0A%09InProgress%20%5Blabel=%22InProgress%7Centry%20%2F%20func3%22%5D%3B%0A%09Missing%20%5Blabel=%22Missing%7Centry%20%2F%20func1%22%5D%3B%0A%09OutOfDate%20%5Blabel=%22OutOfDate%7Centry%20%2F%20func4%22%5D%3B%0A%09Start%20%5Blabel=%22Start%22%5D%3B%0A%09TimedOut%20%5Blabel=%22TimedOut%7Centry%20%2F%20func6%22%5D%3B%0A%09ClusterNotReady%20-%3E%20ClusterNotReady%20%5Blabel=%22ClusterNotReady->%3BClusterNotReady%22%5D%3B%0A%09ClusterNotReady%20-%3E%20InProgress%20%5Blabel=%22ClusterNotReady->%3BInProgress%22%5D%3B%0A%09ClusterNotReady%20-%3E%20Missing%20%5Blabel=%22ClusterNotReady->%3BMissing%22%5D%3B%0A%09Completed%20-%3E%20Completed%20%5Blabel=%22Completed->%3BCompleted%22%5D%3B%0A%09Completed%20-%3E%20InProgress%20%5Blabel=%22Completed->%3BInProgress%22%5D%3B%0A%09InProgress%20-%3E%20ClusterNotReady%20%5Blabel=%22InProgress->%3BClusterNotReady%22%5D%3B%0A%09InProgress%20-%3E%20Completed%20%5Blabel=%22InProgress->%3BCompleted%22%5D%3B%0A%09InProgress%20-%3E%20InProgress%20%5Blabel=%22InProgress->%3BInProgress%22%5D%3B%0A%09InProgress%20-%3E%20OutOfDate%20%5Blabel=%22InProgress->%3BOutOfDate%22%5D%3B%0A%09InProgress%20-%3E%20TimedOut%20%5Blabel=%22InProgress->%3BTimedOut%22%5D%3B%0A%09Missing%20-%3E%20ClusterNotReady%20%5Blabel=%22Missing->%3BClusterNotReady%22%5D%3B%0A%09Missing%20-%3E%20Missing%20%5Blabel=%22Missing->%3BMissing%22%5D%3B%0A%09OutOfDate%20-%3E%20InProgress%20%5Blabel=%22OutOfDate->%3BInProgress%22%5D%3B%0A%09OutOfDate%20-%3E%20OutOfDate%20%5Blabel=%22OutOfDate->%3BOutOfDate%22%5D%3B%0A%09Start%20-%3E%20Missing%20%5Blabel=%22Start->%3BMissing%22%5D%3B%0A%09TimedOut%20-%3E%20InProgress%20%5Blabel=%22TimedOut->%3BInProgress%22%5D%3B%0A%09TimedOut%20-%3E%20TimedOut%20%5Blabel=%22TimedOut->%3BTimedOut%22%5D%3B%0A%09init%20%5Blabel=%22%22%2C%20shape=point%5D%3B%0A%09init%20-%3E%20Start%0A%7D%0A) ``` digraph { compound=true; @@ -17,7 +17,6 @@ digraph { ClusterNotReady -> ClusterNotReady [label="ClusterNotReady->ClusterNotReady"]; ClusterNotReady -> InProgress [label="ClusterNotReady->InProgress"]; ClusterNotReady -> Missing [label="ClusterNotReady->Missing"]; - ClusterNotReady -> TimedOut [label="ClusterNotReady->TimedOut"]; Completed -> Completed [label="Completed->Completed"]; Completed -> InProgress [label="Completed->InProgress"]; InProgress -> ClusterNotReady [label="InProgress->ClusterNotReady"]; diff --git a/internal/configfsm/fsm.go b/internal/configfsm/fsm.go index 8ea777a9..a3d85471 100644 --- a/internal/configfsm/fsm.go +++ b/internal/configfsm/fsm.go @@ -27,8 +27,7 @@ const ( TimedOutToInProgress Trigger = Trigger(TimedOut + To + InProgress) // Transitions to TimedOut state - ClusterNotReadyToTimedOut Trigger = Trigger(ClusterNotReady + To + TimedOut) - InProgressToTimedOut Trigger = Trigger(InProgress + To + TimedOut) + InProgressToTimedOut Trigger = Trigger(InProgress + To + TimedOut) // Transitions to Completed state InProgressToCompleted Trigger = Trigger(InProgress + To + Completed) @@ -129,17 +128,14 @@ func InitFSM(state string) (fsm *stateless.StateMachine, err error) { if !fsmHelper.ArePoliciesMatched() { return fsm.Fire(ClusterNotReadyToMissing, fsmHelper) } - if fsmHelper.IsTimedOut() { - return fsm.Fire(ClusterNotReadyToTimedOut, fsmHelper) - } - if fsmHelper.IsClusterReady() { + if fsmHelper.IsClusterReady() || + fsmHelper.IsTimedOut() { return fsm.Fire(ClusterNotReadyToInProgress, fsmHelper) } return nil }). Permit(ClusterNotReadyToMissing, Missing). Permit(ClusterNotReadyToInProgress, InProgress). - Permit(ClusterNotReadyToTimedOut, TimedOut). PermitReentry(ClusterNotReadyToClusterNotReady) fsm.Configure(InProgress). OnEntry(func(_ context.Context, args ...any) error { @@ -150,13 +146,15 @@ func InitFSM(state string) (fsm *stateless.StateMachine, err error) { (!fsmHelper.IsNonCompliantPolicyInEnforce() && !fsmHelper.IsAllPoliciesCompliant()) { fsmHelper.SetNonCompliantAtNow() } - if !fsmHelper.ArePoliciesMatched() || - !fsmHelper.IsClusterReady() { + if !fsmHelper.ArePoliciesMatched() { return fsm.Fire(InProgressToClusterNotReady, fsmHelper) } if fsmHelper.IsTimedOut() { return fsm.Fire(InProgressToTimedOut, fsmHelper) } + if !fsmHelper.IsClusterReady() { + return fsm.Fire(InProgressToClusterNotReady, fsmHelper) + } if !fsmHelper.IsNonCompliantPolicyInEnforce() && !fsmHelper.IsAllPoliciesCompliant() { return fsm.Fire(InProgressToOutOfDate, fsmHelper) }