'Fetches and returns a volume
:param  ex_href: The full href (url) of the volume.
:type   ex_href: ``str``
:param  ex_datacenter_id: The ID of the parent
datacenter for the volume.
:type   ex_datacenter_id: ``str``
:param  ex_volume_id: The ID of the volume.
:type   ex_volume_id: ``str``
:return:    Instance of class ``StorageVolume``
:rtype:     :class:`StorageVolume`'

def ex_describe_volume(self, ex_href=None, ex_datacenter_id=None, ex_volume_id=None):

    use_full_url = True
    if (ex_href is None):
        if ((ex_datacenter_id is None) or (ex_volume_id is None)):
            raise ValueError('IDs    for    the    data    center    and    volume    are    required.')
        else:
            use_full_url = False
            ex_href = 'datacenters/{datacenter_id}/volumes/{volume_id}'.format(datacenter_id=ex_datacenter_id, volume_id=ex_volume_id)
    response = self.connection.request(action=ex_href, method='GET', params={'depth': 3}, with_full_url=use_full_url)
    return self._to_volume(response.object)
