/
driver.go
78 lines (64 loc) · 1.9 KB
/
driver.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package internal
import (
"context"
"github.com/docker/docker/client"
docker "github.com/fsouza/go-dockerclient"
"github.com/hashicorp/go-hclog"
"github.com/hashicorp/nomad/drivers/shared/eventer"
"github.com/hashicorp/nomad/plugins/base"
"github.com/hashicorp/nomad/plugins/drivers"
"github.com/hashicorp/nomad/plugins/shared/hclspec"
"go.opentelemetry.io/otel"
"github.com/e2b-dev/infra/packages/shared/pkg/driver"
)
const (
PluginName = "env-build-task-driver"
PluginVersion = "0.2.0"
)
var (
pluginInfo = &base.PluginInfoResponse{
Type: base.PluginTypeDriver,
PluginApiVersions: []string{drivers.ApiVersion010},
PluginVersion: PluginVersion,
Name: PluginName,
}
configSpec = hclspec.NewObject(map[string]*hclspec.Spec{})
capabilities = &drivers.Capabilities{
SendSignals: false,
Exec: false,
}
)
type DriverExtra struct {
docker *client.Client
legacyDockerClient *docker.Client
}
func NewPlugin(logger hclog.Logger) drivers.DriverPlugin {
ctx, cancel := context.WithCancel(context.Background())
logger = logger.Named(PluginName)
tracer := otel.Tracer("driver")
dockerClient, err := client.NewClientWithOpts(client.FromEnv)
if err != nil {
panic(err)
}
legacyClient, err := docker.NewClientFromEnv()
if err != nil {
panic(err)
}
return &driver.Driver[*DriverExtra, *driver.TaskHandle[*extraTaskHandle]]{
Tracer: tracer,
Eventer: eventer.NewEventer(ctx, logger),
Config: &driver.Config{},
Tasks: driver.NewTaskStore[*driver.TaskHandle[*extraTaskHandle]](),
Ctx: ctx,
SignalShutdown: cancel,
Logger: logger,
TaskConfigSpec: taskConfigSpec,
ConfigSpec: configSpec,
Info: pluginInfo,
DriverCapabilities: capabilities,
Extra: &DriverExtra{
docker: dockerClient,
legacyDockerClient: legacyClient,
},
}
}