step.go (22 lines of code) (raw):
package go2chef
/*
	Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
*/
// Step defines the interface for go2chef execution steps
type Step interface {
	Component
	Download() error
	Execute() error
}
// StepLoader defines the function call interface for step loaders
type StepLoader func(map[string]interface{}) (Step, error)
var (
	stepRegistry = make(map[string]StepLoader)
)
// RegisterStep registers a new step plugin with go2chef
func RegisterStep(name string, s StepLoader) {
	if _, ok := stepRegistry[name]; ok {
		panic("step plugin " + name + " is already registered")
	}
	stepRegistry[name] = s
}
// GetStep gets a new step given a type and configuration
func GetStep(stepType string, config map[string]interface{}) (Step, error) {
	if s, ok := stepRegistry[stepType]; ok {
		return s(config)
	}
	return nil, &ErrComponentDoesNotExist{Component: stepType}
}