Revision d63479b5

b/lib/objects.py
933 933
      obj.tcpudp_port_pool = set(obj.tcpudp_port_pool)
934 934
    return obj
935 935

  
936
  def GetHVDefaults(self, hypervisor, os_name=None, skip_keys=None):
937
    """Get the default hypervisor parameters for the cluster.
938

  
939
    @param hypervisor: the hypervisor name
940
    @param os_name: if specified, we'll also update the defaults for this OS
941
    @param skip_keys: if passed, list of keys not to use
942
    @return: the defaults dict
943

  
944
    """
945
    if skip_keys is None:
946
      skip_keys = []
947

  
948
    fill_stack = [self.hvparams.get(hypervisor, {})]
949
    if os_name is not None:
950
      os_hvp = self.os_hvp.get(os_name, {}).get(hypervisor, {})
951
      fill_stack.append(os_hvp)
952

  
953
    ret_dict = {}
954
    for o_dict in fill_stack:
955
      ret_dict = FillDict(ret_dict, o_dict, skip_keys=skip_keys)
956

  
957
    return ret_dict
958

  
959

  
936 960
  def FillHV(self, instance, skip_globals=False):
937 961
    """Fill an instance's hvparams dict.
938 962

  
......
951 975
    else:
952 976
      skip_keys = []
953 977

  
954
    # We fill the list from least to most important override
955
    fill_stack = [
956
      self.hvparams.get(instance.hypervisor, {}),
957
      self.os_hvp.get(instance.os, {}).get(instance.hypervisor, {}),
958
      instance.hvparams,
959
      ]
960

  
961
    ret_dict = {}
962
    for o_dict in fill_stack:
963
      ret_dict = FillDict(ret_dict, o_dict, skip_keys=skip_keys)
964

  
965
    return ret_dict
978
    def_dict = self.GetHVDefaults(instance.hypervisor, instance.os,
979
                                  skip_keys=skip_keys)
980
    return FillDict(def_dict, instance.hvparams, skip_keys=skip_keys)
966 981

  
967 982
  def FillBE(self, instance):
968 983
    """Fill an instance's beparams dict.
b/test/ganeti.objects_unittest.py
79 79
    self.fake_cl = objects.Cluster(hvparams=hvparams, os_hvp=os_hvp)
80 80
    self.fake_cl.UpgradeConfig()
81 81

  
82
  def testGetHVDefaults(self):
83
    cl = self.fake_cl
84
    self.failUnlessEqual(cl.GetHVDefaults(constants.HT_FAKE),
85
                         cl.hvparams[constants.HT_FAKE])
86
    self.failUnlessEqual(cl.GetHVDefaults(None), {})
87
    self.failUnlessEqual(cl.GetHVDefaults(constants.HT_XEN_PVM,
88
                                          os_name="lenny-image"),
89
                         cl.os_hvp["lenny-image"][constants.HT_XEN_PVM])
90

  
91

  
82 92
  def testFillHvFullMerge(self):
83 93
    inst_hvparams = {
84 94
      "blah": "blubb",

Also available in: Unified diff