not hasattr(data.cluster, 'rsahostkeypub')):
raise errors.ConfigurationError("Incomplete configuration"
" (missing cluster.rsahostkeypub)")
+
+ # Upgrade configuration if needed
+ data.UpgradeConfig()
+
self._config_data = data
# reset the last serial as -1 so that the next write will cause
# ssconf update
def __init__(self, **kwargs):
for k, v in kwargs.iteritems():
setattr(self, k, v)
- self.UpgradeConfig()
def __getattr__(self, name):
if name not in self.__slots__:
def UpgradeConfig(self):
"""Fill defaults for missing configuration values.
- This method will be called at object init time, and its implementation will
- be object dependent.
+ This method will be called at configuration load time, and its
+ implementation will be object dependent.
"""
pass
obj.instances = cls._ContainerFromDicts(obj.instances, dict, Instance)
return obj
+ def UpgradeConfig(self):
+ """Fill defaults for missing configuration values.
+
+ """
+ self.cluster.UpgradeConfig()
+ for node in self.nodes.values():
+ node.UpgradeConfig()
+ for instance in self.instances.values():
+ instance.UpgradeConfig()
+
class NIC(ConfigObject):
"""Config object representing a network card."""
all_errors.append("Disk access mode '%s' is invalid" % (self.mode, ))
return all_errors
+ def UpgradeConfig(self):
+ """Fill defaults for missing configuration values.
+
+ """
+ if self.children:
+ for child in self.children:
+ child.UpgradeConfig()
+ # add here config upgrade for this disk
+
class Instance(TaggableObject):
"""Config object representing an instance."""
obj.disks = cls._ContainerFromDicts(obj.disks, list, Disk)
return obj
+ def UpgradeConfig(self):
+ """Fill defaults for missing configuration values.
+
+ """
+ for nic in self.nics:
+ nic.UpgradeConfig()
+ for disk in self.disks:
+ disk.UpgradeConfig()
+
class OS(ConfigObject):
"""Config object representing an operating system."""