diff --git a/os_apply_config/collect_config.py b/os_apply_config/collect_config.py index f7fa2c2..08f8e20 100644 --- a/os_apply_config/collect_config.py +++ b/os_apply_config/collect_config.py @@ -58,7 +58,7 @@ def merge_configs(parsed_configs): '''Returns deep-merged dict from passed list of dicts.''' final_conf = {} for conf in parsed_configs: - if conf: + if conf and isinstance(conf, dict): final_conf = _deep_merge_dict(final_conf, conf) return final_conf diff --git a/os_apply_config/tests/test_collect_config.py b/os_apply_config/tests/test_collect_config.py index ec1b499..bf0c386 100644 --- a/os_apply_config/tests/test_collect_config.py +++ b/os_apply_config/tests/test_collect_config.py @@ -109,6 +109,11 @@ class TestMergeConfigs(testtools.TestCase): result = collect_config.merge_configs(type_conflict) self.assertEqual({'a': [7, 8, 9]}, result) + def test_merge_configs_nested_type_conflict(self): + type_conflict = [{'a': {'foo': 'bar'}}, {'a': 'shazam'}] + result = collect_config.merge_configs(type_conflict) + self.assertEqual({'a': 'shazam'}, result) + def test_merge_configs_list_conflict(self): list_conflict = [{'a': [1, 2, 3]}, {'a': [4, 5, 6]}] @@ -116,6 +121,7 @@ class TestMergeConfigs(testtools.TestCase): self.assertEqual({'a': [4, 5, 6]}, result) def test_merge_configs_empty_notdict(self): - list_conflict = [[], {'a': '1'}, '', None, {'b': '2'}, {}] + list_conflict = [[], {'a': '1'}, '', None, 'tacocat', + {'b': '2'}, {}, 'baseball'] result = collect_config.merge_configs(list_conflict) self.assertEqual({'a': '1', 'b': '2'}, result)