diff --git a/lib/ssconf.py b/lib/ssconf.py index 29db858da4e5cd8968fb21524659fe618dd5d50d..c1f5ce17c970eccdb33d6f49680433a583f824b9 100644 --- a/lib/ssconf.py +++ b/lib/ssconf.py @@ -138,6 +138,26 @@ class SimpleStore(object): raise errors.ConfigurationError("Can't read ssconf file %s: %s" % (filename, str(err))) + def ReadAll(self): + """Reads all keys and returns their values. + + @rtype: dict + @return: Dictionary, ssconf key as key, value as value + + """ + result = [] + + for key in _VALID_KEYS: + try: + value = self._ReadFile(key) + except errors.ConfigurationError: + # Ignore non-existing files + pass + else: + result.append((key, value)) + + return dict(result) + def WriteFiles(self, values, dry_run=False): """Writes ssconf files used by external scripts. diff --git a/test/ganeti.ssconf_unittest.py b/test/ganeti.ssconf_unittest.py index eb9273545f3d1fbdb5710e80f1b13839429131e3..201973f23f647232c90d7057207ec8b95acb4af6 100755 --- a/test/ganeti.ssconf_unittest.py +++ b/test/ganeti.ssconf_unittest.py @@ -149,6 +149,16 @@ class TestSimpleStore(unittest.TestCase): default="something.example.com"), "cluster.example.com") + def testReadAllNoFiles(self): + self.assertEqual(self.sstore.ReadAll(), {}) + + def testReadAllSingleFile(self): + utils.WriteFile(self.sstore.KeyToFilename(constants.SS_CLUSTER_NAME), + data="cluster.example.com") + self.assertEqual(self.sstore.ReadAll(), { + constants.SS_CLUSTER_NAME: "cluster.example.com", + }) + def testWriteFiles(self): values = { constants.SS_CLUSTER_NAME: "cluster.example.com",