Add --force-join option to gnt-node add
[ganeti-local] / lib / ssconf.py
index 0449f80..2eccc59 100644 (file)
@@ -29,6 +29,7 @@ configuration data, which is mostly static and available to all nodes.
 import sys
 import re
 import os
 import sys
 import re
 import os
+import errno
 
 from ganeti import errors
 from ganeti import constants
 
 from ganeti import errors
 from ganeti import constants
@@ -287,6 +288,7 @@ class SimpleStore(object):
     constants.SS_HYPERVISOR_LIST,
     constants.SS_MAINTAIN_NODE_HEALTH,
     constants.SS_UID_POOL,
     constants.SS_HYPERVISOR_LIST,
     constants.SS_MAINTAIN_NODE_HEALTH,
     constants.SS_UID_POOL,
+    constants.SS_NODEGROUPS,
     )
   _MAX_SIZE = 131072
 
     )
   _MAX_SIZE = 131072
 
@@ -307,7 +309,7 @@ class SimpleStore(object):
     filename = self._cfg_dir + '/' + self._SS_FILEPREFIX + key
     return filename
 
     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
     """Generic routine to read keys.
 
     This will read the file which holds the value requested. Errors
@@ -318,6 +320,8 @@ class SimpleStore(object):
     try:
       data = utils.ReadFile(filename, size=self._MAX_SIZE)
     except EnvironmentError, err:
     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')
       raise errors.ConfigurationError("Can't read from the ssconf file:"
                                       " '%s'" % str(err))
     data = data.rstrip('\n')
@@ -423,6 +427,14 @@ class SimpleStore(object):
     nl = data.splitlines(False)
     return nl
 
     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.
 
   def GetClusterTags(self):
     """Return the cluster tags.
 
@@ -466,7 +478,8 @@ class SimpleStore(object):
 
     """
     try:
 
     """
     try:
-      return int(self._ReadFile(constants.SS_PRIMARY_IP_FAMILY))
+      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)
     except (ValueError, TypeError), err:
       raise errors.ConfigurationError("Error while trying to parse primary ip"
                                       " family: %s" % err)