X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/3953242fbd42fd1da09835c2447d4a10e9b2ec70..a91143f196b00a97a7d367a09f37a00a4a44c594:/lib/objects.py diff --git a/lib/objects.py b/lib/objects.py index b952520..d4c3fd3 100644 --- a/lib/objects.py +++ b/lib/objects.py @@ -48,6 +48,7 @@ __all__ = ["ConfigObject", "ConfigData", "NIC", "Disk", "Instance", _TIMESTAMPS = ["ctime", "mtime"] _UUID = ["uuid"] + def FillDict(defaults_dict, custom_dict, skip_keys=None): """Basic function to apply settings on top a default dict. @@ -865,6 +866,7 @@ class Cluster(TaggableObject): "modify_etc_hosts", "modify_ssh_setup", "maintain_node_health", + "uid_pool", ] + _TIMESTAMPS + _UUID def UpgradeConfig(self): @@ -915,6 +917,9 @@ class Cluster(TaggableObject): if self.maintain_node_health is None: self.maintain_node_health = False + if self.uid_pool is None: + self.uid_pool = [] + def ToDict(self): """Custom function for cluster. @@ -933,6 +938,30 @@ class Cluster(TaggableObject): obj.tcpudp_port_pool = set(obj.tcpudp_port_pool) return obj + def GetHVDefaults(self, hypervisor, os_name=None, skip_keys=None): + """Get the default hypervisor parameters for the cluster. + + @param hypervisor: the hypervisor name + @param os_name: if specified, we'll also update the defaults for this OS + @param skip_keys: if passed, list of keys not to use + @return: the defaults dict + + """ + if skip_keys is None: + skip_keys = [] + + fill_stack = [self.hvparams.get(hypervisor, {})] + if os_name is not None: + os_hvp = self.os_hvp.get(os_name, {}).get(hypervisor, {}) + fill_stack.append(os_hvp) + + ret_dict = {} + for o_dict in fill_stack: + ret_dict = FillDict(ret_dict, o_dict, skip_keys=skip_keys) + + return ret_dict + + def FillHV(self, instance, skip_globals=False): """Fill an instance's hvparams dict. @@ -951,18 +980,9 @@ class Cluster(TaggableObject): else: skip_keys = [] - # We fill the list from least to most important override - fill_stack = [ - self.hvparams.get(instance.hypervisor, {}), - self.os_hvp.get(instance.os, {}).get(instance.hypervisor, {}), - instance.hvparams, - ] - - ret_dict = {} - for o_dict in fill_stack: - ret_dict = FillDict(ret_dict, o_dict, skip_keys=skip_keys) - - return ret_dict + def_dict = self.GetHVDefaults(instance.hypervisor, instance.os, + skip_keys=skip_keys) + return FillDict(def_dict, instance.hvparams, skip_keys=skip_keys) def FillBE(self, instance): """Fill an instance's beparams dict. @@ -991,6 +1011,17 @@ class BlockDevStatus(ConfigObject): ] +class ImportExportStatus(ConfigObject): + """Config object representing the status of an import or export.""" + __slots__ = [ + "recent_output", + "listen_port", + "connected", + "exit_status", + "error_message", + ] + _TIMESTAMPS + + class ConfdRequest(ConfigObject): """Object holding a confd request.