def revert_snapshot(name, vm_snapshot=None, cleanup=False, **kwargs):
    '''
    Revert snapshot to the previous from current (if available) or to the specific.

    :param name: domain name
    :param vm_snapshot: name of the snapshot to revert
    :param cleanup: Remove all newer than reverted snapshots. Values: True or False (default False).
    :param connection: libvirt connection URI, overriding defaults

        .. versionadded:: 2019.2.0
    :param username: username to connect with, overriding defaults

        .. versionadded:: 2019.2.0
    :param password: password to connect with, overriding defaults

        .. versionadded:: 2019.2.0

    .. versionadded:: 2016.3.0

    CLI Example:

    .. code-block:: bash

        salt '*' virt.revert <domain>
        salt '*' virt.revert <domain> <snapshot>
    '''
    ret = dict()
    conn = __get_conn(**kwargs)
    domain = _get_domain(conn, name)
    snapshots = domain.listAllSnapshots()

    _snapshots = list()
    for snap_obj in snapshots:
        _snapshots.append({'idx': _parse_snapshot_description(snap_obj, unix_time=True)['created'], 'ptr': snap_obj})
    snapshots = [w_ptr['ptr'] for w_ptr in sorted(_snapshots, key=lambda item: item['idx'], reverse=True)]
    del _snapshots

    if not snapshots:
        conn.close()
        raise CommandExecutionError('No snapshots found')
    elif len(snapshots) == 1:
        conn.close()
        raise CommandExecutionError('Cannot revert to itself: only one snapshot is available.')

    snap = None
    for p_snap in snapshots:
        if not vm_snapshot:
            if p_snap.isCurrent() and snapshots[snapshots.index(p_snap) + 1:]:
                snap = snapshots[snapshots.index(p_snap) + 1:][0]
                break
        elif p_snap.getName() == vm_snapshot:
            snap = p_snap
            break

    if not snap:
        conn.close()
        raise CommandExecutionError(
            snapshot and 'Snapshot "{0}" not found'.format(vm_snapshot) or 'No more previous snapshots available')
    elif snap.isCurrent():
        conn.close()
        raise CommandExecutionError('Cannot revert to the currently running snapshot.')

    domain.revertToSnapshot(snap)
    ret['reverted'] = snap.getName()

    if cleanup:
        delete = list()
        for p_snap in snapshots:
            if p_snap.getName() != snap.getName():
                delete.append(p_snap.getName())
                p_snap.delete()
            else:
                break
        ret['deleted'] = delete
    else:
        ret['deleted'] = 'N/A'

    conn.close()

    return ret
def revert_snapshot ( name , vm_snapshot = None , cleanup = False , ** kwargs ) : ret = dict ( ) conn = __get_conn ( ** kwargs ) domain = _get_domain ( conn , name ) snapshots = domain . listAllSnapshots ( ) _snapshots = list ( ) for snap_obj in snapshots : _snapshots . append ( { 'idx' : _parse_snapshot_description ( snap_obj , unix_time = True ) [ 'created' ] , 'ptr' : snap_obj } ) snapshots = [ w_ptr [ 'ptr' ] for w_ptr in sorted ( _snapshots , key = lambda item : item [ 'idx' ] , reverse = True ) ] del _snapshots if not snapshots : conn . close ( ) raise CommandExecutionError ( 'No snapshots found' ) elif len ( snapshots ) == 1 : conn . close ( ) raise CommandExecutionError ( 'Cannot revert to itself: only one snapshot is available.' ) snap = None for p_snap in snapshots : if not vm_snapshot : if p_snap . isCurrent ( ) and snapshots [ snapshots . index ( p_snap ) + 1 : ] : snap = snapshots [ snapshots . index ( p_snap ) + 1 : ] [ 0 ] break elif p_snap . getName ( ) == vm_snapshot : snap = p_snap break if not snap : conn . close ( ) raise CommandExecutionError ( snapshot and 'Snapshot "{0}" not found' . format ( vm_snapshot ) or 'No more previous snapshots available' ) elif snap . isCurrent ( ) : conn . close ( ) raise CommandExecutionError ( 'Cannot revert to the currently running snapshot.' ) domain . revertToSnapshot ( snap ) ret [ 'reverted' ] = snap . getName ( ) if cleanup : delete = list ( ) for p_snap in snapshots : if p_snap . getName ( ) != snap . getName ( ) : delete . append ( p_snap . getName ( ) ) p_snap . delete ( ) else : break ret [ 'deleted' ] = delete else : ret [ 'deleted' ] = 'N/A' conn . close ( ) return ret
Revert snapshot to the previous from current (if available) or to the specific.

    :param name: domain name
    :param vm_snapshot: name of the snapshot to revert
    :param cleanup: Remove all newer than reverted snapshots. Values: True or False (default False).
    :param connection: libvirt connection URI, overriding defaults

        .. versionadded:: 2019.2.0
    :param username: username to connect with, overriding defaults

        .. versionadded:: 2019.2.0
    :param password: password to connect with, overriding defaults

        .. versionadded:: 2019.2.0

    .. versionadded:: 2016.3.0

    CLI Example:

    .. code-block:: bash

        salt '*' virt.revert <domain>
        salt '*' virt.revert <domain> <snapshot>