mirror of
https://github.com/memohai/Memoh.git
synced 2026-04-25 07:00:48 +09:00
62 lines
1.5 KiB
Go
62 lines
1.5 KiB
Go
package containerd
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log/slog"
|
|
|
|
containerd "github.com/containerd/containerd/v2/client"
|
|
|
|
"github.com/memohai/memoh/internal/config"
|
|
)
|
|
|
|
const (
|
|
DefaultSocketPath = "/run/containerd/containerd.sock"
|
|
DefaultNamespace = "default"
|
|
|
|
BackendContainerd = "containerd"
|
|
BackendApple = "apple"
|
|
)
|
|
|
|
type ClientFactory interface {
|
|
New(ctx context.Context) (*containerd.Client, error)
|
|
}
|
|
|
|
type DefaultClientFactory struct {
|
|
SocketPath string
|
|
}
|
|
|
|
func (f DefaultClientFactory) New(_ context.Context) (*containerd.Client, error) {
|
|
socket := f.SocketPath
|
|
if socket == "" {
|
|
socket = DefaultSocketPath
|
|
}
|
|
return containerd.New(socket)
|
|
}
|
|
|
|
// ProvideService creates the appropriate Service based on the backend type.
|
|
func ProvideService(ctx context.Context, log *slog.Logger, cfg config.Config, backend string) (Service, func(), error) {
|
|
switch backend {
|
|
case BackendApple:
|
|
svc, err := NewAppleService(ctx, log, AppleServiceConfig{
|
|
SocketPath: cfg.Containerd.Socktainer.SocketPath,
|
|
BinaryPath: cfg.Containerd.Socktainer.BinaryPath,
|
|
})
|
|
if err != nil {
|
|
return nil, nil, fmt.Errorf("create apple container service: %w", err)
|
|
}
|
|
cleanup := func() { _ = svc.Close() }
|
|
return svc, cleanup, nil
|
|
|
|
default:
|
|
factory := DefaultClientFactory{SocketPath: cfg.Containerd.SocketPath}
|
|
client, err := factory.New(ctx)
|
|
if err != nil {
|
|
return nil, nil, fmt.Errorf("connect containerd: %w", err)
|
|
}
|
|
svc := NewDefaultService(log, client, cfg)
|
|
cleanup := func() { _ = client.Close() }
|
|
return svc, cleanup, nil
|
|
}
|
|
}
|