blob: d9165a64ecec1f723c57623a0224d8bc7372a9ba [file] [log] [blame]
package supervisor
import (
"os"
"path/filepath"
"github.com/containerd/log"
"github.com/pkg/errors"
)
// WithLogLevel defines which log level to start containerd with.
func WithLogLevel(lvl string) DaemonOpt {
return func(r *remote) error {
if lvl == "info" {
// both dockerd and containerd default log-level is "info",
// so don't pass the default.
lvl = ""
}
r.Config.Debug.Level = lvl
return nil
}
}
// WithLogFormat defines the containerd log format.
// This only makes sense if WithStartDaemon() was set to true.
func WithLogFormat(format log.OutputFormat) DaemonOpt {
return func(r *remote) error {
r.Debug.Format = string(format)
return nil
}
}
// WithCRIDisabled disables the CRI plugin.
func WithCRIDisabled() DaemonOpt {
return func(r *remote) error {
r.DisabledPlugins = append(r.DisabledPlugins, "io.containerd.grpc.v1.cri")
return nil
}
}
// WithDetectLocalBinary checks if a containerd binary is present in the same
// directory as the dockerd binary, and overrides the path of the containerd
// binary to start if found. If no binary is found, no changes are made.
func WithDetectLocalBinary() DaemonOpt {
return func(r *remote) error {
dockerdPath, err := os.Executable()
if err != nil {
return errors.Wrap(err, "looking up binary path")
}
localBinary := filepath.Join(filepath.Dir(dockerdPath), binaryName)
fi, err := os.Stat(localBinary)
if err != nil {
if !errors.Is(err, os.ErrNotExist) {
return err
}
return nil
}
if fi.IsDir() {
return errors.Errorf("local containerd path found (%s), but is a directory", localBinary)
}
r.daemonPath = localBinary
r.logger.WithField("daemon path", r.daemonPath).Debug("Local containerd daemon found.")
return nil
}
}