Revision a1cef11c lib/cmdlib.py
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