From 9b4329e9e78bf69093b3a8b0dcbb74d082867766 Mon Sep 17 00:00:00 2001
From: Michael Hanselmann <hansmi@google.com>
Date: Fri, 30 Nov 2012 11:41:48 +0100
Subject: [PATCH] Add ssconf function to read all files

Configuring a node daemon on a newly added node will need all ssconf
values.

Signed-off-by: Michael Hanselmann <hansmi@google.com>
Reviewed-by: Guido Trotter <ultrotter@google.com>
---
 lib/ssconf.py                  | 20 ++++++++++++++++++++
 test/ganeti.ssconf_unittest.py | 10 ++++++++++
 2 files changed, 30 insertions(+)

diff --git a/lib/ssconf.py b/lib/ssconf.py
index 29db858da..c1f5ce17c 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 eb9273545..201973f23 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",
-- 
GitLab