projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
13647: Suppress "exit status 1" after config-check diff output.
[arvados.git]
/
lib
/
config
/
load.go
diff --git
a/lib/config/load.go
b/lib/config/load.go
index 526a050fbbdf923a076faab9ad4ce9b7954a1487..a0c769537487cce179ff74d65035144ef647b561 100644
(file)
--- a/
lib/config/load.go
+++ b/
lib/config/load.go
@@
-23,6
+23,14
@@
type logger interface {
Warnf(string, ...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 {
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, "")
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)
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
}
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
}
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 {
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)
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
// if vsupp is a map but vexp isn't map, this
// will be caught elsewhere; see TestBadType.
continue