'For operations that can return long lists of results, GCE will
require you to page through the result set, retrieving one
page of results for each query.  You are done paging when the
returned ``pageToken`` is ``None``.'

def list_volumes(self):

    with start_action(action_type=u'flocker:node:agents:gce:list_volumes') as action:
        disks = []
        page_token = None
        done = False
        while (not done):
            response = self._operations.list_disks(page_size=self._page_size, page_token=page_token)
            disks.extend(response.get('items', []))
            page_token = response.get('nextPageToken')
            done = (not page_token)
        def disk_in_cluster(disk):
            if disk['name'].startswith(_PREFIX):
                if ('description' in disk):
                    return (disk['description'] == self._disk_resource_description())
                else:
                    Message.log(message_type=u'flocker:node:agents:gce:list_volumes:suspicious_disk', log_level=u'ERROR', message=u'Disk    missing    description,    yet    name    appears    as    if    it    came    from    the    flocker    GCE    dataset    backend.', disk=disk)
                    return False
            return False
        ignored_volumes = []
        cluster_volumes = []
        for disk in disks:
            if disk_in_cluster(disk):
                cluster_volumes.append(BlockDeviceVolume(blockdevice_id=unicode(disk['name']), size=int(GiB(int(disk['sizeGb'])).to_Byte()), attached_to=_extract_attached_to(disk), dataset_id=_blockdevice_id_to_dataset_id(disk['name'])))
            else:
                ignored_volumes.append({'name': disk['name'], 'description': disk.get('description')})
        Message.log(message_type=u'flocker:node:agents:gce:list_volumes:ignored', ignored_volumes=ignored_volumes)
        action.add_success_fields(cluster_volumes=list(({'blockdevice_id': v.blockdevice_id, 'size': v.size, 'attached_to': v.attached_to, 'dataset_id': unicode(v.dataset_id)} for v in cluster_volumes)))
        return cluster_volumes
