'Create volume from snapshot.'

def create_volume_from_snapshot(self, volume, snapshot):

    LOG.debug('enter:    create_volume_from_snapshot:    create    %(vol)s    from    %(snap)s.', {'vol': volume['name'], 'snap': snapshot['name']})
    if (volume['size'] != snapshot['volume_size']):
        msg = _('create_volume_from_snapshot:    Volume    size    is    different    from    snapshot    based    volume.')
        LOG.error(msg)
        raise exception.VolumeDriverException(message=msg)
    status = snapshot['status']
    if (status != 'available'):
        msg = (_('create_volume_from_snapshot:    Snapshot    status    must    be    "available"    for    creating    volume.    The    invalid    status    is:    %s.') % status)
        raise exception.InvalidSnapshot(msg)
    self._create_and_copy_vdisk_data(snapshot['name'], snapshot['id'], volume['name'], volume['id'])
    LOG.debug('leave:    create_volume_from_snapshot:    create    %(vol)s    from    %(snap)s.', {'vol': volume['name'], 'snap': snapshot['name']})
