MODE = constants.IALLOCATOR_MODE_NODE_EVAC
REQ_PARAMS = [
("instances", _STRING_LIST),
- ("evac_mode", ht.TElemOf(constants.IALLOCATOR_NEVAC_MODES)),
+ ("evac_mode", ht.TEvacMode),
]
REQ_RESULT = _NEVAC_RESULT
self._BuildInputData(req)
- def _ComputerClusterDataNodeInfo(self, node_list, cluster_info,
+ def _ComputeClusterDataNodeInfo(self, node_list, cluster_info,
hypervisor_name):
"""Prepare and execute node info call.
@return: the result of the node info RPC call
"""
- es_flags = rpc.GetExclusiveStorageForNodes(self.cfg, node_list)
- storage_units = utils.storage.GetStorageUnitsOfCluster(
+ storage_units_raw = utils.storage.GetStorageUnitsOfCluster(
self.cfg, include_spindles=True)
+ storage_units = rpc.PrepareStorageUnitsForNodes(self.cfg, storage_units_raw,
+ node_list)
hvspecs = [(hypervisor_name, cluster_info.hvparams[hypervisor_name])]
- return self.rpc.call_node_info(node_list, storage_units, hvspecs, es_flags)
+ return self.rpc.call_node_info(node_list, storage_units, hvspecs)
def _ComputeClusterData(self):
"""Compute the generic allocator input data.
node_whitelist = None
has_lvm = utils.storage.IsLvmEnabled(cluster_info.enabled_disk_templates)
- node_data = self._ComputerClusterDataNodeInfo(node_list, cluster_info,
- hypervisor_name)
+ node_data = self._ComputeClusterDataNodeInfo(node_list, cluster_info,
+ hypervisor_name)
node_iinfo = \
self.rpc.call_all_instances_info(node_list,
return value
@staticmethod
- def _ComputeStorageDataFromNodeInfo(node_info, node_name, has_lvm):
- """Extract storage data from node info (_not_ legacy node info).
+ def _ComputeStorageDataFromSpaceInfo(space_info, node_name, has_lvm):
+ """Extract storage data from node info.
- @type node_info: see result of the RPC call node info
- @param node_info: the result of the RPC call node info
+ @type space_info: see result of the RPC call node info
+ @param space_info: the storage reporting part of the result of the RPC call
+ node info
@type node_name: string
@param node_name: the node's name
@type has_lvm: boolean
free_spindles)
"""
- (_, space_info, _) = node_info
# TODO: replace this with proper storage reporting
if has_lvm:
lvm_vg_info = utils.storage.LookupSpaceInfoByStorageType(
nresult.Raise("Can't get data for node %s" % ninfo.name)
node_iinfo[nuuid].Raise("Can't get node instance info from node %s" %
ninfo.name)
- (_, _, (hv_info, )) = nresult.payload
+ (_, space_info, (hv_info, )) = nresult.payload
mem_free = self._GetAttributeFromHypervisorNodeData(hv_info, ninfo.name,
"memory_free")
(i_p_mem, i_p_up_mem, mem_free) = self._ComputeInstanceMemory(
i_list, node_iinfo, nuuid, mem_free)
(total_disk, free_disk, total_spindles, free_spindles) = \
- self._ComputeStorageDataFromNodeInfo(nresult.payload, ninfo.name,
- has_lvm)
+ self._ComputeStorageDataFromSpaceInfo(space_info, ninfo.name,
+ has_lvm)
# compute memory used by instances
pnr_dyn = {
"free_spindles": free_spindles,
"total_cpus": self._GetAttributeFromHypervisorNodeData(
hv_info, ninfo.name, "cpu_total"),
+ "reserved_cpus": self._GetAttributeFromHypervisorNodeData(
+ hv_info, ninfo.name, "cpu_dom0"),
"i_pri_memory": i_p_mem,
"i_pri_up_memory": i_p_up_mem,
}