in pkg/cloud/rgraph/algo/localplan/local_plan.go [70:113]
func (p *planner) planWantGraph(gotNode, wantNode rnode.Node) error {
if wantNode.Ownership() != rnode.OwnershipManaged {
wantNode.Plan().Set(rnode.PlanDetails{
Operation: rnode.OpNothing,
Why: "Node is not managed",
})
return nil
}
type s struct{ got, want rnode.NodeState }
statePair := s{gotNode.State(), wantNode.State()}
switch statePair {
case s{rnode.NodeExists, rnode.NodeExists}:
action, err := wantNode.Diff(gotNode)
if err != nil {
return fmt.Errorf("localPlanner: %w", err)
}
wantNode.Plan().Set(*action)
case s{rnode.NodeExists, rnode.NodeDoesNotExist}:
wantNode.Plan().Set(rnode.PlanDetails{
Operation: rnode.OpDelete,
Why: "Node doesn't exist in want, but exists in got",
})
case s{rnode.NodeDoesNotExist, rnode.NodeExists}:
wantNode.Plan().Set(rnode.PlanDetails{
Operation: rnode.OpCreate,
Why: "Node doesn't exist in got, but exists in want",
})
case s{rnode.NodeDoesNotExist, rnode.NodeDoesNotExist}:
wantNode.Plan().Set(rnode.PlanDetails{
Operation: rnode.OpNothing,
Why: "Node does not exist",
})
default:
return fmt.Errorf("nodes are in an invalid state for planning: %+v", statePair)
}
return nil
}