ssconf: Add function to verify keys
authorMichael Hanselmann <hansmi@google.com>
Wed, 28 Nov 2012 12:11:08 +0000 (13:11 +0100)
committerMichael Hanselmann <hansmi@google.com>
Mon, 3 Dec 2012 13:03:04 +0000 (14:03 +0100)
The new utility for configuring the node daemon will have to check
whether it received valid ssconf names.

Signed-off-by: Michael Hanselmann <hansmi@google.com>
Reviewed-by: Guido Trotter <ultrotter@google.com>

lib/ssconf.py
test/ganeti.ssconf_unittest.py

index 7e34b5d..7823e66 100644 (file)
@@ -387,3 +387,17 @@ def VerifyClusterName(name, _cfg_location=None):
   else:
     if name != local_name:
       raise errors.GenericError("Current cluster name is '%s'" % local_name)
+
+
+def VerifyKeys(keys):
+  """Raises an exception if unknown ssconf keys are given.
+
+  @type keys: sequence
+  @param keys: Key names to verify
+  @raise errors.GenericError: When invalid keys were found
+
+  """
+  invalid = frozenset(keys) - _VALID_KEYS
+  if invalid:
+    raise errors.GenericError("Invalid ssconf keys: %s" %
+                              utils.CommaJoin(sorted(invalid)))
index 1db88e8..958859b 100755 (executable)
@@ -169,5 +169,20 @@ class TestVerifyClusterName(unittest.TestCase):
                         "cluster.example.com", _cfg_location=self.tmpdir)
 
 
+class TestVerifyKeys(unittest.TestCase):
+  def testNoKeys(self):
+    ssconf.VerifyKeys({})
+
+  def testValidKeys(self):
+    ssconf.VerifyKeys(ssconf._VALID_KEYS)
+
+    for key in ssconf._VALID_KEYS:
+      ssconf.VerifyKeys([key])
+
+  def testInvalidKeys(self):
+    for key in ["", ".", " ", "foo", "bar", "HelloWorld"]:
+      self.assertRaises(errors.GenericError, ssconf.VerifyKeys, [key])
+
+
 if __name__ == "__main__":
   testutils.GanetiTestProgram()