Skip to content

Commit 5f051c1

Browse files
committed
Improve error detection when loading config
Previously we simply ignored any not found error when loading the containerd config. This created unintuitive behavior: - If the user specified a path that didn't exist via --config, we would silently ignore the error. - If a config specified an import that didn't exist, we would silently ignore the error. In either of these cases, it appears we would end up using a potentially corrupted config, as it would contain any files that were merged into it before the not found error was hit. However, we can't just remove the check for !os.IsNotExist(err), as we shouldn't throw an error when --config is not passed, but the default config doesn't exist. This change updates the logic to only attempt to load the config if we know it exists, or the user passed --config. Signed-off-by: Kevin Parsons <[email protected]>
1 parent 2034660 commit 5f051c1

1 file changed

Lines changed: 8 additions & 2 deletions

File tree

cmd/containerd/command/main.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,14 @@ can be used and modified as necessary as a custom configuration.`
114114
config = defaultConfig()
115115
)
116116

117-
if err := srvconfig.LoadConfig(context.GlobalString("config"), config); err != nil && !os.IsNotExist(err) {
118-
return err
117+
// Only try to load the config if it either exists, or the user explicitly
118+
// told us to load this path.
119+
configPath := context.GlobalString("config")
120+
_, err := os.Stat(configPath)
121+
if !os.IsNotExist(err) || context.GlobalIsSet("config") {
122+
if err := srvconfig.LoadConfig(configPath, config); err != nil {
123+
return err
124+
}
119125
}
120126

121127
// Apply flags to the config

0 commit comments

Comments
 (0)