diff --git a/patroni/config.py b/patroni/config.py index 4ccf6075..20535485 100644 --- a/patroni/config.py +++ b/patroni/config.py @@ -2,7 +2,6 @@ import json import logging import os import shutil -import six import sys import tempfile import yaml @@ -195,12 +194,9 @@ class Config(object): elif name not in ('connect_address', 'listen', 'data_dir', 'pgpass', 'authentication'): config['postgresql'][name] = deepcopy(value) elif name == 'standby_cluster': - allowed_keys = self.__DEFAULT_CONFIG['standby_cluster'].keys() - expected = { - k: v for k, v in (value or {}).items() - if (k in allowed_keys and isinstance(v, six.string_types)) - } - config['standby_cluster'].update(expected) + for name, value in (value or {}).items(): + if name in self.__DEFAULT_CONFIG['standby_cluster']: + config['standby_cluster'][name] = deepcopy(value) elif name in config: # only variables present in __DEFAULT_CONFIG allowed to be overriden from DCS if name in ('synchronous_mode', 'synchronous_mode_strict'): config[name] = value diff --git a/tests/test_config.py b/tests/test_config.py index 2c45cfdd..fea72337 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -84,3 +84,15 @@ class TestConfig(unittest.TestCase): self.config.save_cache() with patch('os.fdopen', MagicMock()): self.config.save_cache() + + def test_standby_cluster_parameters(self): + dynamic_configuration = { + 'standby_cluster': { + 'create_replica_methods': ['wal_e', 'basebackup'], + 'host': 'localhost', + 'port': 5432 + } + } + self.config.set_dynamic_configuration(dynamic_configuration) + for name, value in dynamic_configuration['standby_cluster'].items(): + self.assertEqual(self.config['standby_cluster'][name], value)