internal/containerd/daemon.go (63 lines of code) (raw):

package containerd import ( "context" "fmt" "time" "github.com/aws/aws-sdk-go-v2/aws" "go.uber.org/zap" "github.com/aws/eks-hybrid/internal/api" "github.com/aws/eks-hybrid/internal/daemon" ) const ( ContainerdDaemonName = "containerd" kernelModulesSystemdUnit = "systemd-modules-load" ) var _ daemon.Daemon = &containerd{} type containerd struct { daemonManager daemon.DaemonManager nodeConfig *api.NodeConfig awsConfig *aws.Config logger *zap.Logger } func NewContainerdDaemon(daemonManager daemon.DaemonManager, cfg *api.NodeConfig, awsConfig *aws.Config, logger *zap.Logger) daemon.Daemon { return &containerd{ daemonManager: daemonManager, nodeConfig: cfg, awsConfig: awsConfig, logger: logger, } } func (cd *containerd) Configure() error { if err := writeContainerdConfig(cd.nodeConfig); err != nil { return err } return writeContainerdKernelModulesConfig() } // EnsureRunning ensures containerd is running with the written configuration // With some installations, containerd daemon is already in an running state // This enables the daemon and restarts or starts depending on the state of daemon func (cd *containerd) EnsureRunning(ctx context.Context) error { if err := cd.daemonManager.RestartDaemon(ctx, kernelModulesSystemdUnit); err != nil { return err } if err := cd.daemonManager.EnableDaemon(ContainerdDaemonName); err != nil { return err } if err := cd.daemonManager.RestartDaemon(ctx, ContainerdDaemonName); err != nil { return err } runningCtx, cancel := context.WithTimeout(ctx, 5*time.Minute) defer cancel() cd.logger.Info("Waiting for containerd to be running...") if err := daemon.WaitForStatus(runningCtx, cd.logger, cd.daemonManager, ContainerdDaemonName, daemon.DaemonStatusRunning, 5*time.Second); err != nil { return fmt.Errorf("waiting for containerd to be running: %w", err) } cd.logger.Info("containerd is running") return nil } func (cd *containerd) PostLaunch() error { return cacheSandboxImage(cd.awsConfig) } func (cd *containerd) Stop() error { return cd.daemonManager.StopDaemon(ContainerdDaemonName) } func (cd *containerd) Name() string { return ContainerdDaemonName }