X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/689901263ebfdd996da3711236615038e6245db3..3d98f9b1196260dbc7b9963dfd295d7e330e23d6:/lib/config/load.go diff --git a/lib/config/load.go b/lib/config/load.go index 526a050fbb..a0c7695374 100644 --- a/lib/config/load.go +++ b/lib/config/load.go @@ -23,6 +23,14 @@ type logger interface { Warnf(string, ...interface{}) } +func loadFileOrStdin(path string, stdin io.Reader, log logger) (*arvados.Config, error) { + if path == "-" { + return load(stdin, log, true) + } else { + return LoadFile(path, log) + } +} + func LoadFile(path string, log logger) (*arvados.Config, error) { f, err := os.Open(path) if err != nil { @@ -79,6 +87,7 @@ func load(rdr io.Reader, log logger, useDeprecated bool) (*arvados.Config, error return nil, fmt.Errorf("loading config data: %s", err) } logExtraKeys(log, merged, src, "") + removeSampleKeys(merged) err = mergo.Merge(&merged, src, mergo.WithOverride) if err != nil { return nil, fmt.Errorf("merging config data: %s", err) @@ -129,14 +138,32 @@ func checkKeyConflict(label string, m map[string]string) error { return nil } +func removeSampleKeys(m map[string]interface{}) { + delete(m, "SAMPLE") + for _, v := range m { + if v, _ := v.(map[string]interface{}); v != nil { + removeSampleKeys(v) + } + } +} + func logExtraKeys(log logger, expected, supplied map[string]interface{}, prefix string) { if log == nil { return } + allowed := map[string]interface{}{} + for k, v := range expected { + allowed[strings.ToLower(k)] = v + } for k, vsupp := range supplied { - if vexp, ok := expected[k]; !ok { + vexp, ok := allowed[strings.ToLower(k)] + if !ok && expected["SAMPLE"] != nil { + vexp = expected["SAMPLE"] + } else if !ok { log.Warnf("deprecated or unknown config entry: %s%s", prefix, k) - } else if vsupp, ok := vsupp.(map[string]interface{}); !ok { + continue + } + if vsupp, ok := vsupp.(map[string]interface{}); !ok { // if vsupp is a map but vexp isn't map, this // will be caught elsewhere; see TestBadType. continue