15003: Error out if PostgreSQL connection map is ambiguous.
[arvados.git] / lib / config / load.go
index 87ec741bfb0e906fa5712241a8969dc2912817dc..ec5ce636a0eb520115be4d8301f7ea4adfd95ebd 100644 (file)
@@ -12,6 +12,7 @@ import (
        "io"
        "io/ioutil"
        "os"
+       "strings"
 
        "git.curoverse.com/arvados.git/sdk/go/arvados"
        "github.com/ghodss/yaml"
@@ -98,5 +99,23 @@ func Load(rdr io.Reader, log logger) (*arvados.Config, error) {
        if err != nil {
                return nil, err
        }
+       for id, cc := range cfg.Clusters {
+               err = checkKeyConflict(fmt.Sprintf("Clusters.%s.PostgreSQL.Connection", id), cc.PostgreSQL.Connection)
+               if err != nil {
+                       return nil, err
+               }
+       }
        return &cfg, nil
 }
+
+func checkKeyConflict(label string, m map[string]string) error {
+       saw := map[string]bool{}
+       for k := range m {
+               k = strings.ToLower(k)
+               if saw[k] {
+                       return fmt.Errorf("%s: multiple keys with tolower(key)==%q (use same case as defaults)", label, k)
+               }
+               saw[k] = true
+       }
+       return nil
+}