Release 2.0.0 final
[ganeti-local] / lib / ssconf.py
index 5e2ec04..cce1141 100644 (file)
@@ -126,11 +126,17 @@ class SimpleStore(object):
   _SS_FILEPREFIX = "ssconf_"
   _VALID_KEYS = (
     constants.SS_CLUSTER_NAME,
+    constants.SS_CLUSTER_TAGS,
     constants.SS_FILE_STORAGE_DIR,
+    constants.SS_MASTER_CANDIDATES,
     constants.SS_MASTER_IP,
     constants.SS_MASTER_NETDEV,
     constants.SS_MASTER_NODE,
     constants.SS_NODE_LIST,
+    constants.SS_OFFLINE_NODES,
+    constants.SS_ONLINE_NODES,
+    constants.SS_INSTANCE_LIST,
+    constants.SS_RELEASE_VERSION,
     )
   _MAX_SIZE = 131072
 
@@ -184,9 +190,9 @@ class SimpleStore(object):
     ssconf_lock.Exclusive(blocking=True, timeout=SSCONF_LOCK_TIMEOUT)
     try:
       for name, value in values.iteritems():
-        if not value.endswith("\n"):
+        if value and not value.endswith("\n"):
           value += "\n"
-        utils.WriteFile(self.KeyToFilename(name), data=value)
+        utils.WriteFile(self.KeyToFilename(name), data=value, mode=0444)
     finally:
       ssconf_lock.Unlock()
 
@@ -210,6 +216,14 @@ class SimpleStore(object):
     """
     return self._ReadFile(constants.SS_FILE_STORAGE_DIR)
 
+  def GetMasterCandidates(self):
+    """Return the list of master candidates.
+
+    """
+    data = self._ReadFile(constants.SS_MASTER_CANDIDATES)
+    nl = data.splitlines(False)
+    return nl
+
   def GetMasterIP(self):
     """Get the IP of the master node for this cluster.
 
@@ -246,6 +260,11 @@ def GetMasterAndMyself(ss=None):
   The function does not handle any errors, these should be handled in
   the caller (errors.ConfigurationError, errors.ResolverError).
 
+  @param ss: either a sstore.SimpleConfigReader or a
+      sstore.SimpleStore instance
+  @rtype: tuple
+  @return: a tuple (master node name, my own name)
+
   """
   if ss is None:
     ss = SimpleStore()