LUVerifyCluster: update _ValidateNode description
[ganeti-local] / lib / ssconf.py
index ffb2ddf..c29d63c 100644 (file)
@@ -35,6 +35,7 @@ from ganeti import constants
 from ganeti import utils
 from ganeti import serializer
 from ganeti import objects
+from ganeti import netutils
 
 
 SSCONF_LOCK_TIMEOUT = 10
@@ -282,6 +283,9 @@ class SimpleStore(object):
     constants.SS_ONLINE_NODES,
     constants.SS_INSTANCE_LIST,
     constants.SS_RELEASE_VERSION,
+    constants.SS_HYPERVISOR_LIST,
+    constants.SS_MAINTAIN_NODE_HEALTH,
+    constants.SS_UID_POOL,
     )
   _MAX_SIZE = 131072
 
@@ -333,6 +337,9 @@ class SimpleStore(object):
       for name, value in values.iteritems():
         if value and not value.endswith("\n"):
           value += "\n"
+        if len(value) > self._MAX_SIZE:
+          raise errors.ConfigurationError("ssconf file %s above maximum size" %
+                                          name)
         utils.WriteFile(self.KeyToFilename(name), data=value, mode=0444)
     finally:
       ssconf_lock.Unlock()
@@ -423,6 +430,36 @@ class SimpleStore(object):
     nl = data.splitlines(False)
     return nl
 
+  def GetHypervisorList(self):
+    """Return the list of enabled hypervisors.
+
+    """
+    data = self._ReadFile(constants.SS_HYPERVISOR_LIST)
+    nl = data.splitlines(False)
+    return nl
+
+  def GetMaintainNodeHealth(self):
+    """Return the value of the maintain_node_health option.
+
+    """
+    data = self._ReadFile(constants.SS_MAINTAIN_NODE_HEALTH)
+    # we rely on the bool serialization here
+    return data == "True"
+
+  def GetUidPool(self):
+    """Return the user-id pool definition string.
+
+    The separator character is a newline.
+
+    The return value can be parsed using uidpool.ParseUidPool()::
+
+      ss = ssconf.SimpleStore()
+      uid_pool = uidpool.ParseUidPool(ss.GetUidPool(), separator="\\n")
+
+    """
+    data = self._ReadFile(constants.SS_UID_POOL)
+    return data
+
 
 def GetMasterAndMyself(ss=None):
   """Get the master node and my own hostname.
@@ -441,7 +478,7 @@ def GetMasterAndMyself(ss=None):
   """
   if ss is None:
     ss = SimpleStore()
-  return ss.GetMasterNode(), utils.HostInfo().name
+  return ss.GetMasterNode(), netutils.HostInfo().name
 
 
 def CheckMaster(debug, ss=None):
@@ -464,28 +501,3 @@ def CheckMaster(debug, ss=None):
     if debug:
       sys.stderr.write("Not master, exiting.\n")
     sys.exit(constants.EXIT_NOTMASTER)
-
-
-def CheckMasterCandidate(debug, ss=None):
-  """Checks the node setup.
-
-  If this is a master candidate, the function will return. Otherwise it will
-  exit with an exit code based on the node status.
-
-  """
-  try:
-    if ss is None:
-      ss = SimpleStore()
-    myself = utils.HostInfo().name
-    candidates = ss.GetMasterCandidates()
-  except errors.ConfigurationError, err:
-    print "Cluster configuration incomplete: '%s'" % str(err)
-    sys.exit(constants.EXIT_NODESETUP_ERROR)
-  except errors.ResolverError, err:
-    sys.stderr.write("Cannot resolve my own name (%s)\n" % err.args[0])
-    sys.exit(constants.EXIT_NODESETUP_ERROR)
-
-  if myself not in candidates:
-    if debug:
-      sys.stderr.write("Not master candidate, exiting.\n")
-    sys.exit(constants.EXIT_NOTCANDIDATE)