Revision a1cef11c

b/doc/iallocator.rst
246 246
  or ``offline`` flags set. More details about these of node status
247 247
  flags is available in the manpage :manpage:`ganeti(7)`.
248 248

  
249
.. [*] Note that no run-time data is present for offline or drained
250
   nodes; this means the tags total_memory, reserved_memory,
251
   free_memory, total_disk, free_disk, total_cpus, i_pri_memory and
252
   i_pri_up memory will be absent
249
.. [*] Note that no run-time data is present for offline, drained or
250
   non-vm_capable nodes; this means the tags total_memory,
251
   reserved_memory, free_memory, total_disk, free_disk, total_cpus,
252
   i_pri_memory and i_pri_up memory will be absent
253 253

  
254 254

  
255 255
Response message
b/lib/cmdlib.py
1 1
#
2 2
#
3 3

  
4
# Copyright (C) 2006, 2007, 2008, 2009, 2010 Google Inc.
4
# Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Google Inc.
5 5
#
6 6
# This program is free software; you can redistribute it and/or modify
7 7
# it under the terms of the GNU General Public License as published by
......
10640 10640
      "enabled_hypervisors": list(cluster_info.enabled_hypervisors),
10641 10641
      # we don't have job IDs
10642 10642
      }
10643
    ninfo = cfg.GetAllNodesInfo()
10643 10644
    iinfo = cfg.GetAllInstancesInfo().values()
10644 10645
    i_list = [(inst, cluster_info.FillBE(inst)) for inst in iinfo]
10645 10646

  
10646 10647
    # node data
10647
    node_list = cfg.GetNodeList()
10648
    node_list = [n.name for n in ninfo.values() if n.vm_capable]
10648 10649

  
10649 10650
    if self.mode == constants.IALLOCATOR_MODE_ALLOC:
10650 10651
      hypervisor_name = self.hypervisor
......
10661 10662

  
10662 10663
    data["nodegroups"] = self._ComputeNodeGroupData(cfg)
10663 10664

  
10664
    data["nodes"] = self._ComputeNodeData(cfg, node_data, node_iinfo, i_list)
10665
    config_ndata = self._ComputeBasicNodeData(ninfo)
10666
    data["nodes"] = self._ComputeDynamicNodeData(ninfo, node_data, node_iinfo,
10667
                                                 i_list, config_ndata)
10668
    assert len(data["nodes"]) == len(ninfo), \
10669
        "Incomplete node data computed"
10665 10670

  
10666 10671
    data["instances"] = self._ComputeInstanceData(cluster_info, i_list)
10667 10672

  
......
10681 10686
    return ng
10682 10687

  
10683 10688
  @staticmethod
10684
  def _ComputeNodeData(cfg, node_data, node_iinfo, i_list):
10689
  def _ComputeBasicNodeData(node_cfg):
10685 10690
    """Compute global node data.
10686 10691

  
10692
    @rtype: dict
10693
    @returns: a dict of name: (node dict, node config)
10694

  
10687 10695
    """
10688 10696
    node_results = {}
10689
    for nname, nresult in node_data.items():
10690
      # first fill in static (config-based) values
10691
      ninfo = cfg.GetNodeInfo(nname)
10697
    for ninfo in node_cfg.values():
10698
      # fill in static (config-based) values
10692 10699
      pnr = {
10693 10700
        "tags": list(ninfo.GetTags()),
10694 10701
        "primary_ip": ninfo.primary_ip,
......
10701 10708
        "vm_capable": ninfo.vm_capable,
10702 10709
        }
10703 10710

  
10711
      node_results[ninfo.name] = pnr
10712

  
10713
    return node_results
10714

  
10715
  @staticmethod
10716
  def _ComputeDynamicNodeData(node_cfg, node_data, node_iinfo, i_list,
10717
                              node_results):
10718
    """Compute global node data.
10719

  
10720
    @param node_results: the basic node structures as filled from the config
10721

  
10722
    """
10723
    # make a copy of the current dict
10724
    node_results = dict(node_results)
10725
    for nname, nresult in node_data.items():
10726
      assert nname in node_results, "Missing basic data for node %s" % nname
10727
      ninfo = node_cfg[nname]
10728

  
10704 10729
      if not (ninfo.offline or ninfo.drained):
10705 10730
        nresult.Raise("Can't get data for node %s" % nname)
10706 10731
        node_iinfo[nname].Raise("Can't get node instance info from node %s" %
......
10742 10767
          "i_pri_memory": i_p_mem,
10743 10768
          "i_pri_up_memory": i_p_up_mem,
10744 10769
          }
10745
        pnr.update(pnr_dyn)
10770
        pnr_dyn.update(node_results[nname])
10746 10771

  
10747
      node_results[nname] = pnr
10772
      node_results[nname] = pnr_dyn
10748 10773

  
10749 10774
    return node_results
10750 10775

  

Also available in: Unified diff