Revision 1325da74 lib/cmdlib.py
b/lib/cmdlib.py | ||
---|---|---|
6374 | 6374 |
"version": 1, |
6375 | 6375 |
"cluster_name": cfg.GetClusterName(), |
6376 | 6376 |
"cluster_tags": list(cluster_info.GetTags()), |
6377 |
"enable_hypervisors": list(cluster_info.enabled_hypervisors), |
|
6377 |
"enabled_hypervisors": list(cluster_info.enabled_hypervisors),
|
|
6378 | 6378 |
# we don't have job IDs |
6379 | 6379 |
} |
6380 | 6380 |
iinfo = cfg.GetAllInstancesInfo().values() |
... | ... | |
6393 | 6393 |
hypervisor_name) |
6394 | 6394 |
node_iinfo = self.lu.rpc.call_all_instances_info(node_list, |
6395 | 6395 |
cluster_info.enabled_hypervisors) |
6396 |
for nname in node_list: |
|
6396 |
for nname, nresult in node_data.items(): |
|
6397 |
# first fill in static (config-based) values |
|
6397 | 6398 |
ninfo = cfg.GetNodeInfo(nname) |
6398 |
node_data[nname].Raise() |
|
6399 |
if not isinstance(node_data[nname].data, dict): |
|
6400 |
raise errors.OpExecError("Can't get data for node %s" % nname) |
|
6401 |
remote_info = node_data[nname].data |
|
6402 |
for attr in ['memory_total', 'memory_free', 'memory_dom0', |
|
6403 |
'vg_size', 'vg_free', 'cpu_total']: |
|
6404 |
if attr not in remote_info: |
|
6405 |
raise errors.OpExecError("Node '%s' didn't return attribute '%s'" % |
|
6406 |
(nname, attr)) |
|
6407 |
try: |
|
6408 |
remote_info[attr] = int(remote_info[attr]) |
|
6409 |
except ValueError, err: |
|
6410 |
raise errors.OpExecError("Node '%s' returned invalid value for '%s':" |
|
6411 |
" %s" % (nname, attr, str(err))) |
|
6412 |
# compute memory used by primary instances |
|
6413 |
i_p_mem = i_p_up_mem = 0 |
|
6414 |
for iinfo, beinfo in i_list: |
|
6415 |
if iinfo.primary_node == nname: |
|
6416 |
i_p_mem += beinfo[constants.BE_MEMORY] |
|
6417 |
if iinfo.name not in node_iinfo[nname]: |
|
6418 |
i_used_mem = 0 |
|
6419 |
else: |
|
6420 |
i_used_mem = int(node_iinfo[nname][iinfo.name]['memory']) |
|
6421 |
i_mem_diff = beinfo[constants.BE_MEMORY] - i_used_mem |
|
6422 |
remote_info['memory_free'] -= max(0, i_mem_diff) |
|
6423 |
|
|
6424 |
if iinfo.admin_up: |
|
6425 |
i_p_up_mem += beinfo[constants.BE_MEMORY] |
|
6426 |
|
|
6427 |
# compute memory used by instances |
|
6428 | 6399 |
pnr = { |
6429 | 6400 |
"tags": list(ninfo.GetTags()), |
6430 |
"total_memory": remote_info['memory_total'], |
|
6431 |
"reserved_memory": remote_info['memory_dom0'], |
|
6432 |
"free_memory": remote_info['memory_free'], |
|
6433 |
"i_pri_memory": i_p_mem, |
|
6434 |
"i_pri_up_memory": i_p_up_mem, |
|
6435 |
"total_disk": remote_info['vg_size'], |
|
6436 |
"free_disk": remote_info['vg_free'], |
|
6437 | 6401 |
"primary_ip": ninfo.primary_ip, |
6438 | 6402 |
"secondary_ip": ninfo.secondary_ip, |
6439 |
"total_cpus": remote_info['cpu_total'], |
|
6440 | 6403 |
"offline": ninfo.offline, |
6404 |
"master_candidate": ninfo.master_candidate, |
|
6441 | 6405 |
} |
6406 |
|
|
6407 |
if not ninfo.offline: |
|
6408 |
nresult.Raise() |
|
6409 |
if not isinstance(nresult.data, dict): |
|
6410 |
raise errors.OpExecError("Can't get data for node %s" % nname) |
|
6411 |
remote_info = nresult.data |
|
6412 |
for attr in ['memory_total', 'memory_free', 'memory_dom0', |
|
6413 |
'vg_size', 'vg_free', 'cpu_total']: |
|
6414 |
if attr not in remote_info: |
|
6415 |
raise errors.OpExecError("Node '%s' didn't return attribute" |
|
6416 |
" '%s'" % (nname, attr)) |
|
6417 |
try: |
|
6418 |
remote_info[attr] = int(remote_info[attr]) |
|
6419 |
except ValueError, err: |
|
6420 |
raise errors.OpExecError("Node '%s' returned invalid value" |
|
6421 |
" for '%s': %s" % (nname, attr, err)) |
|
6422 |
# compute memory used by primary instances |
|
6423 |
i_p_mem = i_p_up_mem = 0 |
|
6424 |
for iinfo, beinfo in i_list: |
|
6425 |
if iinfo.primary_node == nname: |
|
6426 |
i_p_mem += beinfo[constants.BE_MEMORY] |
|
6427 |
if iinfo.name not in node_iinfo[nname].data: |
|
6428 |
i_used_mem = 0 |
|
6429 |
else: |
|
6430 |
i_used_mem = int(node_iinfo[nname].data[iinfo.name]['memory']) |
|
6431 |
i_mem_diff = beinfo[constants.BE_MEMORY] - i_used_mem |
|
6432 |
remote_info['memory_free'] -= max(0, i_mem_diff) |
|
6433 |
|
|
6434 |
if iinfo.admin_up: |
|
6435 |
i_p_up_mem += beinfo[constants.BE_MEMORY] |
|
6436 |
|
|
6437 |
# compute memory used by instances |
|
6438 |
pnr_dyn = { |
|
6439 |
"total_memory": remote_info['memory_total'], |
|
6440 |
"reserved_memory": remote_info['memory_dom0'], |
|
6441 |
"free_memory": remote_info['memory_free'], |
|
6442 |
"total_disk": remote_info['vg_size'], |
|
6443 |
"free_disk": remote_info['vg_free'], |
|
6444 |
"total_cpus": remote_info['cpu_total'], |
|
6445 |
"i_pri_memory": i_p_mem, |
|
6446 |
"i_pri_up_memory": i_p_up_mem, |
|
6447 |
} |
|
6448 |
pnr.update(pnr_dyn) |
|
6449 |
|
|
6442 | 6450 |
node_results[nname] = pnr |
6443 | 6451 |
data["nodes"] = node_results |
6444 | 6452 |
|
... | ... | |
6449 | 6457 |
for n in iinfo.nics] |
6450 | 6458 |
pir = { |
6451 | 6459 |
"tags": list(iinfo.GetTags()), |
6452 |
"should_run": iinfo.admin_up,
|
|
6460 |
"admin_up": iinfo.admin_up,
|
|
6453 | 6461 |
"vcpus": beinfo[constants.BE_VCPUS], |
6454 | 6462 |
"memory": beinfo[constants.BE_MEMORY], |
6455 | 6463 |
"os": iinfo.os, |
6456 |
"nodes": list(iinfo.all_nodes),
|
|
6464 |
"nodes": [iinfo.primary_node] + list(iinfo.secondary_nodes),
|
|
6457 | 6465 |
"nics": nic_data, |
6458 |
"disks": [{"size": dsk.size, "mode": "w"} for dsk in iinfo.disks],
|
|
6466 |
"disks": [{"size": dsk.size, "mode": dsk.mode} for dsk in iinfo.disks],
|
|
6459 | 6467 |
"disk_template": iinfo.disk_template, |
6460 | 6468 |
"hypervisor": iinfo.hypervisor, |
6461 | 6469 |
} |
Also available in: Unified diff