package main import "github.com/BurntSushi/toml" func defaultConfig() *config { return &config{ Root: "/var/lib/containerd", State: "/run/containerd", GRPC: grpcConfig{ Socket: "/run/containerd/containerd.sock", }, Debug: debug{ Level: "info", Socket: "/run/containerd/debug.sock", }, } } // loadConfig loads the config from the provided path func loadConfig(path string) error { md, err := toml.DecodeFile(path, conf) if err != nil { return err } conf.md = md return nil } // config specifies the containerd configuration file in the TOML format. // It contains fields to configure various subsystems and containerd as a whole. type config struct { // State is the path to a directory where containerd will store runtime state State string `toml:"state"` // Root is the path to a directory where containerd will store persistent data Root string `toml:"root"` // GRPC configuration settings GRPC grpcConfig `toml:"grpc"` // Debug and profiling settings Debug debug `toml:"debug"` // Metrics and monitoring settings Metrics metricsConfig `toml:"metrics"` // Plugins provides plugin specific configuration for the initialization of a plugin Plugins map[string]toml.Primitive `toml:"plugins"` md toml.MetaData } func (c *config) decodePlugin(name string, v interface{}) error { p, ok := c.Plugins[name] if !ok { return nil } return c.md.PrimitiveDecode(p, v) } type grpcConfig struct { Socket string `toml:"socket"` } type debug struct { Socket string `toml:"socket"` Level string `toml:"level"` } type metricsConfig struct { Address string `toml:"address"` }