_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
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()
"""
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.
nl = data.splitlines(False)
return nl
+ def GetClusterTags(self):
+ """Return the cluster tags.
+
+ """
+ data = self._ReadFile(constants.SS_CLUSTER_TAGS)
+ nl = data.splitlines(False)
+ return nl
+
def GetMasterAndMyself(ss=None):
"""Get the master node and my own hostname.
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()