X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/e69d05fdff4cab460a92a482de58e00523d44c58..71c1af5860c74a6de4900faae728dc6320a1042c:/lib/objects.py diff --git a/lib/objects.py b/lib/objects.py index 2af22d0..6c74876 100644 --- a/lib/objects.py +++ b/lib/objects.py @@ -29,6 +29,7 @@ pass to and from external parties. import ConfigParser import re +import copy from cStringIO import StringIO from ganeti import errors @@ -504,22 +505,13 @@ class Instance(TaggableObject): "primary_node", "os", "hypervisor", + "hvparams", + "beparams", "status", - "memory", - "vcpus", "nics", "disks", "disk_template", "network_port", - "kernel_path", - "initrd_path", - "hvm_boot_order", - "hvm_acpi", - "hvm_pae", - "hvm_cdrom_image_path", - "hvm_nic_type", - "hvm_disk_type", - "vnc_bind_address", "serial_no", ] @@ -649,7 +641,7 @@ class OS(ConfigObject): "name", "path", "status", - "api_version", + "api_versions", "create_script", "export_script", "import_script", @@ -696,13 +688,15 @@ class Cluster(TaggableObject): "mac_prefix", "volume_group_name", "default_bridge", - "hypervisor", + "default_hypervisor", "master_node", "master_ip", "master_netdev", "cluster_name", "file_storage_dir", "enabled_hypervisors", + "hvparams", + "beparams", ] def ToDict(self): @@ -723,6 +717,48 @@ class Cluster(TaggableObject): obj.tcpudp_port_pool = set(obj.tcpudp_port_pool) return obj + @staticmethod + def FillDict(defaults_dict, custom_dict): + """Basic function to apply settings on top a default dict. + + @type defaults_dict: dict + @param defaults_dict: dictionary holding the default values + @type custom_dict: dict + @param custom_dict: dictionary holding customized value + @rtype: dict + @return: dict with the 'full' values + + """ + ret_dict = copy.deepcopy(defaults_dict) + ret_dict.update(custom_dict) + return ret_dict + + def FillHV(self, instance): + """Fill an instance's hvparams dict. + + @type instance: object + @param instance: the instance parameter to fill + @rtype: dict + @return: a copy of the instance's hvparams with missing keys filled from + the cluster defaults + + """ + return self.FillDict(self.hvparams.get(instance.hypervisor, {}), + instance.hvparams) + + def FillBE(self, instance): + """Fill an instance's beparams dict. + + @type instance: object + @param instance: the instance parameter to fill + @rtype: dict + @return: a copy of the instance's beparams with missing keys filled from + the cluster defaults + + """ + return self.FillDict(self.beparams.get(constants.BEGR_DEFAULT, {}), + instance.beparams) + class SerializableConfigParser(ConfigParser.SafeConfigParser): """Simple wrapper over ConfigParse that allows serialization.