Skip to the main content.

ScriptRunner Blog

Top PowerCLI Commands für deinen Admin‑Alltag – VM‑Inventory‑Management (Teil 1)

Inhaltsverzeichnis

 

 

Post Featured Image

In Teil 1 dieser Serie erfährst du mehr über Meta-Daten in VMware und die Nutzung von Tags und Custom Attributes. 

VMware hat das Potential der PowerShell recht früh erkannt, weshalb das PowerShellModul (PowerCLI) des Technologie-Unternehmens sehr ausgereift ist. Mit über 800 cmdlets ermöglich das Modul eine nahezu vollständige Automatisierung der VMware Produkte ESX, vCenter oder auch vSphere. Diese Artikel-Serie gibt einen Einblick in verschiedene cmdlets, die aus meiner Sicht eine wichtige Rolle bei der Administration von VMware-Umgebungen spielen und den Admin-Alltag ungemein erleichtern können.

Die Serie setzt sich aus den folgenden Artikeln zusammen:

  • Einleitung und Themenfeld VM-Inventory-Management (Teil 1)
  • Snapshots und VMware-Templates erstellen (Teil 2)
  • Allgemeine VMware Navigation und erweiterte Informationen (Teil 3)

VMware bietet mit seinen Produkten eine Vielzahl von Attributen, die jeder virtuellen Maschine zugeordnet werden. Bis zu einem gewissen Grad macht die Verwendung dieser Attribute auch Sinn – unternehmensspezifische Attribute sind sinnvollerweise aber nicht im Standard-Set enthalten. Hierfür bietet VMware aber die Möglichkeit an, Tags oder Custom Attributes zu nutzen. Damit können verschiedene Meta-Daten für virtuelle Maschinen verwaltet werden. In diesem Artikel erfährst du, warum die Verwendung solcher Meta-Daten in VMware sinnvoll ist und wie du die Tags und Custom Attributes mittels PowerShell und PowerCLI so verwenden kannst, dass sich manuelle Administrations-Aufgaben, sowie deren Fehleranfälligkeit drastisch reduzieren.

 

Tag Management

Eine Möglichkeit, die Nutzung von Tags zu veranschaulichen, wäre die Kennzeichnung von virtuellen Maschinen als Produktions-, Test- oder Entwicklungssysteme. Oft wird diese Information über das Namensschema der virtuellen Maschinen abgebildet. Dies kann zwar in vielen Fällen funktionieren, jedoch kann nicht garantiert werden, dass sich das Namensschema nicht in Zukunft ändern wird, was zu Inkonsistenzen führen kann – und unter uns: auf Regex-Akrobatik bei inkonsistenten VM-Namen hat doch niemand wirklich Lust, oder?

Im Gegensatz dazu bietet die aktive Verwaltung von Meta-Daten, wie zum Beispiel Tags, eine effizientere Methode. Beim Erstellen einer virtuellen Maschine kann dieser direkt der passende Typ zugewiesen werden. Dadurch entfällt unter anderem das mühsame Suchen nach Informationen über den Namen.

Mithilfe von Tags und den damit verbundenen Vorgaben kann man automatisierte Prozesse flexibel gestalten. Ein möglicher Anwendungsfall wäre zum Beispiel, dass die VMware-Tools bei Test-Maschinen automatisch in der Nacht aktualisiert und die Systeme dabei neu gestartet werden, während bei Produktiv-Systemen eine manuelle Überprüfung vorgenommen wird, bevor ein Neustart durchgeführt wird.

Tags bieten jedoch nicht nur Möglichkeiten für die Pflege des Systemtyps, sondern auch viele weitere Anwendungsfelder. Mit PowerShell lässt sich die Verwaltung von Tags vereinfachen, indem man sie erstellen und zuordnen und anschließend nach ihnen filtern kann.

Das zuvor beschriebene Beispiel lässt sich mit dem folgenden Code in die Praxis umsetzen:

 


# Legt eine neue Tag-Kategorie an
New-TagCategory -Name "SystemType" -EntityType VirtualMachine

# Legt einen neuen Tag in der zuvor erstellten Tag-Kategorie an
$TagSystemType = Get-TagCategory -Name "SystemType" |
New-Tag -Name "Production"

# Fügt den Tag dem VM-Objekt hinzu
$vmTagAssignmentParams = @{
Tag = $TagSystemType Confirm = $false
}
Get-VM |
Where-Object {$_.Name -match "servername"} |
New-TagAssignment @vmTagAssignmentParams

# Finde alle VMs mit dem Tag "Production"
Get-VM |
Get-TagAssignment |
Where-Object {$_.Tag -like 'Production'}

So sollte zunächst eine Tag-Kategorie angelegt (falls noch keine vorhanden ist) und unter dieser anschließend der jeweilige Tag erstellt werden. Es ist natürlich zu jedem Zeitpunkt möglich, weitere Tags dieser Kategorie anzulegen. Anschließend kann der Tag einer VM zugeordnet werden. In der letzten Zeile wird dargestellt, wie alle VMs, denen ein bestimmtes Tag zugeordnet ist, ausgegeben werden können. Anschließend kann die ausgegebene Liste je nach Anwendungsfall weiterbearbeitet werden.

 

Custom Attributes

Im Gegensatz zu Tags, basieren Custom-Attributes auf dem Key-Value-Pattern. So kann bei Tags zwar durch die Kategorie eine Zuordnung stattfinden (zum Beispiel: Systemtyp – Produktiv), diese sollte aber wohl durchdacht werden. So ist in diesem Beispiel nicht anzunehmen, dass die Anzahl der Tags in der Kategorie "Systemtyp" stark anwachsen wird.

Eventuell kommt noch das Tag "Staging" hinzu, mehr anderweitige Tags machen aber aus fachlicher Sicht wenig Sinn. Anders verhält es sich aber, wenn die "Tags" bzw. Attribute keine begrenzte Menge darstellen. Folgendes Szenario:

In einem Unternehmen wird beim Beantragen einer virtuellen Maschine das voraussichtliche Löschdatum angegeben (du weißt sicherlich, dass Lizenzen, Server oder Applikationen gerne beantragt werden, der Beantragende aber nicht halb so energisch, wenn es darum geht das jeweilige Asset wieder löschen zu lassen, sofern nicht mehr benötigt). Anhand von diesem Löschdatum kann der fachliche Betreuer kurz vor dem Löschdatum benachrichtigt werden, sodass die Löschfrist entweder verschoben oder die VM zur Löschung freigegeben werden kann.

In diesem Beispiel zeichnet sich ab, dass die Anzahl der Tags astronomisch hoch sein würde, wenn das jeweilige Löschdatum angegeben wird. Die bessere Wahl ist es, hier auf Custom Attributes zurückzugreifen. Diese werden den VMs unmittelbar zugewiesen, ohne einer Kategorie anzugehören. Ein Custom Attribute besteht aus einem Key/Bezeichner und einem Value/Wert. In unserem Beispiel lautet der Bezeichner immer "Löschdatum" oder "DateOfRemoval" – der Wert setzt sich dabei aus einem Datum zusammen. Für das Beispiel ergibt sich als folgender PowerShell-Code:


# VM-Objekt laden 
$VM = Get-VM "servername"
# Datum auf "heute in 3 Jahren" setzen und als String speichern
$Loeschfrist = ((Get-Date).AddDays(365 * 3)).ToString("dd.MM.yyyy")
# Neues Custom-Attribut erstellen
New-CustomAttribute -TargetType "VirtualMachine" -Name "DateOfRemoval"
# Custom-Attribute mit Löschfrist als Wert versehen und VM zuweisen
$annotationParams = @{
CustomAttribute = "DateOfRemoval"
Value = $Loeschfrist
}
$VM | Set-Annotation @annotationParams

# Custom-Attribute einer VM auslesen
(Get-VM "servername").CustomFields

So wird zunächst das Datum im angeforderten Format als String gespeichert. Anschließend wird ein neues Custom-Attribut angelegt. Im nächsten Schritt wird dieses zusammen mit dem zuvor angegeben Datum einer konkreten VM zugeordnet. Über das Attribut "CustomFields" lassen sich nun die Custom-Attributes einer VM ausgeben. Eine Abfrage über bestimmte Tags funktioniert dabei über die folgende Abfrage:


Get-VM | Get-Annotation -CustomAttribute "DateOfRemoval"

Begrenzen kann man die Ausgabe dabei über den Where-Filter:


$Date = (Get-Date).ToString("dd.MM.yyyy") 
$filteredAnnotations = Get-VM | 
	Get-Annotation -CustomAttribute "DateOfRemoval" |
Where-Object { $_.Value -eq $Date }

 

Fazit

Wie du siehst, lassen sich sämtliche Informationen mittels Tags oder Custom Attributes in VMware-Umgebungen pflegen. Wichtig ist dabei auf die korrekte Verwendung zu achten – PowerShell bietet sowohl für Tags, als auch für Custom Attributes die notwendigen Werkzeuge zu Verwaltung.

 

Good2know

VMUG: Webcast

Im Mai lohnt es sich bei der VMware User Group (VMUG) vorbeizuschauen. Am 17. Mai waren wir in der Reihe der Webcasts dabei: 

sr-webinar-vmware

 

Die Verwaltung von vSphere-Umgebungen kann eine Herausforderung sein, aber mit der richtigen Automatisierungslösung muss sie das nicht sein. PowerShell und das PowerCLI-Modul sind großartig, werden aber in der Regel nur von Skripting-Experten verwendet.

Wie wäre es, PowerShell nicht nur dazu zu verwenden, die wiederkehrenden Verwaltungsaufgaben zu standardisieren und zu automatisieren, sondern diese auch an Helpdesk-Teams zu delegieren und sogar auf der Grundlage eigener Skripte Self-Services für Endbenutzer zu erstellen? Auf diese Weise werden Anwender in die Lage versetzt, Snapshots zu verwalten, VMs neu zu konfigurieren, ihre VMs zu stoppen/starten oder Infrastrukturberichte zu erstellen.

Natürlich ist nicht jeder mit der Befehlszeile vertraut, und Anwender sollen keinen privilegierten Zugriff auf die VMware-Umgebung erhalten.

Was ist also erforderlich, um wiederkehrenden Aufgaben im Unternehmen mit PowerShell effizient und sicher zu automatisieren und zu delegieren?

 

 

Hier entlang zum Webcast!

 

 

 

Weiterführende Links

Über den Autor: