From 3df435427de850427aeba1907827d5454f6010f0 Mon Sep 17 00:00:00 2001 From: Guido Trotter <ultrotter@google.com> Date: Mon, 6 Sep 2010 14:28:40 +0100 Subject: [PATCH] Add a 'nodegroups' slot to ConfigData Also: - reformat the __slots__ declaration of ConfigData - call UpgradeConfig on each node groups to handle future upgrades - add nodegroups special case in {To,From}Dict - add nodegroups to _AllUUIDObjects Signed-off-by: Guido Trotter <ultrotter@google.com> Reviewed-by: Iustin Pop <iustin@google.com> --- lib/config.py | 1 + lib/objects.py | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/config.py b/lib/config.py index cda944168..9c1a5b4b5 100644 --- a/lib/config.py +++ b/lib/config.py @@ -1221,6 +1221,7 @@ class ConfigWriter: """ return (self._config_data.instances.values() + self._config_data.nodes.values() + + self._config_data.nodegroups.values() + [self._config_data.cluster]) def _OpenConfig(self): diff --git a/lib/objects.py b/lib/objects.py index 04ad41565..9cbbbee41 100644 --- a/lib/objects.py +++ b/lib/objects.py @@ -316,8 +316,14 @@ class TaggableObject(ConfigObject): class ConfigData(ConfigObject): """Top-level config object.""" - __slots__ = (["version", "cluster", "nodes", "instances", "serial_no"] + - _TIMESTAMPS) + __slots__ = [ + "version", + "cluster", + "nodes", + "nodegroups", + "instances", + "serial_no", + ] + _TIMESTAMPS def ToDict(self): """Custom function for top-level config data. @@ -328,7 +334,7 @@ class ConfigData(ConfigObject): """ mydict = super(ConfigData, self).ToDict() mydict["cluster"] = mydict["cluster"].ToDict() - for key in "nodes", "instances": + for key in "nodes", "instances", "nodegroups": mydict[key] = self._ContainerToDicts(mydict[key]) return mydict @@ -342,6 +348,7 @@ class ConfigData(ConfigObject): obj.cluster = Cluster.FromDict(obj.cluster) obj.nodes = cls._ContainerFromDicts(obj.nodes, dict, Node) obj.instances = cls._ContainerFromDicts(obj.instances, dict, Instance) + obj.nodegroups = cls._ContainerFromDicts(obj.nodegroups, dict, NodeGroup) return obj def HasAnyDiskOfType(self, dev_type): @@ -368,6 +375,10 @@ class ConfigData(ConfigObject): node.UpgradeConfig() for instance in self.instances.values(): instance.UpgradeConfig() + if self.nodegroups is None: + self.nodegroups = {} + for nodegroup in self.nodegroups.values(): + nodegroup.UpgradeConfig() if self.cluster.drbd_usermode_helper is None: # To decide if we set an helper let's check if at least one instance has # a DRBD disk. This does not cover all the possible scenarios but it -- GitLab