from ganeti import rpc
from ganeti import objects
from ganeti import serializer
-from ganeti import ssconf
_config_lock = locking.SharedLock()
-def ValidateConfig():
- sstore = ssconf.SimpleStore()
-
- if sstore.GetConfigVersion() != constants.CONFIG_VERSION:
+def _ValidateConfig(data):
+ if data.version != constants.CONFIG_VERSION:
raise errors.ConfigurationError("Cluster configuration version"
" mismatch, got %s instead of %s" %
- (sstore.GetConfigVersion(),
+ (data.version,
constants.CONFIG_VERSION))
del self._temporary_drbds[key]
@locking.ssynchronized(_config_lock, shared=1)
+ def GetConfigVersion(self):
+ """Get the configuration version.
+
+ @return: Config version
+
+ """
+ return self._config_data.version
+
+ @locking.ssynchronized(_config_lock, shared=1)
+ def GetClusterName(self):
+ """Get cluster name.
+
+ @return: Cluster name
+
+ """
+ self._OpenConfig()
+ return self._config_data.cluster.cluster_name
+
+ @locking.ssynchronized(_config_lock, shared=1)
+ def GetMasterNode(self):
+ """Get the hostname of the master node for this cluster.
+
+ @return: Master hostname
+
+ """
+ self._OpenConfig()
+ return self._config_data.cluster.master_node
+
+ @locking.ssynchronized(_config_lock, shared=1)
+ def GetMasterIP(self):
+ """Get the IP of the master node for this cluster.
+
+ @return: Master IP
+
+ """
+ self._OpenConfig()
+ return self._config_data.cluster.master_ip
+
+ @locking.ssynchronized(_config_lock, shared=1)
+ def GetMasterNetdev(self):
+ """Get the master network device for this cluster.
+
+ """
+ self._OpenConfig()
+ return self._config_data.cluster.master_netdev
+
+ @locking.ssynchronized(_config_lock, shared=1)
+ def GetFileStorageDir(self):
+ """Get the file storage dir for this cluster.
+
+ """
+ self._OpenConfig()
+ return self._config_data.cluster.file_storage_dir
+
+ @locking.ssynchronized(_config_lock, shared=1)
+ def GetHypervisorType(self):
+ """Get the hypervisor type for this cluster.
+
+ """
+ self._OpenConfig()
+ return self._config_data.cluster.hypervisor
+
+ @locking.ssynchronized(_config_lock, shared=1)
def GetHostKey(self):
"""Return the rsa hostkey from the config.
for node in self._UnlockedGetNodeList()])
return my_dict
- @locking.ssynchronized(_config_lock, shared=1)
- def DumpConfig(self):
- """Return the entire configuration of the cluster.
- """
- self._OpenConfig()
- return self._config_data
-
def _BumpSerialNo(self):
"""Bump up the serial number of the config.
# data is current, so skip loading of config file
return
- # Make sure the configuration has the right version
- ValidateConfig()
-
f = open(self._cfg_file, 'r')
try:
try:
raise errors.ConfigurationError(err)
finally:
f.close()
+
+ # Make sure the configuration has the right version
+ _ValidateConfig(data)
+
if (not hasattr(data, 'cluster') or
not hasattr(data.cluster, 'rsahostkeypub')):
raise errors.ConfigurationError("Incomplete configuration"
self._DistributeConfig()
@locking.ssynchronized(_config_lock)
- def InitConfig(self, cluster_config, master_node_config):
+ def InitConfig(self, version, cluster_config, master_node_config):
"""Create the initial cluster configuration.
It will contain the current node, which will also be the master
node, and no instances.
+ @type version: int
+ @param version: Configuration version
@type cluster_config: objects.Cluster
@param cluster_config: Cluster configuration
@type master_node_config: objects.Node
master_node_config.name: master_node_config,
}
- self._config_data = objects.ConfigData(cluster=cluster_config,
+ self._config_data = objects.ConfigData(version=version,
+ cluster=cluster_config,
nodes=nodes,
instances={},
serial_no=1)