'Get objects after filter
:param filter_classes: filters that will be used to filter the
objects
:param objs: objects that will be filtered
:param filter_properties: client filter properties
:param index: This value needs to be increased in the caller
function of get_filtered_objects when handling
each resource.'

def get_filtered_objects(self, filter_classes, objs, filter_properties, index=0):

    list_objs = list(objs)
    LOG.debug('Starting    with    %d    host(s)', len(list_objs))
    part_filter_results = []
    full_filter_results = []
    for filter_cls in filter_classes:
        cls_name = filter_cls.__name__
        start_count = len(list_objs)
        filter_class = filter_cls()
        if filter_class.run_filter_for_index(index):
            objs = filter_class.filter_all(list_objs, filter_properties)
            if (objs is None):
                LOG.info('Filter    %s    returned    0    hosts', cls_name)
                full_filter_results.append((cls_name, None))
                list_objs = None
                break
            list_objs = list(objs)
            end_count = len(list_objs)
            part_filter_results.append((cls_name, start_count, end_count))
            remaining = [getattr(obj, 'host', obj) for obj in list_objs]
            full_filter_results.append((cls_name, remaining))
            LOG.debug('Filter    %(cls_name)s    returned    %(obj_len)d    host(s)', {'cls_name': cls_name, 'obj_len': len(list_objs)})
    if (not list_objs):
        self._log_filtration(full_filter_results, part_filter_results, filter_properties)
    return list_objs
