Revision ba147ff8 lib/cmdlib.py

b/lib/cmdlib.py
9917 9917

  
9918 9918
    nodenames = [pnode.name] + self.secondaries
9919 9919

  
9920
    # Verify instance specs
9921
    spindle_use = self.be_full.get(constants.BE_SPINDLE_USE, None)
9922
    ispec = {
9923
      constants.ISPEC_MEM_SIZE: self.be_full.get(constants.BE_MAXMEM, None),
9924
      constants.ISPEC_CPU_COUNT: self.be_full.get(constants.BE_VCPUS, None),
9925
      constants.ISPEC_DISK_COUNT: len(self.disks),
9926
      constants.ISPEC_DISK_SIZE: [disk["size"] for disk in self.disks],
9927
      constants.ISPEC_NIC_COUNT: len(self.nics),
9928
      constants.ISPEC_SPINDLE_USE: spindle_use,
9929
      }
9930

  
9931
    group_info = self.cfg.GetNodeGroup(pnode.group)
9932
    ipolicy = _CalculateGroupIPolicy(cluster, group_info)
9933
    res = _ComputeIPolicyInstanceSpecViolation(ipolicy, ispec)
9934
    if not self.op.ignore_ipolicy and res:
9935
      raise errors.OpPrereqError(("Instance allocation to group %s violates"
9936
                                  " policy: %s") % (pnode.group,
9937
                                                    utils.CommaJoin(res)),
9938
                                  errors.ECODE_INVAL)
9939

  
9940 9920
    if not self.adopt_disks:
9941 9921
      if self.op.disk_template == constants.DT_RBD:
9942 9922
        # _CheckRADOSFreeSpace() is just a placeholder.
......
10018 9998
        dsk[constants.IDISK_SIZE] = \
10019 9999
          int(float(node_disks[dsk[constants.IDISK_ADOPT]]))
10020 10000

  
10001
    # Verify instance specs
10002
    spindle_use = self.be_full.get(constants.BE_SPINDLE_USE, None)
10003
    ispec = {
10004
      constants.ISPEC_MEM_SIZE: self.be_full.get(constants.BE_MAXMEM, None),
10005
      constants.ISPEC_CPU_COUNT: self.be_full.get(constants.BE_VCPUS, None),
10006
      constants.ISPEC_DISK_COUNT: len(self.disks),
10007
      constants.ISPEC_DISK_SIZE: [disk[constants.IDISK_SIZE]
10008
                                  for disk in self.disks],
10009
      constants.ISPEC_NIC_COUNT: len(self.nics),
10010
      constants.ISPEC_SPINDLE_USE: spindle_use,
10011
      }
10012

  
10013
    group_info = self.cfg.GetNodeGroup(pnode.group)
10014
    ipolicy = _CalculateGroupIPolicy(cluster, group_info)
10015
    res = _ComputeIPolicyInstanceSpecViolation(ipolicy, ispec)
10016
    if not self.op.ignore_ipolicy and res:
10017
      raise errors.OpPrereqError(("Instance allocation to group %s violates"
10018
                                  " policy: %s") % (pnode.group,
10019
                                                    utils.CommaJoin(res)),
10020
                                  errors.ECODE_INVAL)
10021

  
10021 10022
    _CheckHVParams(self, nodenames, self.op.hypervisor, self.op.hvparams)
10022 10023

  
10023 10024
    _CheckNodeHasOS(self, pnode.name, self.op.os_type, self.op.force_variant)

Also available in: Unified diff