45 lines
1.1 KiB
Go
45 lines
1.1 KiB
Go
package container
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"code.icb4dc0.de/buildr/buildr/modules/state"
|
|
|
|
"code.icb4dc0.de/buildr/buildr/internal/containers"
|
|
"code.icb4dc0.de/buildr/buildr/internal/execution"
|
|
"code.icb4dc0.de/buildr/buildr/modules"
|
|
)
|
|
|
|
var _ execution.TaskProvider = (*taskProvider)(nil)
|
|
|
|
func Provider(orchestrator *containers.Orchestrator, repo *modules.Repository, stateStore state.Store) execution.TaskProvider {
|
|
return taskProvider{
|
|
orchestrator: orchestrator,
|
|
repo: repo,
|
|
stateStore: stateStore,
|
|
}
|
|
}
|
|
|
|
type taskProvider struct {
|
|
orchestrator *containers.Orchestrator
|
|
repo *modules.Repository
|
|
stateStore state.Store
|
|
}
|
|
|
|
func (taskProvider) CanProvide(m modules.ModuleWithMeta) bool {
|
|
return m.ContainerSpec() != nil
|
|
}
|
|
|
|
func (p taskProvider) Create(m modules.ModuleWithMeta) (execution.Task, error) {
|
|
if m.ContainerSpec() == nil {
|
|
return nil, fmt.Errorf("module %v doesn't have a container spec - should be handled differently", m.Name())
|
|
} else {
|
|
return &containerTask{
|
|
moduleWithMeta: m,
|
|
orchestrator: p.orchestrator,
|
|
repo: p.repo,
|
|
stateStore: p.stateStore,
|
|
}, nil
|
|
}
|
|
}
|