Revision 5a13489b lib/cmdlib/common.py

b/lib/cmdlib/common.py
544 544
  @see: L{ComputeIPolicySpecViolation}
545 545

  
546 546
  """
547
  ret = []
547 548
  be_full = cfg.GetClusterInfo().FillBE(instance)
548 549
  mem_size = be_full[constants.BE_MAXMEM]
549 550
  cpu_count = be_full[constants.BE_VCPUS]
550
  spindle_use = be_full[constants.BE_SPINDLE_USE]
551
  es_flags = rpc.GetExclusiveStorageForNodeNames(cfg, instance.all_nodes)
552
  if any(es_flags.values()):
553
    # With exclusive storage use the actual spindles
554
    try:
555
      spindle_use = sum([disk.spindles for disk in instance.disks])
556
    except TypeError:
557
      ret.append("Number of spindles not configured for disks of instance %s"
558
                 " while exclusive storage is enabled, try running gnt-cluster"
559
                 " repair-disk-sizes" % instance.name)
560
      # _ComputeMinMaxSpec ignores 'None's
561
      spindle_use = None
562
  else:
563
    spindle_use = be_full[constants.BE_SPINDLE_USE]
551 564
  disk_count = len(instance.disks)
552 565
  disk_sizes = [disk.size for disk in instance.disks]
553 566
  nic_count = len(instance.nics)
554 567
  disk_template = instance.disk_template
555 568

  
556
  return _compute_fn(ipolicy, mem_size, cpu_count, disk_count, nic_count,
557
                     disk_sizes, spindle_use, disk_template)
569
  return ret + _compute_fn(ipolicy, mem_size, cpu_count, disk_count, nic_count,
570
                           disk_sizes, spindle_use, disk_template)
558 571

  
559 572

  
560 573
def _ComputeViolatingInstances(ipolicy, instances, cfg):

Also available in: Unified diff