def test_conf_store_compare(self): """Test comparing given two index and return new/deleted/updated keys.""" load_config('conf1', 'json:///tmp/file1.json') load_config('conf2', 'json:///tmp/file2.json') Conf.delete('conf2', 'bridge>name') Conf.set('conf2', 'bridge>protocol', 'http') Conf.set('conf2', 'bridge>port', '51288') expected_new_keys = ['bridge>protocol'] expected_updated_keys = ['bridge>port'] actual_new_keys, actual_deleted_keys, actual_updated_keys = Conf.compare( 'conf1', 'conf2') self.assertEqual(actual_new_keys, expected_new_keys) self.assertEqual(actual_updated_keys, expected_updated_keys) self.assertTrue(True if 'bridge>name' in actual_deleted_keys else False) self.assertNotEqual(actual_new_keys, None) with self.assertRaises(ConfError): actual_new_keys, actual_deleted_keys, actual_updated_keys = Conf.compare( 'conf1', 'conf4')
def _update_conf(_conf_idx: str, _tmp_idx: str): """ Description: Updates conf by updating new keys/values post upgrade. 1. Fetch new keys using conf compare 2. Update gconf by adding new keys. 3. Update gconf by updating changed values for cortx>common """ new_keys, _, changed_keys = Conf.compare(_conf_idx, _tmp_idx) for key in new_keys: value= Conf.get(_tmp_idx, key) Conf.set(_conf_idx, key, value) for key in changed_keys: if key.startswith('cortx>common'): value= Conf.get(_tmp_idx, key) Conf.set(_conf_idx, key, value) Conf.save(_conf_idx)
def _prepare_diff(idx1: str, idx2: str, diff_idx: str): """ Description: Compare two conf index and prepare changeset diff config. 1. Fetch new/deleted/updated keys by comparing idx1 and idx2 2. Prepare changeset config on diff_index Paramaters: [idx1] conf index 1 [idx2] conf index 2 [diff_idx] changeset diff index """ new_keys, deleted_keys, changed_keys = Conf.compare(idx1, idx2) Conf.load(diff_idx, const.CORTX_CHANGESET_URL) for key in new_keys: Conf.set(diff_idx, f'new>{key}', Conf.get(idx2, key)) for key in deleted_keys: Conf.set(diff_idx, f'deleted>{key}', Conf.get(idx1, key)) for key in changed_keys: value = f"{Conf.get(idx1, key)}|{Conf.get(idx2, key)}" Conf.set(diff_idx, f'changed>{key}', value) Conf.save(diff_idx)
def compare(args): """Compares two conf urls and return 3 lists: new_keys, deleted_keys, updated_keys.""" index1 = ConfCli._index index2 = 'index2' ConfCli.load(args.second_url, index2) return Conf.compare(index1, index2)