Revision 4e7f986e lib/cmdlib/cluster.py

b/lib/cmdlib/cluster.py
941 941
      all_instances = self.cfg.GetAllInstancesInfo().values()
942 942
      violations = set()
943 943
      for group in self.cfg.GetAllNodeGroupsInfo().values():
944
        instances = frozenset([inst for inst in all_instances
945
                               if compat.any(nuuid in group.members
946
                                             for nuuid in inst.all_nodes)])
944
        instances = frozenset(
945
          [inst for inst in all_instances
946
           if compat.any(nuuid in group.members
947
             for nuuid in self.cfg.GetInstanceNodes(inst))])
947 948
        new_ipolicy = objects.FillIPolicy(self.new_ipolicy, group.ipolicy)
948 949
        ipol = masterd.instance.CalculateGroupIPolicy(cluster, group)
949 950
        new = ComputeNewInstanceViolations(ipol, new_ipolicy, instances,
......
2006 2007

  
2007 2008
    for inst in self.my_inst_info.values():
2008 2009
      if inst.disk_template in constants.DTS_INT_MIRROR:
2009
        for nuuid in inst.all_nodes:
2010
        inst_nodes = self.cfg.GetInstanceNodes(inst)
2011
        for nuuid in inst_nodes:
2010 2012
          if self.all_node_info[nuuid].group != self.group_uuid:
2011 2013
            extra_lv_nodes.add(nuuid)
2012 2014

  
......
2360 2362
                  utils.CommaJoin(secondary_nodes),
2361 2363
                  code=self.ETYPE_WARNING)
2362 2364

  
2363
    es_flags = rpc.GetExclusiveStorageForNodes(self.cfg, instance.all_nodes)
2365
    inst_nodes = self.cfg.GetInstanceNodes(instance)
2366
    es_flags = rpc.GetExclusiveStorageForNodes(self.cfg, inst_nodes)
2364 2367
    if any(es_flags.values()):
2365 2368
      if instance.disk_template not in constants.DTS_EXCL_STORAGE:
2366 2369
        # Disk template not compatible with exclusive_storage: no instance
......
2381 2384
                      " gnt-cluster repair-disk-sizes", idx)
2382 2385

  
2383 2386
    if instance.disk_template in constants.DTS_INT_MIRROR:
2384
      instance_nodes = utils.NiceSort(instance.all_nodes)
2387
      instance_nodes = utils.NiceSort(inst_nodes)
2385 2388
      instance_groups = {}
2386 2389

  
2387 2390
      for node_uuid in instance_nodes:
......
2418 2421
                  instance.name, "instance has offline secondary node(s) %s",
2419 2422
                  utils.CommaJoin(self.cfg.GetNodeNames(inst_nodes_offline)))
2420 2423
    # ... or ghost/non-vm_capable nodes
2421
    for node_uuid in instance.all_nodes:
2424
    for node_uuid in inst_nodes:
2422 2425
      self._ErrorIf(node_image[node_uuid].ghost, constants.CV_EINSTANCEBADNODE,
2423 2426
                    instance.name, "instance lives on ghost node %s",
2424 2427
                    self.cfg.GetNodeName(node_uuid))
......
3118 3121
      instdisk[inst_uuid] = {}
3119 3122

  
3120 3123
    assert compat.all(len(statuses) == len(instanceinfo[inst].disks) and
3121
                      len(nuuids) <= len(instanceinfo[inst].all_nodes) and
3124
                      len(nuuids) <= len(
3125
                        self.cfg.GetInstanceNodes(instanceinfo[inst])) and
3122 3126
                      compat.all(isinstance(s, (tuple, list)) and
3123 3127
                                 len(s) == 2 for s in statuses)
3124 3128
                      for inst, nuuids in instdisk.items()
......
3315 3319
      if instance.admin_state == constants.ADMINST_OFFLINE:
3316 3320
        i_offline += 1
3317 3321

  
3318
      for nuuid in instance.all_nodes:
3322
      inst_nodes = self.cfg.GetInstanceNodes(instance)
3323
      for nuuid in inst_nodes:
3319 3324
        if nuuid not in node_image:
3320 3325
          gnode = self.NodeImage(uuid=nuuid)
3321 3326
          gnode.ghost = (nuuid not in self.all_node_info)

Also available in: Unified diff