'Return a list of volumes for a zone or all.
Will return list from provided zone, or from the default zone unless
given the value of \'all\'.
:keyword  ex_zone: The zone to return volumes from.
:type     ex_zone: ``str`` or :class:`GCEZone` or
:class:`NodeLocation` or ``None``
:return: A list of volume objects.
:rtype: ``list`` of :class:`StorageVolume`'

def list_volumes(self, ex_zone=None):

    list_volumes = []
    zone = self._set_zone(ex_zone)
    if (zone is None):
        request = '/aggregated/disks'
    else:
        request = ('/zones/%s/disks' % zone.name)
    response = self.connection.request(request, method='GET').object
    if ('items' in response):
        if (zone is None):
            for v in response['items'].values():
                zone_volumes = [self._to_storage_volume(d) for d in v.get('disks', [])]
                list_volumes.extend(zone_volumes)
        else:
            list_volumes = [self._to_storage_volume(d) for d in response['items']]
    return list_volumes
