docs: def _determineVolumeSize(self, source_type, source_uuid):
          """
          Determine the minimum size the volume needs to be for the source.
          Returns the size in GiB.
          """
          nova = self.novaclient
          if source_type == 'image':
              # The size returned for an image is in bytes. Round up to the next
              # integer GiB.
              image = nova.images.get(source_uuid)
              if hasattr(image, 'OS-EXT-IMG-SIZE:size'):
                  size = getattr(image, 'OS-EXT-IMG-SIZE:size')
                  size_gb = int(math.ceil(size / 1024.0**3))
                  return size_gb
          elif source_type == 'volume':
              # Volumes are easy because they are already in GiB.
              volume = nova.volumes.get(source_uuid)
              return volume.size
          elif source_type == 'snapshot':
              snap = nova.volume_snapshots.get(source_uuid)
              return snap.size
          else:
              unknown_source = ("The source type '%s' for UUID '%s' is"
                                " unknown" % (source_type, source_uuid))
              raise ValueError(unknown_source)