internal/containerd/config.go (55 lines of code) (raw):
package containerd
import (
"bytes"
_ "embed"
"path/filepath"
"text/template"
"go.uber.org/zap"
"github.com/aws/eks-hybrid/internal/api"
"github.com/aws/eks-hybrid/internal/util"
)
const ContainerRuntimeEndpoint = "unix:///run/containerd/containerd.sock"
const (
containerdConfigDir = "/etc/containerd"
containerdConfigFile = "/etc/containerd/config.toml"
containerdConfigImportDir = "/etc/containerd/config.d"
containerdKernelModulesConfigFile = "/etc/modules-load.d/containerd.conf"
containerdConfigPerm = 0o644
)
var (
//go:embed config.template.toml
containerdConfigTemplateData string
containerdConfigTemplate = template.Must(template.New(containerdConfigFile).Parse(containerdConfigTemplateData))
//go:embed kernel-modules.conf
containerdKernelModulesFileData string
)
type containerdTemplateVars struct {
SandboxImage string
}
func writeContainerdConfig(cfg *api.NodeConfig) error {
// write nodeadm's generated containerd config to the default path
containerdConfig, err := generateContainerdConfig(cfg)
if err != nil {
return err
}
zap.L().Info("Writing containerd config to file..", zap.String("path", containerdConfigFile))
if err := util.WriteFileWithDir(containerdConfigFile, containerdConfig, containerdConfigPerm); err != nil {
return err
}
if len(cfg.Spec.Containerd.Config) > 0 {
containerConfigImportPath := filepath.Join(containerdConfigImportDir, "00-nodeadm.toml")
zap.L().Info("Writing user containerd config to drop-in file..", zap.String("path", containerConfigImportPath))
return util.WriteFileWithDir(containerConfigImportPath, []byte(cfg.Spec.Containerd.Config), containerdConfigPerm)
}
return nil
}
func generateContainerdConfig(cfg *api.NodeConfig) ([]byte, error) {
configVars := containerdTemplateVars{
SandboxImage: cfg.Status.Defaults.SandboxImage,
}
var buf bytes.Buffer
if err := containerdConfigTemplate.Execute(&buf, configVars); err != nil {
return nil, err
}
return buf.Bytes(), nil
}
func writeContainerdKernelModulesConfig() error {
return util.WriteFileWithDir(containerdKernelModulesConfigFile, []byte(containerdKernelModulesFileData), containerdConfigPerm)
}