Bereits in meinem Vorherigen Artikel zum Ubuntu 16.04 Provisioning ist ein vRealize Orchestrator Workflow aufgetaucht, welcher VM vDisk IOPS Limits im vCenter setzt.
Auf diesen möchte ich hier noch einmal etwas näher eingehen.
Hintergrund ist wiederum ein Thema, welches ich in dem Artikel zum Reporten und Setzen von Disk IOPs Limits begonnen habe. In dem vorherigen Artikel und Script ist das allerdings erst einmal ein nachgelagerter Prozess gewesen, dies ist natürlich suboptimal. Besser wäre es diese Limits direkt beim Bereitstellen der VM zu setzen.
Da zum Bereitstellen von VMs in meiner Umgebung der VMware vRealize Orchestrator in Verbindung mit VMware vRealize Automation zum Einsatz kommt muss dieser Prozesse in einem vRealize Orchestrator Workflow abgebildet werden.
Der Workflow zum setzen der vDisk IOPS Limits
Haupt Workflow
Hier werden die vorhanden VM Disks mit ihren Klassen reportet und dann die Optionen für das eigentlich Setzen vorbereitet.
Disk Report mit Klassen
An dieser Stelle müssen nun die Datastores klassifiziert und damit den vDisks die Limits zugeordnet werden.
Ein Beispiel:
vDisk Datastore Name: XX01XXX-C01-sla1-S-DS001
Storage Klasse: Silber Klasse (-S-)
IOPS Limit: 1000 IOPS
System.debug ("Processing all Disks from Disk Layout for informational purpose..."); for each (var Disk in Disks) { var DiskLabel = Disk.deviceInfo.label; System.log ("Disk Label: " + DiskLabel); var DiskNumber = DiskLabel.slice(-1); System.log ("Disk Number: " + DiskNumber); var DatastoreName = Disk.backing.datastore.name; System.log ("Disk Summary: " + DatastoreName); var DatastoreNameSplit = DatastoreName.split("-"); var DiskClass = DatastoreNameSplit[3]; System.log ("Disk Class: " + DiskClass); switch (DiskClass) { case "S" : var DiskIOLimit = "1000"; break; case "B" : var DiskIOLimit = "250"; break; case "G" : var DiskIOLimit = "-1"; break; default: var DiskIOLimit = "-1"; } System.log ("Disk IO Limit: " + DiskIOLimit); }
Aufbereitung der Optionen für vDisk IOPS Limits
System.debug ("Processing all Disks from Disk Layout in loop: " + DiskLoop); for each (var Disk in Disks) { var DiskLabel = Disk.deviceInfo.label var DiskNumber = DiskLabel.slice(-1); if (DiskNumber == (DiskLoop +1) ) { var DisktoProcess = DiskLabel; System.log ("Found Disk!"); var DatastoreName = Disk.backing.datastore.name; System.log (" Disk Name: " + DatastoreName); var DatastoreNameSplit = DatastoreName.split("-"); var DiskClass = DatastoreNameSplit[3]; System.log (" Disk Class: " + DiskClass); switch (DiskClass) { case "S" : var DiskIOLimit = "1000"; break; case "B" : var DiskIOLimit = "250"; break; case "G" : var DiskIOLimit = "-1"; break; default: var DiskIOLimit = "-1"; } } } System.log (" Disk to Process: " + DisktoProcess); System.log (" Disk IO Limit: " + DiskIOLimit);
Sub Workflow
Hier wird die eigentliche Anpassung an den vDisk Optionen durchgeführt.
Task zur Neukonfiguration Vorbereiten
//William Lam - Base //Markus Kraus - removed Shares var devices = vm.config.hardware.device; var diskName = disk System.log("Searching for " + diskName); for ( device in devices ) { if (devices[device] instanceof VcVirtualDisk && devices[device].deviceInfo.label == diskName) { System.log("Found " + diskName); var storageIO = new VcStorageIOAllocationInfo(); //set disk IO limits System.log("Setting Disk IO Limit to " + limit); storageIO.limit = limit; var diskSpec = new VcVirtualDisk() diskSpec.controllerKey = devices[device].controllerKey; diskSpec.unitNumber = devices[device].unitNumber; diskSpec.key = devices[device].key; diskSpec.backing = devices[device].backing; diskSpec.deviceInfo = devices[device].deviceInfo; diskSpec.capacityInKB = devices[device].capacityInKB; diskSpec.storageIOAllocation = storageIO; var devspec = new VcVirtualDeviceConfigSpec(); devspec.operation = VcVirtualDeviceConfigSpecOperation.edit; devspec.device = diskSpec; //created device change spec var vmspec = new VcVirtualMachineConfigSpec(); var deviceSpec = []; deviceSpec[0] = devspec; vmspec.deviceChange = deviceSpec; break; } } //reconfigure VM System.log("Reconfiguring Virtual Machine: " + vm.name + " ..."); task = vm.reconfigVM_Task(vmspec);
Workflow Logs
Download
Download Workflow
Special Thanks
William Lam hat einen sehr guten vRO Workflow für das setzen der vDisk Optionen in der VMware Community veröffentlicht:
Configure VM Disk Shares & IOPS Limit vCO Workflow
Und auch einen Blog Artikel dazu veröffentlicht:
Configure Virtual Machine Disk Shares & IOP Limits Using vCO Workflow
Den Workflow habe ich für meinen Zweck noch um das Setzen von Shares reduziert und ein Problem mit Sprachdifferenzen gelöst.
In der von mir veröffentlichten Version ist der Workflow nun Multilanguage.