github.com/ssube/gitlab-ci-multi-runner@v1.2.1-0.20160607142738-b8d1285632e6/common/executor.go (about)

     1  package common
     2  
     3  import (
     4  	log "github.com/Sirupsen/logrus"
     5  )
     6  
     7  type ExecutorData interface{}
     8  
     9  type ExecutorCommand struct {
    10  	Script     string
    11  	Predefined bool
    12  	Abort      chan interface{}
    13  }
    14  
    15  type Executor interface {
    16  	Prepare(globalConfig *Config, config *RunnerConfig, build *Build) error
    17  	ShellScript() *ShellScript
    18  	Run(cmd ExecutorCommand) error
    19  	Finish(err error)
    20  	Cleanup()
    21  }
    22  
    23  type ExecutorProvider interface {
    24  	CanCreate() bool
    25  	Create() Executor
    26  	Acquire(config *RunnerConfig) (ExecutorData, error)
    27  	Release(config *RunnerConfig, data ExecutorData) error
    28  	GetFeatures(features *FeaturesInfo)
    29  }
    30  
    31  var executors map[string]ExecutorProvider
    32  
    33  func RegisterExecutor(executor string, provider ExecutorProvider) {
    34  	log.Debugln("Registering", executor, "executor...")
    35  
    36  	if executors == nil {
    37  		executors = make(map[string]ExecutorProvider)
    38  	}
    39  	if _, ok := executors[executor]; ok {
    40  		panic("Executor already exist: " + executor)
    41  	}
    42  	executors[executor] = provider
    43  }
    44  
    45  func GetExecutor(executor string) ExecutorProvider {
    46  	if executors == nil {
    47  		return nil
    48  	}
    49  
    50  	provider, _ := executors[executor]
    51  	return provider
    52  }
    53  
    54  func GetExecutors() []string {
    55  	names := []string{}
    56  	if executors != nil {
    57  		for name := range executors {
    58  			names = append(names, name)
    59  		}
    60  	}
    61  	return names
    62  }
    63  
    64  func NewExecutor(executor string) Executor {
    65  	provider := GetExecutor(executor)
    66  	if provider != nil {
    67  		return provider.Create()
    68  	}
    69  
    70  	return nil
    71  }