From fdb76f55d8eacf8852fc18bcd9f7e07bb7b5f924 Mon Sep 17 00:00:00 2001 From: ktock Date: Wed, 14 Apr 2021 17:22:36 +0900 Subject: [PATCH] Fix backword-compatibility issue of non-versioned config file According to the doc about `config.toml` of containerd: ``` If no version number is specified inside the config file then it is assumed to be a version 1 config and parsed as such. ``` However, it's not true recently. This will break the backward-compatibility in some environment. This commit fixes this issue. Signed-off-by: Kohei Tokunaga --- cmd/containerd/command/config.go | 6 +++++- services/server/config/config.go | 1 + services/server/config/config_test.go | 26 ++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/cmd/containerd/command/config.go b/cmd/containerd/command/config.go index 8ba6deef0..e2d0097f5 100644 --- a/cmd/containerd/command/config.go +++ b/cmd/containerd/command/config.go @@ -120,7 +120,11 @@ var configCommand = cli.Command{ func platformAgnosticDefaultConfig() *srvconfig.Config { return &srvconfig.Config{ - Version: 2, + // see: https://github.com/containerd/containerd/blob/5c6ea7fdc1247939edaddb1eba62a94527418687/RELEASES.md#daemon-configuration + // this version MUST remain set to 1 until either there exists a means to + // override / configure the default at the containerd cli .. or when + // version 1 is no longer supported + Version: 1, Root: defaults.DefaultRootDir, State: defaults.DefaultStateDir, GRPC: srvconfig.GRPCConfig{ diff --git a/services/server/config/config.go b/services/server/config/config.go index ff0639167..6aafe36a5 100644 --- a/services/server/config/config.go +++ b/services/server/config/config.go @@ -98,6 +98,7 @@ func (c *Config) ValidateV2() error { version := c.GetVersion() if version < 2 { logrus.Warnf("deprecated version : `%d`, please switch to version `2`", version) + return nil } for _, p := range c.DisabledPlugins { if len(strings.Split(p, ".")) < 4 { diff --git a/services/server/config/config_test.go b/services/server/config/config_test.go index 3bcee7eff..6775e8459 100644 --- a/services/server/config/config_test.go +++ b/services/server/config/config_test.go @@ -207,3 +207,29 @@ version = 2 assert.NilError(t, err) assert.Equal(t, true, pluginConfig["shim_debug"]) } + +// TestDecodePluginInV1Config tests decoding non-versioned +// config (should be parsed as V1 config). +func TestDecodePluginInV1Config(t *testing.T) { + data := ` +[plugins.linux] + shim_debug = true +` + + tempDir, err := ioutil.TempDir("", "containerd_") + assert.NilError(t, err) + defer os.RemoveAll(tempDir) + + path := filepath.Join(tempDir, "config.toml") + err = ioutil.WriteFile(path, []byte(data), 0600) + assert.NilError(t, err) + + var out Config + err = LoadConfig(path, &out) + assert.NilError(t, err) + + pluginConfig := map[string]interface{}{} + _, err = out.Decode(&plugin.Registration{ID: "linux", Config: &pluginConfig}) + assert.NilError(t, err) + assert.Equal(t, true, pluginConfig["shim_debug"]) +}