X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/b705c7a61b3e3ba5d6a93c83380b66c4b1fd7890..4478301b4396b9083217ccdb14e9a6b2825dc487:/lib/ssconf.py diff --git a/lib/ssconf.py b/lib/ssconf.py index 6ed9d12..2eccc59 100644 --- a/lib/ssconf.py +++ b/lib/ssconf.py @@ -29,6 +29,7 @@ configuration data, which is mostly static and available to all nodes. import sys import re import os +import errno from ganeti import errors from ganeti import constants @@ -281,11 +282,13 @@ class SimpleStore(object): constants.SS_NODE_SECONDARY_IPS, constants.SS_OFFLINE_NODES, constants.SS_ONLINE_NODES, + constants.SS_PRIMARY_IP_FAMILY, constants.SS_INSTANCE_LIST, constants.SS_RELEASE_VERSION, constants.SS_HYPERVISOR_LIST, constants.SS_MAINTAIN_NODE_HEALTH, constants.SS_UID_POOL, + constants.SS_NODEGROUPS, ) _MAX_SIZE = 131072 @@ -306,7 +309,7 @@ class SimpleStore(object): filename = self._cfg_dir + '/' + self._SS_FILEPREFIX + key return filename - def _ReadFile(self, key): + def _ReadFile(self, key, default=None): """Generic routine to read keys. This will read the file which holds the value requested. Errors @@ -317,6 +320,8 @@ class SimpleStore(object): try: data = utils.ReadFile(filename, size=self._MAX_SIZE) except EnvironmentError, err: + if err.errno == errno.ENOENT and default is not None: + return default raise errors.ConfigurationError("Can't read from the ssconf file:" " '%s'" % str(err)) data = data.rstrip('\n') @@ -422,6 +427,14 @@ class SimpleStore(object): nl = data.splitlines(False) return nl + def GetNodegroupList(self): + """Return the list of nodegroups. + + """ + data = self._ReadFile(constants.SS_NODEGROUPS) + nl = data.splitlines(False) + return nl + def GetClusterTags(self): """Return the cluster tags. @@ -460,6 +473,17 @@ class SimpleStore(object): data = self._ReadFile(constants.SS_UID_POOL) return data + def GetPrimaryIPFamily(self): + """Return the cluster-wide primary address family. + + """ + try: + return int(self._ReadFile(constants.SS_PRIMARY_IP_FAMILY, + default=netutils.IP4Address.family)) + except (ValueError, TypeError), err: + raise errors.ConfigurationError("Error while trying to parse primary ip" + " family: %s" % err) + def GetMasterAndMyself(ss=None): """Get the master node and my own hostname.