Tags aus den VM Notes vergeben
Gegen das Problem, dass sich VMs im HTML5 Client nicht mehr über die Informationen in den Notes finden lassen.
Dieser Beitrag ist von 2019. Er bleibt online, weil er nach wie vor nachgefragt wird, beschreibt aber einen Produktstand von damals.
Die Aufgabe dieser Woche kam bei einem Kundeneinsatz auf. Ich habe den Kunden von vSphere 6.5 auf den aktuellen vSphere 6.7 Update 1 Build gehoben. Vom endlich fertigen HTML5 Client war er zuerst sehr angetan.
Das Problem mit dem neuen HTML5 Client: VMs zu finden ist mühsam
Beim Arbeiten mit dem neuen Client merkte der Kunde schnell, dass die Suche dort nicht so gut ist wie im Flex Client. Er konnte seine VMs nicht mehr über die Informationen finden, die er bei jeder VM unter «Notes» hinterlegt hatte. Mein erster Gedanke: Das löst PowerCLI. Ich habe ihm gesagt, dass Tags der schnellste Weg zu Informationen über VMs sind. Ausserdem habe ich ihm von den neueren Produkten erzählt, die Tags nutzen, etwa die automatisierte Reaktion in NSX zusammen mit Antivirus-Lösungen von Drittanbietern. Er war schnell dafür zu haben. Ich glaube, «das ist einfach wie ein Post-it» hat den Ausschlag gegeben.
Custom Attributes zu durchsuchen bringt nichts
Der Ausgangspunkt war einfach. Der Kunde nutzte nicht nur Notes, sondern hatte auch ein paar Custom Attributes definiert. Die liessen sich im neuen Client zwar noch durchsuchen, aber nur mit viel zu vielen Klicks und viel zu präzisen Angaben in der Suchmaske:

Du musst genau angeben, welches Attribut welchen Wert haben soll, damit das vCenter überhaupt etwas findet. Für mich ist das Unsinn und damit unbrauchbar. Der Kunde sah es genauso. Also haben wir entschieden, auch alle Custom Attributes auf Tags umzustellen. Weil das ein einmaliger Vorgang war, habe ich für ihn diese Logik gebaut:
#just to be thourough here is the code to actually create the Tag-Category
New-TagCategory -Name "Install Date" -Cardinality "Single" -EntityType "VirtualMachine" -Confirm:$false
foreach ($currentVm in get-vm) {
#here we extract the value from our custom attribute
$installDate = $currentVm.CustomFields | Where-Object {$_.Key -match "Install"} | Select-Object -ExpandProperty Value
if ($installDate -eq "")
{
#if the VM did not have the custom value defined we go ahead and give a value
$installDate = "01.01.1900"
#and we add the custome attribute as well
$currentVm | Set-Annotation -CustomAttribute "Install Date" -Value $installDate -WhatIf
}
try
{
#if the tag is not found we execute the "catch"
get-tag -Name $installDate -ErrorAction Stop
}
catch
{
#create the tag if it does not exist
New-Tag -Name $installDate -Category "Install Date" -WhatIf -Confirm:$false
}
finally
{
#at this point we know the tag exists so we assign it to the current VM from the loop
New-TagAssignment -Tag (Get-Tag -Name $installDate) -Entity $currentVm -WhatIf
}
}
Ich habe die statischen Teile angepasst und dieses kleine Script für jedes Custom Attribute des Kunden laufen lassen. Danach hat er entschieden, die Custom Attributes ganz zu entfernen und künftig mit Tags zu arbeiten.
Von den Notes zu den Tags
Die nächste Aufgabe war das Feld Notes. Der Kunde schrieb dort alles Mögliche hinein und fand seine VMs im Alltag darüber. Wie bekommt er dieses Finden zurück? Ganz einfach: Wir legen eine neue Tag-Kategorie «Notes» an, gehen alle VMs durch, machen aus ihren Notes ein Tag und weisen es der VM zu. Die Logik ist im Grunde dieselbe wie oben.
Der Kunde brachte in der Diskussion aber einen guten Punkt:
Ich arbeite gerne mit dem Notes-Feld der VMs, weil das ins VMX-File geschrieben wird und damit auch wiederhergestellt ist, wenn ich eine VM aus dem Backup zurückholen muss.
Das hat mich zum Nachdenken gebracht: Gibt es einen Backup-Hersteller, der Tag-Zuweisungen kann und diese Tags nach einem vollständigen VM-Restore wieder setzt? Ich glaube nicht, habe mich aber auch nicht sehr tief damit befasst.
Update 1:
Nach der Veröffentlichung dieses Posts haben sich einige Kolleginnen und Kollegen aus der VMware vExpert Community dazu gemeldet. Offenbar kann Veeam Tags beim Restore einer VM wiederherstellen. Gut zu wissen.
Ich hoffe, dass künftig mehr Backup-Hersteller das Wiederherstellen von Tags und vielleicht auch von Custom Attributes unterstützen.
Nach der Diskussion haben wir entschieden: Der Kunde arbeitet für den Betrieb weiter mit dem Notes-Feld, und ich schreibe ihm ein Script, das den Wert automatisch nimmt und daraus ein Tag macht. Was er dabei mitgenommen hat: Es lohnt sich, das Format seiner VM Notes zu standardisieren. Ich habe ihm gesagt, dass er, sobald das steht und er alle Tags mit der alten Syntax loswerden will, einfach die Tag-Kategorie entfernen soll, womit auch alle Tags verschwinden. Beim nächsten Lauf des Scripts werden sie neu angelegt.
Das Script ist zu gross für diesen Post, aber es liegt wie immer auf meinem GitHub-Account.
Es schreibt ein Logfile, in dem du nachvollziehst, welche VM welches Tag bekommen hat. Wir haben uns auf einen Lauf alle vier Stunden geeinigt. Alle vier Stunden werden also die Informationen aus den Notes als Tags gesetzt und sind im HTML5 Client sofort durchsuchbar.
Nutz das Script gerne und gib mir Rückmeldung. Deutlich besser würde es wohl, wenn es mehrzeilige Notes verarbeiten und in verschiedene Tags aufteilen könnte, aber das ist eine Aufgabe für einen anderen Tag.
Das Script setzt das Modul PSLogging aus der PowerShell Gallery voraus.