'Search devices by parameters.
:param search_values: a dictionary with search values to filter
devices, supported parameters are id,
region, zone, ip, port, replication_ip,
replication_port, device, weight, meta
:returns: list of device dicts'

def search_devs(self, search_values):

    matched_devs = []
    for dev in self.devs:
        if (not dev):
            continue
        matched = True
        for key in ('id', 'region', 'zone', 'ip', 'port', 'replication_ip', 'replication_port', 'device', 'weight', 'meta'):
            if (key in search_values):
                value = search_values.get(key)
                if (value is not None):
                    if (key == 'meta'):
                        if (value not in dev.get(key)):
                            matched = False
                    elif ((key == 'ip') or (key == 'replication_ip')):
                        cdev = ''
                        try:
                            cdev = validate_and_normalize_address(dev.get(key, ''))
                        except ValueError:
                            pass
                        if (cdev != value):
                            matched = False
                    elif (dev.get(key) != value):
                        matched = False
        if matched:
            matched_devs.append(dev)
    return matched_devs
