'List snapshots for a storage volume.
@inherites :class:`NodeDriver.list_volume_snapshots`
:keyword ex_snapshot_ids: a list of snapshot ids to filter the
snapshots returned.
:type ex_snapshot_ids: ``list`` of ``str``
:keyword ex_filters: snapshot attribute and value pairs to filter
snapshots. Only the snapshot which matchs all
the pairs will be returned.
If the filter attribute need a json array value,
use ``list`` object, the driver will convert it.
:type ex_filters: ``dict``'

def list_volume_snapshots(self, volume, ex_snapshot_ids=[], ex_filters=None):

    params = {'Action': 'DescribeSnapshots', 'RegionId': self.region}
    if volume:
        params['DiskId'] = volume.id
    if (ex_snapshot_ids and isinstance(ex_snapshot_ids, list)):
        params['SnapshotIds'] = self._list_to_json_array(ex_snapshot_ids)
    if (ex_filters and isinstance(ex_filters, dict)):
        for key in ex_filters.keys():
            params[key] = ex_filters[key]
    def _parse_response(resp_body):
        snapshot_elements = findall(resp_body, 'Snapshots/Snapshot', namespace=self.namespace)
        snapshots = [self._to_snapshot(each) for each in snapshot_elements]
        return snapshots
    return self._request_multiple_pages(self.path, params, _parse_response)
