Durch einen Bug in einer Backup Software war ich wieder einmal gezwungen mich mit dem Thema Changed Block Tracking (CBT) zu befassen. Neben dem PowerShell Modul – Set-CBT für mein GitHub Repository vSphere PowerShell Modules ist dadurch auch der vRealize Orchestrator Workflow Set CBT Status entstanden.
Mit dem Thema befassen, bedeutete in einem Fall zum einen den CBT Status vieler VMs schnell reporten sowie ändern (hierfür das PowerShell Modul mit dem zusätzlichen VI-Property) und CBT bereits bei der Bereitstellung durch vRealize Automation zu aktivieren.
Wenn der entstandene vRealize Orchestrator Workflow nur von vRealize Automation (vRA), bzw. dem Provisioned Machine Stub (WFStubMachineProvisioned) genutzt würde, ginge es etwas einfacher. Ich wollte den Workflow jedoch flexibler gestalten um weitere Anwendungsfälle zukünftig schnell zu ermöglichen (z.B. eine Einbindung als XaaS Action).
Ablauf des Workflows:
- Logging einiger Informationen
- Prüfung ob CBT Status bereits korrekt ist – Wenn ja: Keine weitere Verarbeitung
- Prüfung ob SnapShots vorhanden sind – Wenn ja: Keine weitere Verarbeitung
- Entscheidung ob VM an- oder ausgeschalten ist
- Bei eingeschalteter VM: CBT Option setzen, einen SnapShot erstellen und danach alle SnapShots löschen
- Bei ausgeschalteter VM: CBT Option setzen
Weitere Quellen zum Thema CBT (wenn auch teilweise etwas älter):
- Changed block tracking? von Duncan Epping
- What is Changed Block Tracking in vSphere? von Eric Siebert
- VMware Artikel Changed Block Tracking (CBT) on virtual machines (1020128)
vRealize Orchestrator Workflow Set CBT Status im Detail
Scriptable task – init
In dem ersten Scriptable task führe ich einige Validierungen durch und logge wichtige Informationen. Die Validierungen werden dann auch teilweise von den darauffolgenden „Decision activities“ verwendet.
if (newCBTState){ var newCBTStateString = "true" ; } else { var newCBTStateString = "false" ; } System.log("CBT State to set: " + newCBTStateString); System.log("vSphere VM CBT State: " + vcVM.config.changeTrackingEnabled); if (vcVM.snapshot == null){ System.log("vSphere VM SnapShot State: No Snapshots found"); } else { System.log("vSphere VM SnapShot State: Snapshots found"); } System.log("vSphere VM to process: " + vcVM.Name); System.log("vSphere VM PowerState: " + vcVM.runtime.powerState.Value);
Decision activity – Need to be set?
Prüfung ob der gewünschte CBT Status eventuell schon gesetzt ist.
if (vcVM.config.changeTrackingEnabled == newCBTState ){ System.log ("DECISION: CBT State ist already correct."); return false; }else{ System.log ("DECISION: CBT State ist not correct."); return true; }
Decision activity – No SnapShots?
Prüfung, dass aktuell keine SnapShots auf der VM vorhanden sind.
Dies hat zwei Gründe:
- CBT lässt sich mit einem aktiven SnapShot nicht vollständig aktivieren oder deaktivieren
- Der Workflow löscht bei eingeschalteten VMs abschließen alle vorhandenen SnapShots
if (vcVM.snapshot == null){ System.log ("DECISION: No Snapshots found. Processing..."); return true; }else{ System.log ("DECISION: Snapshots found. Processing stopped..."); return false; }
Decision activity – PoweredOn?
Der Zustand der VM legt fest ob CBT mit oder ohne SnapShot aktivieren bzw. deaktivieren werden kann.
if (vcVM.runtime.powerState.Value == "poweredOn" ){ System.log ("DECISION: VM is PoweredOn... Snapshot is needed to apply CBT State."); return true; }else{ System.log ("DECISION: VM is not PoweredOn... No Snapshot is needed to apply CBT State."); return false; }
Scriptable task – Set CBT
Je nachdem ob die VM ein- oder ausgeschalten ist, wird einer der Scriptable task für das setzten der CBT Einstellungen ausgeführt.
var spec = new VcVirtualMachineConfigSpec(); spec.changeTrackingEnabled = newCBTStateString; vcVM.reconfigVM_Task(spec);
Workflow Ausführung
Die Presentation ist sehr simpel gehalten – VMware vSphere VM und der gewünschte CBT Status.
Workflow Log
[2016-12-13 16:07:55.675] [I] CBT State to set: true [2016-12-13 16:07:55.675] [I] vSphere VM CBT State: false [2016-12-13 16:07:55.675] [I] vSphere VM SnapShot State: No Snapshots found [2016-12-13 16:07:55.676] [I] vSphere VM to process: TST0002 [2016-12-13 16:07:55.676] [I] vSphere VM PowerState: poweredOn [2016-12-13 16:07:55.685] [I] DECISION: CBT State ist not correct. [2016-12-13 16:07:55.693] [I] DECISION: No Snapshots found. Processing... [2016-12-13 16:07:55.699] [I] DECISION: VM is PoweredOn... Snapshot is needed to apply CBT State. [2016-12-13 16:07:55.926] [I] CreateSnapshot_Task Queued or In Progress... [2016-12-13 16:08:00.926] [I] CreateSnapshot_Task end [2016-12-13 16:08:01.504] [I] RemoveAllSnapshots_Task Queued or In Progress... [2016-12-13 16:08:06.505] [I] RemoveAllSnapshots_Task end