In this blog post, we will add a CD-ROM device to a vSphere Virtual Machine in an automated way. This will be done with vRO (vRealize Orchestrator/Aria Automation Orchestrator). The action is used for creating a CD-ROM drive when provisioning a new machine with vRO.
I am doing this blog post because, after a lot of Googling, I could not find a good example or solution online. So it was time to do a blog post after figuring out what I needed to do!
So let’s start the blog post about adding a CD-ROM to a virtual machine.
vRO – Action Code
Here is the vRealize Orchestrator/Aria Automation Orchestrator code for an action. This action creates the specification for adding a CD-ROM to an already running or a new virtual machine. It’s a lot of code for a “simple” CD-ROM drive because, in the vCenter Server interface, it feels like a couple of easy clicks. In the backend it is another story, see the code below. You need to attach a lot of specifications together to add a CD-ROM to a virtual machine.
Action details:
- Name: createCdDvdDriveSpecification
- Version: 1.0.0
- Description: Create the specification for a vSphere CD/DVD drive to add a CD/DVD drive to a virtual machine with the VMware vCenter SDK.
- Inputs: None
- Return Type: Any
- Location: com.bv.vsphere.vm.spec
// Set variable
var deviceConfigSpecs = new Array();
var deviceConfigSpec;
// Add CD-ROM connect spec
var connectInfo = new VcVirtualDeviceConnectInfo();
connectInfo.allowGuestControl = true;
connectInfo.connected = false;
connectInfo.startConnected = true;
// Add CD-ROM backing spec
var backingInfo = null;
backingInfo = new VcVirtualCdromRemotePassthroughBackingInfo();
backingInfo.deviceName = "";
// Add Virtual CD-ROM
var cdrom = new VcVirtualCdrom();
cdrom.backing = backingInfo;
cdrom.controllerKey = 200;
cdrom.key = 0;
cdrom.unitNumber = 0;
cdrom.connectable = connectInfo;
// Create CD-ROM configuration spec
var deviceConfigSpec = new VcVirtualDeviceConfigSpec();
deviceConfigSpec.device = cdrom;
deviceConfigSpec.operation = VcVirtualDeviceConfigSpecOperation.add;
deviceConfigSpecs[0] = deviceConfigSpec;
// Troubleshooting generated configuration specification
// System.debug(deviceConfigSpec);
// Return specification
return deviceConfigSpec;
vRO – Workflow
This is a part of a larger workflow but it will help you get started. I have listed the most important parts of creating a virtual machine and how to get started. This code is quite identical to changing a virtual machine to add a CD-ROM drive.
// Load module
var vsphereVmSpec = System.getModule("com.bv.vsphere.vm.spec");
// Set variable
var actionName = arguments.callee.name.substr(6);
var deviceConfigSpecs = [];
var deviceConfigSpec;
// Virtual machine spec
var vmConfigSpec = new VcVirtualMachineConfigSpec();
// Lot more stuff here like VM name, resource pool, host etc
// Add CD-ROM
deviceConfigSpec = vsphereVmSpec.createCdDvdDriveSpecification();
deviceConfigSpecs[ii++] = deviceConfigSpec;
// Combine configuration
vmConfigSpec.deviceChange = deviceConfigSpecs;
// Start Virtual Machine creation
try {
System.log("[" + actionName + "] Starting Virtual Machine creation (" + virtualMachineName +")");
task = vmFolder.createVM_Task(vmConfigSpec, vmResourcePool, vmHost);
}
catch (exception) {
throw "[" + actionName + "] exception";
}
// Return VC:Task
return task;
Wrap-up
So this is my technical blog post about adding a CD-ROM to a virtual machine with vRealize Orchestrator (vRO). Hopefully, it is useful for somebody, please respond below if you have any comments or additional information! See you next time! 🙂