-# Copyright (C) 2006, 2007, 2008 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
#
# 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
- 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'])
+ 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"])
_VALID_KEYS = (
constants.SS_CLUSTER_NAME,
constants.SS_CLUSTER_TAGS,
constants.SS_FILE_STORAGE_DIR,
_VALID_KEYS = (
constants.SS_CLUSTER_NAME,
constants.SS_CLUSTER_TAGS,
constants.SS_FILE_STORAGE_DIR,
constants.SS_MASTER_CANDIDATES,
constants.SS_MASTER_CANDIDATES_IPS,
constants.SS_MASTER_IP,
constants.SS_MASTER_NETDEV,
constants.SS_MASTER_CANDIDATES,
constants.SS_MASTER_CANDIDATES_IPS,
constants.SS_MASTER_IP,
constants.SS_MASTER_NETDEV,
constants.SS_MASTER_NODE,
constants.SS_NODE_LIST,
constants.SS_NODE_PRIMARY_IPS,
constants.SS_NODE_SECONDARY_IPS,
constants.SS_OFFLINE_NODES,
constants.SS_ONLINE_NODES,
constants.SS_MASTER_NODE,
constants.SS_NODE_LIST,
constants.SS_NODE_PRIMARY_IPS,
constants.SS_NODE_SECONDARY_IPS,
constants.SS_OFFLINE_NODES,
constants.SS_ONLINE_NODES,
constants.SS_INSTANCE_LIST,
constants.SS_RELEASE_VERSION,
constants.SS_HYPERVISOR_LIST,
constants.SS_MAINTAIN_NODE_HEALTH,
constants.SS_UID_POOL,
constants.SS_INSTANCE_LIST,
constants.SS_RELEASE_VERSION,
constants.SS_HYPERVISOR_LIST,
constants.SS_MAINTAIN_NODE_HEALTH,
constants.SS_UID_POOL,
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 len(value) > self._MAX_SIZE:
raise errors.ConfigurationError("ssconf file %s above maximum size" %
name)
if len(value) > self._MAX_SIZE:
raise errors.ConfigurationError("ssconf file %s above maximum size" %
name)
- utils.WriteFile(self.KeyToFilename(name), data=value, mode=0444)
+ utils.WriteFile(self.KeyToFilename(name), data=value,
+ mode=constants.SS_FILE_PERMS)
+ def GetMasterNetmask(self):
+ """Get the 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 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)
+