}
ldr.logExtraKeys(merged, src, "")
removeSampleKeys(merged)
+ // We merge the loaded config into the default, overriding any existing keys.
+ // Make sure we do not override a default with a key that has a 'null' value.
+ removeNullKeys(src)
err = mergo.Merge(&merged, src, mergo.WithOverride)
if err != nil {
return nil, fmt.Errorf("merging config data: %s", err)
return nil
}
+func removeNullKeys(m map[string]interface{}) {
+ for k, v := range m {
+ if v == nil {
+ delete(m, k)
+ }
+ if v, _ := v.(map[string]interface{}); v != nil {
+ removeNullKeys(v)
+ }
+ }
+}
+
func removeSampleKeys(m map[string]interface{}) {
delete(m, "SAMPLE")
for _, v := range m {
c.Check(cc.API.MaxItemsPerResponse, check.Equals, 1000)
}
+func (s *LoadSuite) TestNullKeyDoesNotOverrideDefault(c *check.C) {
+ ldr := testLoader(c, `{"Clusters":{"z1111":{"API":}}}`, nil)
+ ldr.SkipDeprecated = true
+ cfg, err := ldr.Load()
+ c.Assert(err, check.IsNil)
+ c1, err := cfg.GetCluster("z1111")
+ c.Assert(err, check.IsNil)
+ c.Check(c1.ClusterID, check.Equals, "z1111")
+ c.Check(c1.API.MaxRequestAmplification, check.Equals, 4)
+ c.Check(c1.API.MaxItemsPerResponse, check.Equals, 1000)
+}
+
func (s *LoadSuite) TestMungeLegacyConfigArgs(c *check.C) {
f, err := ioutil.TempFile("", "")
c.Check(err, check.IsNil)