From db3a71173883bcfefe901eeea9fb1dcb30cd49a7 Mon Sep 17 00:00:00 2001 From: Maksym Pavlenko Date: Fri, 30 Aug 2019 10:55:32 -0700 Subject: [PATCH] Add 'containerd config dump' subcommand Signed-off-by: Maksym Pavlenko --- cmd/containerd/command/config.go | 69 ++++++++++++++++++++------------ 1 file changed, 43 insertions(+), 26 deletions(-) diff --git a/cmd/containerd/command/config.go b/cmd/containerd/command/config.go index f9d5f9efa..48866b002 100644 --- a/cmd/containerd/command/config.go +++ b/cmd/containerd/command/config.go @@ -40,6 +40,39 @@ func (c *Config) WriteTo(w io.Writer) (int64, error) { return 0, toml.NewEncoder(w).Encode(c) } +func outputConfig(cfg *srvconfig.Config) error { + config := &Config{ + Config: cfg, + } + + // for the time being, keep the defaultConfig's version set at 1 so that + // when a config without a version is loaded from disk and has no version + // set, we assume it's a v1 config. But when generating new configs via + // this command, generate the v2 config + config.Config.Version = 2 + plugins, err := server.LoadPlugins(gocontext.Background(), config.Config) + if err != nil { + return err + } + if len(plugins) != 0 { + config.Plugins = make(map[string]interface{}) + for _, p := range plugins { + if p.Config == nil { + continue + } + config.Plugins[p.URI()] = p.Config + } + } + timeouts := timeout.All() + config.Timeouts = make(map[string]string) + for k, v := range timeouts { + config.Timeouts[k] = v.String() + } + + _, err = config.WriteTo(os.Stdout) + return err +} + var configCommand = cli.Command{ Name: "config", Usage: "information on the containerd config", @@ -48,35 +81,19 @@ var configCommand = cli.Command{ Name: "default", Usage: "see the output of the default config", Action: func(context *cli.Context) error { - config := &Config{ - Config: defaultConfig(), - } - // for the time being, keep the defaultConfig's version set at 1 so that - // when a config without a version is loaded from disk and has no version - // set, we assume it's a v1 config. But when generating new configs via - // this command, generate the v2 config - config.Config.Version = 2 - plugins, err := server.LoadPlugins(gocontext.Background(), config.Config) - if err != nil { + return outputConfig(defaultConfig()) + }, + }, + { + Name: "dump", + Usage: "see the output of the final main config with imported in subconfig files", + Action: func(context *cli.Context) error { + config := defaultConfig() + if err := srvconfig.LoadConfig(context.GlobalString("config"), config); err != nil && !os.IsNotExist(err) { return err } - if len(plugins) != 0 { - config.Plugins = make(map[string]interface{}) - for _, p := range plugins { - if p.Config == nil { - continue - } - config.Plugins[p.URI()] = p.Config - } - } - timeouts := timeout.All() - config.Timeouts = make(map[string]string) - for k, v := range timeouts { - config.Timeouts[k] = v.String() - } - _, err = config.WriteTo(os.Stdout) - return err + return outputConfig(config) }, }, },