Make ipolicy violations a warning
[ganeti-local] / lib / ssconf.py
index 67d903c..187b057 100644 (file)
@@ -1,7 +1,7 @@
 #
 #
 
-# Copyright (C) 2006, 2007, 2008, 2010 Google Inc.
+# Copyright (C) 2006, 2007, 2008, 2010, 2011, 2012 Google Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -37,6 +37,7 @@ from ganeti import utils
 from ganeti import serializer
 from ganeti import objects
 from ganeti import netutils
+from ganeti import pathutils
 
 
 SSCONF_LOCK_TIMEOUT = 10
@@ -48,7 +49,7 @@ class SimpleConfigReader(object):
   """Simple class to read configuration file.
 
   """
-  def __init__(self, file_name=constants.CLUSTER_CONF_FILE):
+  def __init__(self, file_name=pathutils.CLUSTER_CONF_FILE):
     """Initializes this class.
 
     @type file_name: string
@@ -273,7 +274,6 @@ class SimpleStore(object):
     - keys are restricted to predefined values
 
   """
-  _SS_FILEPREFIX = "ssconf_"
   _VALID_KEYS = (
     constants.SS_CLUSTER_NAME,
     constants.SS_CLUSTER_TAGS,
@@ -297,12 +297,13 @@ class SimpleStore(object):
     constants.SS_MAINTAIN_NODE_HEALTH,
     constants.SS_UID_POOL,
     constants.SS_NODEGROUPS,
+    constants.SS_NETWORKS,
     )
   _MAX_SIZE = 131072
 
   def __init__(self, cfg_location=None):
     if cfg_location is None:
-      self._cfg_dir = constants.DATA_DIR
+      self._cfg_dir = pathutils.DATA_DIR
     else:
       self._cfg_dir = cfg_location
 
@@ -314,7 +315,7 @@ class SimpleStore(object):
       raise errors.ProgrammerError("Invalid key requested from SSConf: '%s'"
                                    % str(key))
 
-    filename = self._cfg_dir + "/" + self._SS_FILEPREFIX + key
+    filename = self._cfg_dir + "/" + constants.SSCONF_FILEPREFIX + key
     return filename
 
   def _ReadFile(self, key, default=None):
@@ -342,7 +343,7 @@ class SimpleStore(object):
     @param values: Dictionary of (name, value)
 
     """
-    ssconf_lock = utils.FileLock.Open(constants.SSCONF_LOCK_FILE)
+    ssconf_lock = utils.FileLock.Open(pathutils.SSCONF_LOCK_FILE)
 
     # Get lock while writing files
     ssconf_lock.Exclusive(blocking=True, timeout=SSCONF_LOCK_TIMEOUT)
@@ -413,10 +414,15 @@ class SimpleStore(object):
     return self._ReadFile(constants.SS_MASTER_NETDEV)
 
   def GetMasterNetmask(self):
-    """Get the netdev to which we'll add the master ip.
+    """Get the master netmask.
 
     """
-    return self._ReadFile(constants.SS_MASTER_NETMASK)
+    try:
+      return self._ReadFile(constants.SS_MASTER_NETMASK)
+    except errors.ConfigurationError:
+      family = self.GetPrimaryIPFamily()
+      ipcls = netutils.IPAddress.GetClassFromIpFamily(family)
+      return ipcls.iplen
 
   def GetMasterNode(self):
     """Get the hostname of the master node for this cluster.
@@ -456,6 +462,14 @@ class SimpleStore(object):
     nl = data.splitlines(False)
     return nl
 
+  def GetNetworkList(self):
+    """Return the list of networks.
+
+    """
+    data = self._ReadFile(constants.SS_NETWORKS)
+    nl = data.splitlines(False)
+    return nl
+
   def GetClusterTags(self):
     """Return the cluster tags.
 
@@ -506,6 +520,15 @@ class SimpleStore(object):
                                       " family: %s" % err)
 
 
+def WriteSsconfFiles(values):
+  """Update all ssconf files.
+
+  Wrapper around L{SimpleStore.WriteFiles}.
+
+  """
+  SimpleStore().WriteFiles(values)
+
+
 def GetMasterAndMyself(ss=None):
   """Get the master node and my own hostname.