mirror of
https://github.com/sablierapp/sablier.git
synced 2025-12-27 07:31:42 +01:00
67 lines
1.5 KiB
Go
67 lines
1.5 KiB
Go
package docker
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"github.com/docker/docker/api/types/checkpoint"
|
|
"github.com/docker/docker/api/types/container"
|
|
"github.com/docker/docker/client"
|
|
"github.com/rs/zerolog"
|
|
"github.com/sablierapp/sablier/pkg/sablier"
|
|
"os"
|
|
)
|
|
|
|
var _ sablier.Provider = (*DockerProvider)(nil)
|
|
|
|
type DockerProvider struct {
|
|
Client *client.Client
|
|
|
|
UseCheckpoint bool
|
|
UsePause bool
|
|
|
|
log zerolog.Logger
|
|
}
|
|
|
|
func NewDockerProvider(cli *client.Client) (*DockerProvider, error) {
|
|
logger := zerolog.New(zerolog.ConsoleWriter{Out: os.Stderr}).
|
|
With().Timestamp().
|
|
Str("provider", "docker").
|
|
Logger()
|
|
serverVersion, err := cli.ServerVersion(context.Background())
|
|
if err != nil {
|
|
return nil, fmt.Errorf("cannot connect to docker host: %v", err)
|
|
}
|
|
|
|
logger.Debug().
|
|
Str("server-version", serverVersion.Version).
|
|
Str("api-version", serverVersion.APIVersion).
|
|
Msg("connection established with docker")
|
|
|
|
return &DockerProvider{
|
|
Client: cli,
|
|
UseCheckpoint: false,
|
|
UsePause: false,
|
|
log: logger,
|
|
}, nil
|
|
}
|
|
|
|
func (d *DockerProvider) Stop(ctx context.Context, name string) error {
|
|
if d.UsePause {
|
|
return d.Client.ContainerPause(ctx, name)
|
|
}
|
|
|
|
if d.UseCheckpoint {
|
|
return d.Client.CheckpointCreate(ctx, name, checkpoint.CreateOptions{
|
|
CheckpointID: name,
|
|
Exit: true,
|
|
})
|
|
}
|
|
|
|
return d.Client.ContainerStop(ctx, name, container.StopOptions{})
|
|
}
|
|
|
|
func (d *DockerProvider) Events(ctx context.Context) (<-chan sablier.Message, <-chan error) {
|
|
//TODO implement me
|
|
panic("implement me")
|
|
}
|