func()

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
}