PowerCLI – Automatic VM reconfigure

Vor einiger Zeit hat ein Kollege eine sehr spannende Idee an mich herangetragen (Vielen Dank Holger!). Es müsste doch möglich sein, zu erkennen wenn gewisse VMs herunterfahren werden um eine geplante Neukonfiguration durchzuführen - Quasi ein Automatic VM reconfigure. Das Herunterfahren könnte dann durch den Besitzer des Systems oder im Zuge von regelmäßigen Wartungen geschehen und die Anpassung der VM Parameter würden dann automatisch geschehen. Die typischen Parameter, welche offline zu verändern wären, sind RAM Größe und CPU Anzahl. Das Potential der Arbeitserleichterung war in meinen Augen enorm, daher habe ich mich umgehend an eine erste Version meins des VMware PowerCLI Skripts gesetzt. Es hat jedoch einige Anläufe gebraucht, bis ich damit zufrieden war.

Um dem User zusätzlich zu den Logs eine direkte Rückmeldung zu geben sieht die Ausgabe in der PowerShell Konsole so aus:

PowerCLI - Automatic VM reconfigure

Für die Erstellung eines Log File je Durchlauf habe ich die Write-Log PowerShell Logging Function von Mr. Automaton verwendet.

Der Aufruf des Skripts könnte beispielsweise so aussehen:

Automatic VM reconfigure im Detail

Für dieses Projekt gab es einige Punkte zu klären:

  • Wie kann in möglichst kurzen Intervallen erkannt werden ob die gewünschte VM ausgeschalten ist
  • Wie kann möglichst einfach festgelegt werden welche VM wie angepasst werden soll
  • Wie kann die Ausführung möglichst detailliert überwacht werden

Ich habe mich dazu entschieden alle ausgeschalteten VMs in dem angegebenen VMware vCenter aufzulisten und diese mit einem Konfigurationsfile zu vergleichen. Mit dem PowerCLI Cmdlet Get-View hat sich das als sehr effizient herausgestellt. Für das Konfigurationsfile habe ich mich für ein JSON File entschieden, das ist sehr schnell und fehlerunanfällig zu bearbeiten.

Das Konfigurationsfile

Die Konfiguration zum Automatic VM reconfigure soll den Namen der VM, die gewünschte RAM Größe in GB, die gewünschte Anzahl vCPUs und die Aktion nach dem Abschluss der Konfiguration beinhalten. Abgelegt wird das File einfach im Verzeichnis des PowerCLI Skripts.

Das PowerShell Skript

Im Kern handelt sich bei dem Automatic VM reconfigure Skript um eine Do-While Schleife deren Endbedingung ein Fehler ist. Somit läuft die Schleife solange, bis ein beliebiger Fehler auftritt. Um die Ausführung zu überwachen habe ich noch ein sehr ausführliches Logging mithilfe der Write-Log PowerShell Logging Function von Mr. Automaton hinzugefügt. Die Logs sollen in meinem Fall dann mit vRealize Log Insight eingesammelt und ausgewertet werden, dazu aber später mehr.

Skript Parameter:

NameBeschreibung
VIServervCenter Name oder IP
[Credential]PowerShell Credential zur vCenter Verbindung
[SleepTimer]Zeit in Sekunden zwischen den Durchläufen
[Test]$True: Keine Änderung an der VM

Die Handhabung

Das Skript kann zum Beispiel als geplanter Task mit einem täglichen Neustart eingeplant werden. Soll eine neue VM Konfiguration der Planung hinzugefügt werden, kann jederzeit das JSON File angepasst werden. Das Config File wird nach jedem Loop neu eingelesen.

Aber auch ein manueller Start, bis die gewünschte Änderung durchführt wurde ist natürlich denkbar.

Ressourcennutzung

Ich habe bei der Entwicklung des Automatic VM reconfigure Projekts versucht den Verbrauch den Ressourcen während der Ausführung so gering wie möglich zu halten. Also so wenig wie möglich Variablen, kein „Write-Host“ und auch die genutzten Variablen werden wenn möglich immer wieder gelehrt mit einer abschließenden Garbage Collection [System.GC]::Collect() .

Mit diesen Maßnahmen könnte ich bei einer Umgebung  mit ca. 2000 VMs den verwendeten RAM auf 80 – 160 MB drücken. Wenn ihr andere Erfahrungen macht oder noch Tipps habt um das weiter zu optimieren freue ich mich über euren Kommentar!

Automatic VM reconfigure Log Aufbereitung

Ein wichtiger Bestandteil ist die lückenlose Log Auswertung um einerseits Fehler sofort zu erkennen und andererseits die vorgenommen Konfiguration zu kontrollieren. Dazu verwende ich den VMware vRealize Log Insight Agent um das Log des Skripts einzusammeln und auszuwerten.

Automatic VM reconfigure - vLI Dashboard

vRealize Log Insight Dashboard

Automatic VM reconfigure - vLI Full Log

vRealize Log Insight Log

Automatic VM reconfigure - vLI Error

vRealize Log Insight Error

Der Windows Agent verwendet durch das optimierte Log des PowerShell Skripts eine sehr simple Konfiguration:

Automatic VM reconfigure - vLI Agent Config

Das in der Konfiguration aufgeführte Error Log soll die Nachvollziehbarkeit des Automatic VM reconfigure Skripts noch weiter steigern. Dort werden nur die Errors hingeschrieben:

Automatic VM reconfigure - vLI Error Log File

 

Automatic VM reconfigure GitHub Projekt

Das Skript is wie üblich auch wieder als GitHub Projekt verfügbar:

VmConfigTrigger Project

 

Hat Ihnen der Beitrag gefallen?

Nutzen Sie gerne für Ihren nächsten Amazon Einkauf diesen Affiliate Link und unterstützt Sie damit den Author des Artikels: http://amzn.to/2pAgZOD

Um schnell und einfach Ihre lieblings Blogs und Autoren zu unterstützen, ist der Dienst Flattr ebenfalls eine tolle Möglichkeit!

Vielen Dank!

Kommentar verfassen