53 lines
1.1 KiB
Go
53 lines
1.1 KiB
Go
package common
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
log "github.com/Sirupsen/logrus"
|
|
)
|
|
|
|
type ExecutorPhase string
|
|
|
|
const (
|
|
ExecutorPhasePreparing ExecutorPhase = "Preparing"
|
|
ExecutorPhaseRunning ExecutorPhase = "Running"
|
|
ExecutorPhaseSucceeded ExecutorPhase = "Succeeded"
|
|
ExecutorPhaseFailed ExecutorPhase = "Failed"
|
|
ExecutorPhaseUnknown ExecutorPhase = "Unknown"
|
|
)
|
|
|
|
type Executor interface {
|
|
Start() error
|
|
Stop() error
|
|
WaitForState(ExecutorPhase) error
|
|
String() string
|
|
}
|
|
|
|
type Job struct {
|
|
Args []string
|
|
}
|
|
|
|
type ExecutorFactory struct {
|
|
Create func(Config, Job) Executor
|
|
}
|
|
|
|
var executorFactories = make(map[string]ExecutorFactory)
|
|
|
|
func CreateExecutor(config Config, j Job) (Executor, error) {
|
|
// TODO: Select which executor to use based on config
|
|
for _, e := range executorFactories {
|
|
return e.Create(config, j), nil
|
|
}
|
|
return nil, fmt.Errorf("no configured executor found")
|
|
}
|
|
|
|
func RegisterExecutor(name string, e ExecutorFactory) error {
|
|
if _, ok := executorFactories[name]; ok {
|
|
return fmt.Errorf(fmt.Sprintf("executor already registered: %s", name))
|
|
}
|
|
|
|
log.Infof("Registered executor: %s", name)
|
|
executorFactories[name] = e
|
|
return nil
|
|
}
|