def _numa_cells_support_network_metadata(host_topology, chosen_host_cells,
    network_metadata):
    """Determine whether the cells can accept the network requests.

    :param host_topology: The entire host topology, used to find non-chosen
        host cells.
    :param chosen_host_cells: List of NUMACells to extract possible network
        NUMA affinity from.
    :param network_metadata: The combined summary of physnets and tunneled
        networks required by this topology or None.

    :return: True if any NUMA affinity constraints for requested networks can
        be satisfied, else False
    """
    if not network_metadata:
        return True
    required_physnets = None
    if 'physnets' in network_metadata:
        required_physnets = set(network_metadata.physnets)
    required_tunnel = False
    if 'tunneled' in network_metadata:
        required_tunnel = network_metadata.tunneled
    if required_physnets:
        for host_cell in chosen_host_cells:
            if 'network_metadata' not in host_cell:
                continue
            required_physnets -= required_physnets.intersection(host_cell.
                network_metadata.physnets)
        for host_cell in host_topology.cells:
            if 'network_metadata' not in host_cell:
                continue
            if required_physnets.intersection(host_cell.network_metadata.
                physnets):
                return False
    if required_tunnel:
        for host_cell in chosen_host_cells:
            if 'network_metadata' not in host_cell:
                continue
            if host_cell.network_metadata.tunneled:
                return True
        for host_cell in host_topology.cells:
            if 'network_metadata' not in host_cell:
                continue
            if host_cell.network_metadata.tunneled:
                return False
    return True
