From 93417d446c82626ebdf59014b109086cd24a8304 Mon Sep 17 00:00:00 2001 From: Vincent Batts Date: Tue, 4 Apr 2017 15:31:35 -0400 Subject: [PATCH] containerd: missing config creates a default This fixes silently ignore the config file not existing as well. ```bash sudo ./bin/containerd --config farts $ sudo ./bin/containerd --config farts INFO[0000] config "farts" does not exist. Creating it. module=containerd INFO[0000] starting containerd boot... module=containerd INFO[0000] starting debug API... debug="/run/containerd/debug.sock" module=containerd INFO[0000] loading monitor plugin "cgroups"... module=containerd INFO[0000] loading runtime plugin "linux"... module=containerd INFO[0000] loading snapshot plugin "snapshot-overlay"... module=containerd INFO[0000] loading grpc service plugin "content-grpc"... module=containerd INFO[0000] loading grpc service plugin "metrics-grpc"... module=containerd INFO[0000] loading grpc service plugin "runtime-grpc"... module=containerd INFO[0000] loading grpc service plugin "healthcheck-grpc"... module=containerd INFO[0000] loading grpc service plugin "rootfs-grpc"... module=containerd INFO[0000] starting GRPC API server... module=containerd INFO[0000] containerd successfully booted in 0.001465s module=containerd ^C$ cat farts state = "/run/containerd" root = "/var/lib/containerd" snapshotter = "overlay" subreaper = false [grpc] socket = "/run/containerd/containerd.sock" uid = 0 gid = 0 [debug] socket = "/run/containerd/debug.sock" level = "info" [metrics] address = "" ``` Signed-off-by: Vincent Batts --- cmd/containerd/main.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/cmd/containerd/main.go b/cmd/containerd/main.go index f9b5f5c..2a4135c 100644 --- a/cmd/containerd/main.go +++ b/cmd/containerd/main.go @@ -162,10 +162,22 @@ func before(context *cli.Context) error { log.G(global).Infof("containerd default config written to %q", fh.Name()) os.Exit(0) } - if err := loadConfig(context.GlobalString("config")); err != nil && - !os.IsNotExist(err) { + err := loadConfig(context.GlobalString("config")) + if err != nil && !os.IsNotExist(err) { return err + } else if err != nil && os.IsNotExist(err) { + log.G(global).Infof("config %q does not exist. Creating it.", context.GlobalString("config")) + fh, err := os.Create(context.GlobalString("config")) + if err != nil { + return err + } + if _, err := conf.WriteTo(fh); err != nil { + fh.Close() + return err + } + fh.Close() } + // the order for config vs flag values is that flags will always override // the config values if they are set if err := setLevel(context); err != nil {