Jedes Objekt in vSAN (OSA) hat eine zugewiesene Storage-Policy. Soweit keine eigenen Policies definiert wurden, erhalten Objekte die vorinstallierte vSAN Default Policy. Die Übereinstimmung der gewählten Policy mit dem gegenwärtigen Zustand wird dabei regelmäßig überprüft. Wenn alles in Ordnung ist, so steht der Compliance Status auf ‘Compliant’.
Es kann jedoch vorkommen, dass mehrere Objekte im Cluster den Compliance Status ‘Out of Date’ zeigen. Dies wird dann in Skyline Health als Hinweis hervorgehoben. Im Beispiel unten waren mehrere VMs mit ihren vDisks in diesem Zustand.
Bereinigung im vSphere-Client
Handelt es sich nur um eines oder sehr wenige Objekte, so kann die betroffene VM in Skyline Health selektiert werden. Dabei wechseln wir in den Kontext dieser VM und können unter Configuration > Policies Details zu Namespace-Objekt (VM Home) oder den vDisks sehen. Wir können das Objekt im Dialog (Bild unten) auswählen und auf ‘Reapply VM Storage Policy’ klicken. Meist genügt das, um alle Objekte der VM wieder in den Zustand ‘Compliant’ zu bringen.
PowerCLI
Handelt es sich um einen großen Cluster mit vielen hundert oder gar tausend VMs, ist die Variante über den vSphere-Client sehr aufwändig. Viel einfacher geht es mit unserem mächtigen Tool PowerCLI.
Wir benötigen dazu zwei PowerCLI Kommandos:
Alle hier gezeigten Befehle sind sogenannte one-liner, also Anweisungen, die über eine einzelne Kommanzozeile im Direktmodus übergeben werden. Natürlich kann man das eleganter in ein Skript verpacken. Es ist eine Frage der persönlichen Vorliebe.
Statusabfrage
Mit Get-SpbmEntityConfiguration erhalten wir den Status aller VM Namespace-Objekte und vDisks. Damit es etwas strukturierter dargestellt wird, sortieren wir die Ausgabe nach ID.
Get-SpbmEntityConfiguration | sort -Property id
Der Befehl Get-SpbmEntityConfiguration liefert den Status aller Objekte zurück. Das können unter Umständen sehr viele sein und wir sind nur an jenen interessiert, die den Status ‘Out of Date‘ haben.
Get-SpbmEntityConfiguration | Where-Object {$_.ComplianceStatus -eq 'outOfDate'}
In kleineren Umgebungen mit nur einem Cluster reicht das obige Kommando aus. In größeren Umgebungen sollte man die Auswahl etwas einschränken. Angenommen wir haben mehrere vSAN Cluster und möchten den Policy-Status der Objekte in Cluster01 erhalten.
Get-Cluster -Name Cluster01 | Get-VM | Get-SpbmEntityConfiguration | Where-Object {$_.ComplianceStatus -eq 'outOfDate'}
Die Abfrage liefert alle VM Namespace-Objekte mit Policy Status ‘OutofDate’, jedoch nicht die vDisk-Objekte. Dafür müssen wir den Befehl etwas erweitern.
Get-Cluster -Name Cluster01 | Get-VM | Get-Harddisk | Get-SpbmEntityConfiguration | Where-Object {$_.ComplianceStatus -eq 'outOfDate'}
Bereinigung
Wir können diese Ergebnisse direkt verwenden, um die eingestellte Policy erneut zuzuweisen. Jedes dieser Objekte hat eine definierte VM Storage-Policy, jedoch ist diese aus unbekannten Gründen nicht konform und veraltet. Wir müssen als nur die definierte Policy abfragen und erneut zuweisen. Dazu pipen wir das Ergebnis weiter an das Kommando Set-SpbmEntityConfiguration. Als Parameter übergeben wir die zuvor ausgelesene Policy.
WhatIf
Es empfiehlt sich die folgenden Befehle zunächst mit dem Poweshell Parameter ‘-WhatIf‘ abzusenden. So werden keine echten Änderungen vorgenomen und der Befehl nur simuliert.
Namespace
Get-Cluster -Name Cluster01 | Get-VM | Get-SpbmEntityConfiguration | Where-Object {$_.ComplianceStatus -eq 'outOfDate'} | Set-SpbmEntityConfiguration -StoragePolicy $_.StoragePolicy
Disk-Objekte
Get-Cluster -Name Cluster01 | Get-VM | Get-HardDisk | Get-SpbmEntityConfiguration | Where-Object {$_.ComplianceStatus -eq 'outOfDate'} | Set-SpbmEntityConfiguration -StoragePolicy $_.StoragePolicy