Onyx for the vSphere Web Client

The original Project Onyx (also here) was a VMware Fling which intercepted calls between the C# vSphere client and vCenter and could translate things you did in the GUI client to code in your choice of languages; SOAP, C#, PowerCLI, and JavaScript. This was really useful if say a thing you needed to do was not yet covered by a PowerCLI cmdlet, or you wanted to try and make it faster by using Get-View, or you didn’t know how to code it in JavaScript for vRO.

An issue arose however with the release of the vSphere Web Client, since Project Onyx did not support that method of intercepting calls. When VMware started moving new functionality only into the Web Client, that meant you could not use Project Onyx to figure out the code for those new features.

Enter a new VMware Fling - Onyx for the vSphere Web Client!

Some smart guys have now brought this same functionality to the vSphere Web Client. Let’s take a look at an example of how it works.

First of all follow the instructions on the Fling site to get it installed. Currently it supports vCenter 6.0. Note the warning about only using this Fling in your test environment (that’s where you write and test all of your code anyway right? ;-) ) WARNING: This fling replaces core Web Client files and may cause issues with stability and patching of future versions of the web client, please only continue with this installation if you are using a test or dev environment.

Once installed and the vSphere Web Client service has restarted, you will see a new menu item for Onyx.

Currently there is only PowerCLI.NET available as a code output choice. I’m hoping that since it is a drop down menu, there are more to come. I’ve already put in a Feature Request for JavaScript for handy use with vRO ;-)

You can either Start and Stop recording from this area or very handily they have added the same buttons in the top right hand corner so that you can Start and Stop recording from anywhere in the Web Client.

So start the recording and navigate to the thing that you want to do. For this example we’ll turn on HA for a cluster.

Once complete, stop the recording.

Now head back to the Onyx section of the Web Client and observe the code required to make that change.


$spec = New-Object VMware.Vim.ClusterConfigSpecEx $spec.dasConfig = New-Object VMware.Vim.ClusterDasConfigInfo $spec.dasConfig.vmComponentProtecting = 'disabled' $spec.dasConfig.enabled = $true $spec.dasConfig.admissionControlEnabled = $true $spec.dasConfig.vmMonitoring = 'vmMonitoringDisabled' $spec.dasConfig.hostMonitoring = 'enabled' $spec.dasConfig.HBDatastoreCandidatePolicy = 'allFeasibleDsWithUserPreference' $spec.dasConfig.admissionControlPolicy = New-Object VMware.Vim.ClusterFailoverLevelAdmissionControlPolicy $spec.dasConfig.admissionControlPolicy.failoverLevel = 1 $spec.dasConfig.defaultVmSettings = New-Object VMware.Vim.ClusterDasVmSettings $spec.dasConfig.defaultVmSettings.vmComponentProtectionSettings = New-Object VMware.Vim.ClusterVmComponentProtectionSettings $spec.dasConfig.defaultVmSettings.vmComponentProtectionSettings.vmReactionOnAPDCleared = 'none' $spec.dasConfig.defaultVmSettings.vmComponentProtectionSettings.enableAPDTimeoutForHosts = $true $spec.dasConfig.defaultVmSettings.vmComponentProtectionSettings.vmStorageProtectionForAPD = 'disabled' $spec.dasConfig.defaultVmSettings.vmComponentProtectionSettings.vmTerminateDelayForAPDSec = 180 $spec.dasConfig.defaultVmSettings.vmComponentProtectionSettings.vmStorageProtectionForPDL = 'disabled' $spec.dasConfig.defaultVmSettings.vmToolsMonitoringSettings = New-Object VMware.Vim.ClusterVmToolsMonitoringSettings $spec.dasConfig.defaultVmSettings.vmToolsMonitoringSettings.failureInterval = 30 $spec.dasConfig.defaultVmSettings.vmToolsMonitoringSettings.maxFailures = 3 $spec.dasConfig.defaultVmSettings.vmToolsMonitoringSettings.maxFailureWindow = 3600 $spec.dasConfig.defaultVmSettings.vmToolsMonitoringSettings.minUpTime = 120 $spec.dasConfig.defaultVmSettings.restartPriority = 'medium' $spec.dasConfig.defaultVmSettings.isolationResponse = 'none' $spec.dasConfig.option = New-Object VMware.Vim.OptionValue\[\] (0) $spec.dasConfig.heartbeatDatastore = New-Object VMware.Vim.ManagedObjectReference\[\] (0) $spec.dasConfig.hBDatastoreCandidatePolicy = 'allFeasibleDsWithUserPreference' $modify = $true $\_this = Get-View -Id 'ClusterComputeResource-domain-c22' $\_this.ReconfigureComputeResource\_Task($spec, $modify)

This is super cool. I really like the way it’s been implemented and looking forward to further development of this Fling :-)