diff --git a/lib/ssconf.py b/lib/ssconf.py
index 19368376f6d7c4f303849586eacd91b07ccf69e3..8f24f9dc7c9b7e2b6f3f573309d5764891251c06 100644
--- a/lib/ssconf.py
+++ b/lib/ssconf.py
@@ -27,14 +27,11 @@ configuration data, which is mostly static and available to all nodes.
"""
import sys
-import os
import errno
from ganeti import errors
from ganeti import constants
from ganeti import utils
-from ganeti import serializer
-from ganeti import objects
from ganeti import netutils
from ganeti import pathutils
@@ -42,224 +39,6 @@ from ganeti import pathutils
SSCONF_LOCK_TIMEOUT = 10
-class SimpleConfigReader(object):
- """Simple class to read configuration file.
-
- """
- def __init__(self, file_name=pathutils.CLUSTER_CONF_FILE):
- """Initializes this class.
-
- @type file_name: string
- @param file_name: Configuration file path
-
- """
- self._file_name = file_name
- self._last_inode = None
- self._last_mtime = None
- self._last_size = None
-
- self._config_data = None
- self._inst_ips_by_link = None
- self._ip_to_inst_by_link = None
- self._instances_ips = None
- self._mc_primary_ips = None
- self._nodes_primary_ips = None
-
- # we need a forced reload at class init time, to initialize _last_*
- self._Load(force=True)
-
- def _Load(self, force=False):
- """Loads (or reloads) the config file.
-
- @type force: boolean
- @param force: whether to force the reload without checking the mtime
- @rtype: boolean
- @return: boolean value that says whether we reloaded the configuration or
- not (because we decided it was already up-to-date)
-
- """
- try:
- cfg_stat = os.stat(self._file_name)
- except EnvironmentError, err:
- raise errors.ConfigurationError("Cannot stat config file %s: %s" %
- (self._file_name, err))
- inode = cfg_stat.st_ino
- mtime = cfg_stat.st_mtime
- size = cfg_stat.st_size
-
- if (force or inode != self._last_inode or
- mtime > self._last_mtime or
- size != self._last_size):
- self._last_inode = inode
- self._last_mtime = mtime
- self._last_size = size
- else:
- # Don't reload
- return False
-
- try:
- self._config_data = serializer.Load(utils.ReadFile(self._file_name))
- except EnvironmentError, err:
- raise errors.ConfigurationError("Cannot read config file %s: %s" %
- (self._file_name, err))
- except ValueError, err:
- raise errors.ConfigurationError("Cannot load config file %s: %s" %
- (self._file_name, err))
-
- self._ip_to_inst_by_link = {}
- self._instances_ips = []
- self._inst_ips_by_link = {}
- c_nparams = self._config_data["cluster"]["nicparams"][constants.PP_DEFAULT]
- for iname in self._config_data["instances"]:
- instance = self._config_data["instances"][iname]
- for nic in instance["nics"]:
- if "ip" in nic and nic["ip"]:
- params = objects.FillDict(c_nparams, nic["nicparams"])
- if not params["link"] in self._inst_ips_by_link:
- self._inst_ips_by_link[params["link"]] = []
- self._ip_to_inst_by_link[params["link"]] = {}
- self._ip_to_inst_by_link[params["link"]][nic["ip"]] = iname
- self._inst_ips_by_link[params["link"]].append(nic["ip"])
-
- self._nodes_primary_ips = []
- self._mc_primary_ips = []
- for node_name in self._config_data["nodes"]:
- node = self._config_data["nodes"][node_name]
- self._nodes_primary_ips.append(node["primary_ip"])
- if node["master_candidate"]:
- self._mc_primary_ips.append(node["primary_ip"])
-
- return True
-
- # Clients can request a reload of the config file, so we export our internal
- # _Load function as Reload.
- Reload = _Load
-
- def GetClusterName(self):
- return self._config_data["cluster"]["cluster_name"]
-
- def GetHostKey(self):
- return self._config_data["cluster"]["rsahostkeypub"]
-
- def GetMasterNode(self):
- return self._config_data["cluster"]["master_node"]
-
- def GetMasterIP(self):
- return self._config_data["cluster"]["master_ip"]
-
- def GetMasterNetdev(self):
- return self._config_data["cluster"]["master_netdev"]
-
- def GetMasterNetmask(self):
- return self._config_data["cluster"]["master_netmask"]
-
- def GetFileStorageDir(self):
- return self._config_data["cluster"]["file_storage_dir"]
-
- def GetSharedFileStorageDir(self):
- return self._config_data["cluster"]["shared_file_storage_dir"]
-
- def GetNodeList(self):
- return self._config_data["nodes"].keys()
-
- def GetConfigSerialNo(self):
- return self._config_data["serial_no"]
-
- def GetClusterSerialNo(self):
- return self._config_data["cluster"]["serial_no"]
-
- def GetDefaultNicParams(self):
- return self._config_data["cluster"]["nicparams"][constants.PP_DEFAULT]
-
- def GetDefaultNicLink(self):
- return self.GetDefaultNicParams()[constants.NIC_LINK]
-
- def GetNodeStatusFlags(self, node):
- """Get a node's status flags
-
- @type node: string
- @param node: node name
- @rtype: (bool, bool, bool)
- @return: (master_candidate, drained, offline) (or None if no such node)
-
- """
- if node not in self._config_data["nodes"]:
- return None
-
- master_candidate = self._config_data["nodes"][node]["master_candidate"]
- drained = self._config_data["nodes"][node]["drained"]
- offline = self._config_data["nodes"][node]["offline"]
- return master_candidate, drained, offline
-
- def GetInstanceByLinkIp(self, ip, link):
- """Get instance name from its link and ip address.
-
- @type ip: string
- @param ip: ip address
- @type link: string
- @param link: nic link
- @rtype: string
- @return: instance name
-
- """
- if not link:
- link = self.GetDefaultNicLink()
- if not link in self._ip_to_inst_by_link:
- return None
- if not ip in self._ip_to_inst_by_link[link]:
- return None
- return self._ip_to_inst_by_link[link][ip]
-
- def GetNodePrimaryIp(self, node):
- """Get a node's primary ip
-
- @type node: string
- @param node: node name
- @rtype: string, or None
- @return: node's primary ip, or None if no such node
-
- """
- if node not in self._config_data["nodes"]:
- return None
- return self._config_data["nodes"][node]["primary_ip"]
-
- def GetInstancePrimaryNode(self, instance):
- """Get an instance's primary node
-
- @type instance: string
- @param instance: instance name
- @rtype: string, or None
- @return: primary node, or None if no such instance
-
- """
- if instance not in self._config_data["instances"]:
- return None
- return self._config_data["instances"][instance]["primary_node"]
-
- def GetNodesPrimaryIps(self):
- return self._nodes_primary_ips
-
- def GetMasterCandidatesPrimaryIps(self):
- return self._mc_primary_ips
-
- def GetInstancesIps(self, link):
- """Get list of nic ips connected to a certain link.
-
- @type link: string
- @param link: nic link
- @rtype: list
- @return: list of ips connected to that link
-
- """
- if not link:
- link = self.GetDefaultNicLink()
-
- if link in self._inst_ips_by_link:
- return self._inst_ips_by_link[link]
- else:
- return []
-
-
class SimpleStore(object):
"""Interface to static cluster data.