func (s *Scheduler) executePlan(clusterModel interfaces.ClusterModel, plan plan) error {
	steps := plan.steps()
	clusterModel.BeginScheduling(len(steps))

	for _, step := range steps {
		clusterModel.SchedulingStepStarted(step.StepType())
		err := step.Perform()
		if err != nil {
			clusterModel.SchedulingError(err)
			return err
		}
		clusterModel.SchedulingStepCompleted()
	}
	return nil
}