'Return True as soon as one assignment matches the filter.'

def _wait_for_node_assignment(self, res_name, vol_nr, nodenames, filter_props=None, timeout=90, check_vol_deployed=True):

    if (not filter_props):
        filter_props = self.empty_dict
    end_time = (time.time() + timeout)
    retry = 0
    while (time.time() < end_time):
        (res, assgs) = self.call_or_reconnect(self.odm.list_assignments, nodenames, [res_name], 0, filter_props, self.empty_list)
        self._check_result(res)
        if (len(assgs) > 0):
            for assg in assgs:
                vols = assg[3]
                for (v_nr, v_prop) in vols:
                    if (v_nr == vol_nr):
                        if (not check_vol_deployed):
                            return True
                        if (v_prop[CS_DEPLOYED] == dm_const.BOOL_TRUE):
                            return True
        retry += 1
        LOG.warning('Try    #%(try)d:    Volume    "%(res)s"/%(vol)d    not    yet    deployed    on    "%(host)s",    waiting.', {'try': retry, 'host': nodenames, 'res': res_name, 'vol': vol_nr})
        eventlet.sleep(min((0.5 + (retry / 5)), 2))
    return False
