Mehrere VMs automatisch zurücksetzen

Heute stelle ich ein Script vor um mehrere VMs auf einem ESXi auf einmal zurückzusetzen. Wir setzen es zum Beispiel in einer Schulungsumgebung bei einem Kunden ein, um jede Nacht alle VMs auf ihren Ursprungszustand zurückzusetzen, damit die nächste Schulung am folgenden Tag wieder neu beginnen kann.

Name

Script name: revert_snapshots
Author: Anton Daudrich
Company: ADMIN INTELLIGENCE GmbH
Version: v0.2
Release date: 2018-01-04 

Hilfe

*********************************
revert_snapshots
*********************************
Script for reverting VM Snapshots on a ESXi
it will always revert the machine to the last(youngest) made Snapshot

Usage: revert_snapshot.sh -n [VM_name]

 -n [VM_name] name of virtual machines to grep (regex)
    for example: W10 will find all machines matching W10*

Optional command-line parameters:
 --version   prints version and release info
 --debug     show verbose debug output

Note: This Script is meant to be run on the ESXi Server locally.
      Set it up on a datastore accessible to the ESXi
      and then run it remote by ssh or locally by cron.

      Tested on ESXi 5.5 and ESXi 6.0

***************************************************************************
Thank you for using this script!

Changelog

v0.1 2016-01-28 initial Release
v0.2 2018-01-04 reworked code for public release, added comments

Voraussetzungen

  • ESXi Shell Access per SSH

Installation

Das Script sollte persistent auf dem ESXi Host abgelegt werden, z.B. auf einem eingebundenen datastore. Es kann daraufhin per cron oder remote per SSH aufgerufen werden. Getestet auf ESXi 5.5 und ESXi 6.0.

Dokumentation

Arbeitsweise

Das Script läuft lokal auf dem ESXi Host. Es holt sich die benötigten Informationen zu jeder VM (die der Regular Expression entsprechen) und setzt diese auf den letzten (d.h. jüngsten) Snapshot zurück. Dabei wird auch der Power Zustand in dem der Snapshot erstellt wurde (powered on/off) berücksichtigt. Unter anderem kommen folgende Befehle zur Anwendung:

  • vim-cmd vmsvc/getallvms | grep "$VM_name"
  • vim-cmd vmsvc/snapshot.get ${VM_id}
  • vim-cmd vmsvc/snapshot.revert "${VM_id}" "${last_snapshot_id}" "${powerOff}"

Kommandozeilenparameter

-n {regex}

grep Regular Expression für VM Name(n)
siehe auch Hilfe zum Befehl grep

Exit Codes

Keine besonderen exit codes.

Perfdata

Dieses Script generiert keine Perfdaten.

Anwendungsbeispiele

Wir setzen dieses Script ein, um in einer Schulungsumgebung bei einem Kunden jede Nacht alle VMs auf ihren Ursprungszustand zurückzusetzen, damit die nächste Schulung am folgenden Tag wieder neu beginnen kann. Dazu haben wir für jede VM nach der finalen Einrichtung jeweils einen Snapshot angelegt, auf den die VM zurückgesetzt wird. Achtung: das Script verwendet immer den neuesten, also zuletzt angelegten Snapshot!

Download

#############################
### Copyright and License ###
#############################
#
# Copyright (C) 2016 Anton Daudrich
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free Software Foundation,
# either version 3 of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with this program.
# If not, see http://www.gnu.org/licenses/.
#
#############################