Migrate current TOML code to github.com/pelletier/go-toml

Signed-off-by: Maksym Pavlenko <pavlenko.maksym@gmail.com>
This commit is contained in:
Maksym Pavlenko 2021-03-25 13:13:33 -07:00
parent 499c2f7d4a
commit ddd4298a10
8 changed files with 34 additions and 21 deletions

View File

@ -22,20 +22,20 @@ import (
"os" "os"
"path/filepath" "path/filepath"
"github.com/BurntSushi/toml"
"github.com/containerd/containerd/defaults" "github.com/containerd/containerd/defaults"
"github.com/containerd/containerd/images" "github.com/containerd/containerd/images"
"github.com/containerd/containerd/pkg/timeout" "github.com/containerd/containerd/pkg/timeout"
"github.com/containerd/containerd/services/server" "github.com/containerd/containerd/services/server"
srvconfig "github.com/containerd/containerd/services/server/config" srvconfig "github.com/containerd/containerd/services/server/config"
ocispec "github.com/opencontainers/image-spec/specs-go/v1" ocispec "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/pelletier/go-toml"
"github.com/urfave/cli" "github.com/urfave/cli"
) )
// Config is a wrapper of server config for printing out. // Config is a wrapper of server config for printing out.
type Config struct { type Config struct {
*srvconfig.Config *srvconfig.Config
// Plugins overrides `Plugins map[string]toml.Primitive` in server config. // Plugins overrides `Plugins map[string]toml.Tree` in server config.
Plugins map[string]interface{} `toml:"plugins"` Plugins map[string]interface{} `toml:"plugins"`
} }

View File

@ -21,9 +21,9 @@ import (
"net/url" "net/url"
"time" "time"
"github.com/BurntSushi/toml"
"github.com/containerd/containerd/log" "github.com/containerd/containerd/log"
"github.com/containerd/containerd/plugin" "github.com/containerd/containerd/plugin"
"github.com/pelletier/go-toml"
"github.com/pkg/errors" "github.com/pkg/errors"
) )
@ -49,7 +49,7 @@ type Runtime struct {
Root string `toml:"runtime_root" json:"runtimeRoot"` Root string `toml:"runtime_root" json:"runtimeRoot"`
// Options are config options for the runtime. If options is loaded // Options are config options for the runtime. If options is loaded
// from toml config, it will be toml.Primitive. // from toml config, it will be toml.Primitive.
Options *toml.Primitive `toml:"options" json:"options"` Options *toml.Tree `toml:"options" json:"options"`
// PrivilegedWithoutHostDevices overloads the default behaviour for adding host devices to the // PrivilegedWithoutHostDevices overloads the default behaviour for adding host devices to the
// runtime spec when the container is privileged. Defaults to false. // runtime spec when the container is privileged. Defaults to false.
PrivilegedWithoutHostDevices bool `toml:"privileged_without_host_devices" json:"privileged_without_host_devices"` PrivilegedWithoutHostDevices bool `toml:"privileged_without_host_devices" json:"privileged_without_host_devices"`

View File

@ -19,7 +19,6 @@
package config package config
import ( import (
"github.com/BurntSushi/toml"
"github.com/containerd/containerd" "github.com/containerd/containerd"
"github.com/containerd/containerd/pkg/cri/streaming" "github.com/containerd/containerd/pkg/cri/streaming"
) )
@ -39,8 +38,7 @@ func DefaultConfig() PluginConfig {
NoPivot: false, NoPivot: false,
Runtimes: map[string]Runtime{ Runtimes: map[string]Runtime{
"runc": { "runc": {
Type: "io.containerd.runc.v2", Type: "io.containerd.runc.v2",
Options: new(toml.Primitive),
}, },
}, },
DisableSnapshotAnnotations: true, DisableSnapshotAnnotations: true,

View File

@ -23,7 +23,6 @@ import (
"strconv" "strconv"
"strings" "strings"
"github.com/BurntSushi/toml"
runhcsoptions "github.com/Microsoft/hcsshim/cmd/containerd-shim-runhcs-v1/options" runhcsoptions "github.com/Microsoft/hcsshim/cmd/containerd-shim-runhcs-v1/options"
"github.com/containerd/containerd" "github.com/containerd/containerd"
"github.com/containerd/containerd/containers" "github.com/containerd/containerd/containers"
@ -310,7 +309,7 @@ func generateRuntimeOptions(r criconfig.Runtime, c criconfig.Config) (interface{
}, nil }, nil
} }
options := getRuntimeOptionsType(r.Type) options := getRuntimeOptionsType(r.Type)
if err := toml.PrimitiveDecode(*r.Options, options); err != nil { if err := r.Options.Unmarshal(options); err != nil {
return nil, err return nil, err
} }
return options, nil return options, nil

View File

@ -21,7 +21,6 @@ import (
"io/ioutil" "io/ioutil"
"testing" "testing"
"github.com/BurntSushi/toml"
"github.com/containerd/containerd/oci" "github.com/containerd/containerd/oci"
"github.com/containerd/containerd/plugin" "github.com/containerd/containerd/plugin"
"github.com/containerd/containerd/reference/docker" "github.com/containerd/containerd/reference/docker"
@ -29,6 +28,7 @@ import (
runcoptions "github.com/containerd/containerd/runtime/v2/runc/options" runcoptions "github.com/containerd/containerd/runtime/v2/runc/options"
imagedigest "github.com/opencontainers/go-digest" imagedigest "github.com/opencontainers/go-digest"
runtimespec "github.com/opencontainers/runtime-spec/specs-go" runtimespec "github.com/opencontainers/runtime-spec/specs-go"
"github.com/pelletier/go-toml"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
@ -223,11 +223,16 @@ systemd_cgroup = true
NoNewKeyring = true NoNewKeyring = true
` `
var nilOptsConfig, nonNilOptsConfig criconfig.Config var nilOptsConfig, nonNilOptsConfig criconfig.Config
_, err := toml.Decode(nilOpts, &nilOptsConfig) tree, err := toml.Load(nilOpts)
require.NoError(t, err) require.NoError(t, err)
_, err = toml.Decode(nonNilOpts, &nonNilOptsConfig) err = tree.Unmarshal(&nilOptsConfig)
require.NoError(t, err) require.NoError(t, err)
require.Len(t, nilOptsConfig.Runtimes, 3) require.Len(t, nilOptsConfig.Runtimes, 3)
tree, err = toml.Load(nonNilOpts)
require.NoError(t, err)
err = tree.Unmarshal(&nonNilOptsConfig)
require.NoError(t, err)
require.Len(t, nonNilOptsConfig.Runtimes, 3) require.Len(t, nonNilOptsConfig.Runtimes, 3)
for desc, test := range map[string]struct { for desc, test := range map[string]struct {

View File

@ -20,8 +20,8 @@ import (
"path/filepath" "path/filepath"
"strings" "strings"
"github.com/BurntSushi/toml"
"github.com/imdario/mergo" "github.com/imdario/mergo"
"github.com/pelletier/go-toml"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/containerd/containerd/errdefs" "github.com/containerd/containerd/errdefs"
@ -55,7 +55,7 @@ type Config struct {
// required plugin doesn't exist or fails to be initialized or started. // required plugin doesn't exist or fails to be initialized or started.
RequiredPlugins []string `toml:"required_plugins"` RequiredPlugins []string `toml:"required_plugins"`
// Plugins provides plugin specific configuration for the initialization of a plugin // Plugins provides plugin specific configuration for the initialization of a plugin
Plugins map[string]toml.Primitive `toml:"plugins"` Plugins map[string]toml.Tree `toml:"plugins"`
// OOMScore adjust the containerd's oom score // OOMScore adjust the containerd's oom score
OOMScore int `toml:"oom_score"` OOMScore int `toml:"oom_score"`
// Cgroup specifies cgroup information for the containerd daemon process // Cgroup specifies cgroup information for the containerd daemon process
@ -209,7 +209,7 @@ func (c *Config) Decode(p *plugin.Registration) (interface{}, error) {
if !ok { if !ok {
return p.Config, nil return p.Config, nil
} }
if err := toml.PrimitiveDecode(data, p.Config); err != nil { if err := data.Unmarshal(p.Config); err != nil {
return nil, err return nil, err
} }
return p.Config, nil return p.Config, nil
@ -264,10 +264,16 @@ func LoadConfig(path string, out *Config) error {
// loadConfigFile decodes a TOML file at the given path // loadConfigFile decodes a TOML file at the given path
func loadConfigFile(path string) (*Config, error) { func loadConfigFile(path string) (*Config, error) {
config := &Config{} config := &Config{}
_, err := toml.DecodeFile(path, &config)
file, err := toml.LoadFile(path)
if err != nil { if err != nil {
return nil, err return nil, errors.Wrapf(err, "failed to load TOML: %s", path)
} }
if err := file.Unmarshal(config); err != nil {
return nil, errors.Wrap(err, "failed to unmarshal TOML")
}
return config, nil return config, nil
} }

View File

@ -22,9 +22,9 @@ import (
"fmt" "fmt"
"os" "os"
"github.com/BurntSushi/toml"
"github.com/docker/go-units" "github.com/docker/go-units"
"github.com/hashicorp/go-multierror" "github.com/hashicorp/go-multierror"
"github.com/pelletier/go-toml"
"github.com/pkg/errors" "github.com/pkg/errors"
) )
@ -56,8 +56,13 @@ func LoadConfig(path string) (*Config, error) {
} }
config := Config{} config := Config{}
if _, err := toml.DecodeFile(path, &config); err != nil { file, err := toml.LoadFile(path)
return nil, errors.Wrapf(err, "failed to unmarshal data at '%s'", path) if err != nil {
return nil, errors.Wrapf(err, "failed to open devmapepr TOML: %s", path)
}
if err := file.Unmarshal(&config); err != nil {
return nil, errors.Wrap(err, "failed to unmarshal devmapper TOML")
} }
if err := config.parse(); err != nil { if err := config.parse(); err != nil {

View File

@ -23,8 +23,8 @@ import (
"os" "os"
"testing" "testing"
"github.com/BurntSushi/toml"
"github.com/hashicorp/go-multierror" "github.com/hashicorp/go-multierror"
"github.com/pelletier/go-toml"
"gotest.tools/v3/assert" "gotest.tools/v3/assert"
is "gotest.tools/v3/assert/cmp" is "gotest.tools/v3/assert/cmp"
) )