diff --git a/cmd/node-installer/detect.go b/cmd/node-installer/detect.go index 6189acf9..8366a5aa 100644 --- a/cmd/node-installer/detect.go +++ b/cmd/node-installer/detect.go @@ -25,6 +25,8 @@ import ( "github.com/spinframework/runtime-class-manager/internal/preset" ) +const defaultContainerdConfigLocation = "/etc/containerd/config.toml" + var containerdConfigLocations = map[string]preset.Settings{ // Microk8s "/var/snap/microk8s/current/args/containerd-template.toml": preset.MicroK8s, @@ -34,8 +36,6 @@ var containerdConfigLocations = map[string]preset.Settings{ "/var/lib/rancher/k3s/agent/etc/containerd/config.toml": preset.K3s, // K0s "/etc/k0s/containerd.toml": preset.K0s, - // default - "/etc/containerd/config.toml": preset.Default, } func DetectDistro(config Config, hostFs afero.Fs) (preset.Settings, error) { @@ -50,6 +50,8 @@ func DetectDistro(config Config, hostFs afero.Fs) (preset.Settings, error) { var errs []error + // Check for distro-specific containerd config locations first. + // We do this because the default config may *also* exist in some scenarios. for loc, distro := range containerdConfigLocations { _, err := hostFs.Stat(loc) if err == nil { @@ -59,5 +61,12 @@ func DetectDistro(config Config, hostFs afero.Fs) (preset.Settings, error) { errs = append(errs, err) } + // Check the default location last, assuming no distro-specific location has been detected. + _, err := hostFs.Stat(defaultContainerdConfigLocation) + if err == nil { + return preset.Default, nil + } + errs = append(errs, err) + return preset.Settings{}, fmt.Errorf("failed to detect containerd config path: %w", errors.Join(errs...)) } diff --git a/cmd/node-installer/detect_test.go b/cmd/node-installer/detect_test.go index ced9fa2d..3c9ee05f 100644 --- a/cmd/node-installer/detect_test.go +++ b/cmd/node-installer/detect_test.go @@ -76,6 +76,25 @@ func Test_DetectDistro(t *testing.T) { false, preset.Default.WithConfigPath("/etc/containerd/not_found.toml"), }, + { + "default_and_distro_specific_exist", + args{ + main.Config{ + struct { + Name string + ConfigPath string + }{"containerd", ""}, + struct { + Path string + AssetPath string + }{"/opt/rcm", "/assets"}, + struct{ RootPath string }{""}, + }, + tests.FixtureFs("../../testdata/node-installer/containerd/default-and-k0s-configs"), + }, + false, + preset.K0s, + }, { "unsupported", args{ diff --git a/testdata/node-installer/containerd/default-and-k0s-configs/etc/containerd/config.toml b/testdata/node-installer/containerd/default-and-k0s-configs/etc/containerd/config.toml new file mode 100644 index 00000000..e69de29b diff --git a/testdata/node-installer/containerd/default-and-k0s-configs/etc/k0s/containerd.toml b/testdata/node-installer/containerd/default-and-k0s-configs/etc/k0s/containerd.toml new file mode 100644 index 00000000..e69de29b