mirror of
https://github.com/sablierapp/sablier.git
synced 2025-12-21 13:23:03 +01:00
* add tmp test * add strategy config * strategy config * pause / unpause strategy impl * Fix tests * fix compilation * add pause / unpause tests * add doc * add config test * start if not paused * remove test files
51 lines
1.7 KiB
Go
51 lines
1.7 KiB
Go
package docker
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log/slog"
|
|
|
|
"github.com/docker/docker/api/types/container"
|
|
)
|
|
|
|
func (p *Provider) InstanceStart(ctx context.Context, name string) error {
|
|
if p.strategy == "pause" {
|
|
return p.dockerUnpause(ctx, name)
|
|
}
|
|
return p.dockerStart(ctx, name)
|
|
}
|
|
|
|
func (p *Provider) dockerStart(ctx context.Context, name string) error {
|
|
// TODO: InstanceStart should block until the container is ready.
|
|
p.l.DebugContext(ctx, "starting container", "name", name)
|
|
err := p.Client.ContainerStart(ctx, name, container.StartOptions{})
|
|
if err != nil {
|
|
p.l.ErrorContext(ctx, "cannot start container", slog.String("name", name), slog.Any("error", err))
|
|
return fmt.Errorf("cannot start container %s: %w", name, err)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (p *Provider) dockerUnpause(ctx context.Context, name string) error {
|
|
container, inspectErr := p.Client.ContainerInspect(ctx, name)
|
|
if inspectErr != nil {
|
|
p.l.ErrorContext(ctx, "cannot inspect container before unpausing", slog.String("name", name), slog.Any("error", inspectErr))
|
|
return fmt.Errorf("cannot inspect container %s before unpausing: %w", name, inspectErr)
|
|
}
|
|
|
|
if !container.State.Paused {
|
|
p.l.DebugContext(ctx, "container is not paused, starting container", slog.String("name", name))
|
|
return p.dockerStart(ctx, name)
|
|
}
|
|
|
|
p.l.DebugContext(ctx, "unpausing container", slog.String("name", name))
|
|
err := p.Client.ContainerUnpause(ctx, name)
|
|
if err != nil {
|
|
p.l.ErrorContext(ctx, "cannot unpause container", slog.String("name", name), slog.Any("error", err))
|
|
return fmt.Errorf("cannot unpause container %s: %w", name, err)
|
|
}
|
|
|
|
p.l.DebugContext(ctx, "container unpaused", slog.String("name", name))
|
|
return nil
|
|
}
|