vRealize Orchestrator Workflow Set CBT Status

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:

  1. Logging einiger Informationen
  2. Prüfung ob CBT Status bereits korrekt ist – Wenn ja: Keine weitere Verarbeitung
  3. Prüfung ob SnapShots vorhanden sind – Wenn ja: Keine weitere Verarbeitung
  4. Entscheidung ob VM an- oder ausgeschalten ist
    1. Bei eingeschalteter VM: CBT Option setzen, einen SnapShot erstellen und danach alle SnapShots löschen
    2. Bei ausgeschalteter VM: CBT Option setzen

Weitere Quellen zum Thema CBT (wenn auch teilweise etwas älter):

vRealize Orchestrator Workflow Set CBT Status im Detail

vRealize Orchestrator Workflow Set CBT Status

vRealize Orchestrator Workflow Set CBT Status – Übersicht

 

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.

vRealize Orchestrator Workflow Set CBT Status - Execution

vRealize Orchestrator Workflow Set CBT Status – Presentation

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

Download Workflow

VMware Developer Center Direct Download

Leave a Reply