Revision f5eaa3c1

b/lib/cmdlib.py
3306 3306
    if self.op.drbd_helper:
3307 3307
      # checks given drbd helper on all nodes
3308 3308
      helpers = self.rpc.call_drbd_helper(node_list)
3309
      for node in node_list:
3310
        ninfo = self.cfg.GetNodeInfo(node)
3309
      for (node, ninfo) in self.cfg.GetMultiNodeInfo(node_list):
3311 3310
        if ninfo.offline:
3312 3311
          self.LogInfo("Not checking drbd helper on offline node %s", node)
3313 3312
          continue
......
3866 3865
    if self.op.command in self._SKIP_MASTER:
3867 3866
      assert self.master_node not in self.op.node_names
3868 3867

  
3869
    for node_name in self.op.node_names:
3870
      node = self.cfg.GetNodeInfo(node_name)
3871

  
3868
    for (node_name, node) in self.cfg.GetMultiNodeInfo(self.op.node_names):
3872 3869
      if node is None:
3873 3870
        raise errors.OpPrereqError("Node %s not found" % node_name,
3874 3871
                                   errors.ECODE_NOENT)
......
4616 4613
    if query.IQ_NODES in self.requested_data:
4617 4614
      node_names = set(itertools.chain(*map(operator.attrgetter("all_nodes"),
4618 4615
                                            instance_list)))
4619
      nodes = dict((name, lu.cfg.GetNodeInfo(name)) for name in node_names)
4616
      nodes = dict(lu.cfg.GetMultiNodeInfo(node_names))
4620 4617
      groups = dict((uuid, lu.cfg.GetNodeGroup(uuid))
4621 4618
                    for uuid in set(map(operator.attrgetter("group"),
4622 4619
                                        nodes.values())))
......
4796 4793

  
4797 4794
    self.changed_primary_ip = False
4798 4795

  
4799
    for existing_node_name in node_list:
4800
      existing_node = cfg.GetNodeInfo(existing_node_name)
4801

  
4796
    for existing_node_name, existing_node in cfg.GetMultiNodeInfo(node_list):
4802 4797
      if self.op.readd and node == existing_node_name:
4803 4798
        if existing_node.secondary_ip != secondary_ip:
4804 4799
          raise errors.OpPrereqError("Readded node doesn't have the same IP"
......
7429 7424
      # directly, or through an iallocator.
7430 7425

  
7431 7426
    self.all_nodes = [self.source_node, self.target_node]
7432
    self.nodes_ip = {
7433
      self.source_node: self.cfg.GetNodeInfo(self.source_node).secondary_ip,
7434
      self.target_node: self.cfg.GetNodeInfo(self.target_node).secondary_ip,
7435
      }
7427
    self.nodes_ip = dict((name, node.secondary_ip) for (name, node)
7428
                         in self.cfg.GetMultiNodeInfo(self.all_nodes))
7436 7429

  
7437 7430
    if self.failover:
7438 7431
      feedback_fn("Failover instance %s" % self.instance.name)
......
9396 9389
      instance.FindDisk(disk_idx)
9397 9390

  
9398 9391
    # Get secondary node IP addresses
9399
    self.node_secondary_ip = \
9400
      dict((node_name, self.cfg.GetNodeInfo(node_name).secondary_ip)
9401
           for node_name in touched_nodes)
9392
    self.node_secondary_ip = dict((name, node.secondary_ip) for (name, node)
9393
                                  in self.cfg.GetMultiNodeInfo(touched_nodes))
9402 9394

  
9403 9395
  def Exec(self, feedback_fn):
9404 9396
    """Execute disk replacement.
......
10377 10369

  
10378 10370
    cluster = self.cfg.GetClusterInfo()
10379 10371

  
10380
    for instance in self.wanted_instances:
10381
      pnode = self.cfg.GetNodeInfo(instance.primary_node)
10382

  
10372
    pri_nodes = self.cfg.GetMultiNodeInfo(i.primary_node
10373
                                          for i in self.wanted_instances)
10374
    for instance, (_, pnode) in zip(self.wanted_instances, pri_nodes):
10383 10375
      if self.op.static or pnode.offline:
10384 10376
        remote_state = None
10385 10377
        if pnode.offline:
b/lib/config.py
1448 1448
    return [node.name for node in all_nodes if not node.vm_capable]
1449 1449

  
1450 1450
  @locking.ssynchronized(_config_lock, shared=1)
1451
  def GetMultiNodeInfo(self, nodes):
1452
    """Get the configuration of multiple nodes.
1453

  
1454
    @param nodes: list of node names
1455
    @rtype: list
1456
    @return: list of tuples of (node, node_info), where node_info is
1457
        what would GetNodeInfo return for the node, in the original
1458
        order
1459

  
1460
    """
1461
    return [(name, self._UnlockedGetNodeInfo(name)) for name in nodes]
1462

  
1463
  @locking.ssynchronized(_config_lock, shared=1)
1451 1464
  def GetAllNodesInfo(self):
1452 1465
    """Get the configuration of all nodes.
1453 1466

  

Also available in: Unified diff