// 脚本需要两个输入 vm_obj和diskPath
System.log("Attempting to attach " + diskPath + " to " + vcVM.name);
// Max number of vmdks attached to a single scsi controller
var MAX_NUMBER_ATTACHED_VMDKS = 15;
var devices = vcVm.config.hardware.device;
var diskFilePath = diskPath; // sample: [sharedata]abc/abc_1.vmdk
var controllerKey;
var unitNumber;
var usedUnitNumbers = [];
for each (controller in devices) {
var isScsi = controller instanceof VcVirtualBusLogicController || controller instanceof VcVirtualLsiLogicController
|| controller instanceof VcParaVirtualSCSIController || controller instanceof VcVirtualLsiLogicSASController;
if (!isScsi) {
continue;
}
System.log("SCSI controller found: " + controller.deviceInfo.label);
for each (device in devices) {
if (device.controllerKey == controller.key) {
System.log("Device found: '" + device.deviceInfo.label + "' 'SCSI (" + controller.busNumber + ":" + device.unitNumber + ")'");
controllerKey = controller.key;
usedUnitNumbers.push(device.unitNumber);
}
}
break;
}
if (usedUnitNumbers.length >= MAX_NUMBER_ATTACHED_VMDKS) {
throw "SCSI controller is full, the VMDK can not be attached!";
}
var backing = new VcVirtualDiskFlatVer2BackingInfo();
backing.fileName = diskFilePath;
backing.diskMode = VcVirtualDiskMode.persistent;
var connectable = new VcVirtualDeviceConnectInfo();
connectable.startConnected = true;
connectable.allowGuestControl = false;
connectable.connected = true;
// Find the first available SCSI id
for (i = 0; i < MAX_NUMBER_ATTACHED_VMDKS; i++) {
if (usedUnitNumbers.indexOf(i) == -1) {
unitNumber = i;
System.log("Found available SCSI unit numebr '" + unitNumber + "'");
break;
}
}
var device = new VcVirtualDisk();
device.backing = backing;
device.connectable = connectable;
device.controllerKey = controllerKey;
device.unitNumber = unitNumber;
var deviceChange = new VcVirtualDeviceConfigSpec();
deviceChange.operation = VcVirtualDeviceConfigSpecOperation.add;
deviceChange.device = device;
var deviceChangeArray = [deviceChange];
var spec = new VcVirtualMachineConfigSpec();
spec.deviceChange = deviceChangeArray;
var task = vcVm.reconfigVM_Task(spec);
System.log("Initiating reconfigure...");
System.getModule("com.vmware.library.vc.basic").vim3WaitTaskEnd(task,true,3);
System.log("Reconfigure of VM '" + vcVm.name + "' successful.");