'Get a tuple of compute node and service information.
Returns a tuple (compute_nodes, services) where:
- compute_nodes is cell-uuid keyed dict of compute node lists
- services is a dict of services indexed by hostname'

def _get_computes_for_cells(self, context, cells, compute_uuids=None):

    compute_nodes = collections.defaultdict(list)
    services = {}
    for cell in cells:
        LOG.debug('Getting    compute    nodes    and    services    for    cell    %(cell)s', {'cell': cell.identity})
        with context_module.target_cell(context, cell) as cctxt:
            if (compute_uuids is None):
                compute_nodes[cell.uuid].extend(objects.ComputeNodeList.get_all(cctxt))
            else:
                compute_nodes[cell.uuid].extend(objects.ComputeNodeList.get_all_by_uuids(cctxt, compute_uuids))
            services.update({service.host: service for service in objects.ServiceList.get_by_binary(cctxt, 'nova-compute', include_disabled=True)})
    return (compute_nodes, services)
