Function: Create a New vCenter Virtual Machine

by Simon Sparks · 19 February 2021

To use this function add it to the class library file named vCenterService.ts

GitHub Repository: https://github.com/SimonSparksUK/Orchestrator

Filename: vCenterService.ts

Function VcVirtualMachineCreate

Description: The following is the function to create a new virtual machine in vCenter.

    public VcVirtualMachineCreate(strVcVirtualMachineName: string, intMemoryInGB: number, intCPU: number, intHardDiskCapacityInGB: number, objVcDatastore: VcDatastore, objVcResourcePool: VcResourcePool, objVcHostSystem: VcHostSystem, objVcVmFolder: VcVmFolder, objVcDistributedVirtualPortgroup: VcDistributedVirtualPortgroup): void {
        let objVcDatastoreInfo: VcDatastoreInfo = objVcDatastore.info;

        let objVcVirtualMachineFileInfo: VcVirtualMachineFileInfo = new VcVirtualMachineFileInfo();
        objVcVirtualMachineFileInfo.vmPathName = "[" + objVcDatastoreInfo.name + "]";

        let objVcVirtualLsiLogicSASController: VcVirtualLsiLogicSASController = new VcVirtualLsiLogicSASController();
        objVcVirtualLsiLogicSASController.key = 0;
        objVcVirtualLsiLogicSASController.device = [];
        objVcVirtualLsiLogicSASController.busNumber = 0;
        objVcVirtualLsiLogicSASController.sharedBus = VcVirtualSCSISharing["noSharing"];

        let objVcVirtualDeviceConfigSpecSCSI: VcVirtualDeviceConfigSpec = new VcVirtualDeviceConfigSpec();
        objVcVirtualDeviceConfigSpecSCSI.device = objVcVirtualLsiLogicSASController;
        objVcVirtualDeviceConfigSpecSCSI.operation = VcVirtualDeviceConfigSpecOperation.add;

        let objVcDVPortgroupConfigInfo: VcDVPortgroupConfigInfo = objVcDistributedVirtualPortgroup.config;

        let objVcDistributedVirtualSwitch: VcDistributedVirtualSwitch = objVcDVPortgroupConfigInfo.distributedVirtualSwitch;

        let objVcDistributedVirtualSwitchPortConnection: VcDistributedVirtualSwitchPortConnection = new VcDistributedVirtualSwitchPortConnection();
        objVcDistributedVirtualSwitchPortConnection.switchUuid = objVcDistributedVirtualSwitch.uuid;
        objVcDistributedVirtualSwitchPortConnection.portgroupKey = objVcDistributedVirtualPortgroup.key;

        let objVcVirtualEthernetCardDistributedVirtualPortBackingInfo: VcVirtualEthernetCardDistributedVirtualPortBackingInfo = new VcVirtualEthernetCardDistributedVirtualPortBackingInfo();
        objVcVirtualEthernetCardDistributedVirtualPortBackingInfo.port = objVcDistributedVirtualSwitchPortConnection;

        let objVcVirtualDeviceConnectInfo: VcVirtualDeviceConnectInfo = new VcVirtualDeviceConnectInfo();
        objVcVirtualDeviceConnectInfo.allowGuestControl = false;
        objVcVirtualDeviceConnectInfo.connected = true;
        objVcVirtualDeviceConnectInfo.startConnected = true;

        let objVcVirtualVmxnet3: VcVirtualVmxnet3 = new VcVirtualVmxnet3();
        objVcVirtualVmxnet3.addressType = "Generated";
        objVcVirtualVmxnet3.backing = objVcVirtualEthernetCardDistributedVirtualPortBackingInfo;
        objVcVirtualVmxnet3.key = 0;
        objVcVirtualVmxnet3.unitNumber = 0;
        objVcVirtualVmxnet3.connectable = objVcVirtualDeviceConnectInfo;

        let objVcVirtualDeviceConfigSpecNETWORK: VcVirtualDeviceConfigSpec = new VcVirtualDeviceConfigSpec();
        objVcVirtualDeviceConfigSpecNETWORK.device = objVcVirtualVmxnet3;
        objVcVirtualDeviceConfigSpecNETWORK.operation = VcVirtualDeviceConfigSpecOperation.add;

        let objVcVirtualDiskFlatVer2BackingInfo: VcVirtualDiskFlatVer2BackingInfo = new VcVirtualDiskFlatVer2BackingInfo();
        objVcVirtualDiskFlatVer2BackingInfo.diskMode = VcVirtualDiskMode["persistent"];
        objVcVirtualDiskFlatVer2BackingInfo.fileName = "[" + objVcDatastoreInfo.name + "]";
        objVcVirtualDiskFlatVer2BackingInfo.thinProvisioned = true;

        let objVcVirtualDisk: VcVirtualDisk = new VcVirtualDisk();
        objVcVirtualDisk.backing = objVcVirtualDiskFlatVer2BackingInfo;
        objVcVirtualDisk.key = -2;
        objVcVirtualDisk.controllerKey = 0;
        objVcVirtualDisk.unitNumber = 0;
        objVcVirtualDisk.capacityInKB = intHardDiskCapacityInGB * 1024 * 1024;

        let objVcVirtualDeviceConfigSpecDISK: VcVirtualDeviceConfigSpec = new VcVirtualDeviceConfigSpec();
        objVcVirtualDeviceConfigSpecDISK.device = objVcVirtualDisk;
        objVcVirtualDeviceConfigSpecDISK.fileOperation = VcVirtualDeviceConfigSpecFileOperation.create;
        objVcVirtualDeviceConfigSpecDISK.operation = VcVirtualDeviceConfigSpecOperation.add;

        let objVcVirtualIDEController: VcVirtualIDEController = new VcVirtualIDEController();
        objVcVirtualIDEController.key = -1;
        objVcVirtualIDEController.device = [];
        objVcVirtualIDEController.busNumber = 0;

        let objVcVirtualDeviceConfigSpecIDE: VcVirtualDeviceConfigSpec = new VcVirtualDeviceConfigSpec();
        objVcVirtualDeviceConfigSpecIDE.device = objVcVirtualIDEController;
        objVcVirtualDeviceConfigSpecIDE.operation = VcVirtualDeviceConfigSpecOperation.add;

        let strFilePathToISO: string = "Windows/Server/Windows Server 2022 ( x64 ).iso";

        let objVcVirtualCdromIsoBackingInfo: VcVirtualCdromIsoBackingInfo = new VcVirtualCdromIsoBackingInfo();
        objVcVirtualCdromIsoBackingInfo.fileName = "[InstallISOs] " + strFilePathToISO;

        let objVcVirtualDeviceConnectInfoCDROM: VcVirtualDeviceConnectInfo = new VcVirtualDeviceConnectInfo();
        objVcVirtualDeviceConnectInfoCDROM.allowGuestControl = true;
        objVcVirtualDeviceConnectInfoCDROM.connected = true;
        objVcVirtualDeviceConnectInfoCDROM.startConnected = true;

        let objVcVirtualCdrom: VcVirtualCdrom = new VcVirtualCdrom();
        objVcVirtualCdrom.backing = objVcVirtualCdromIsoBackingInfo;
        objVcVirtualCdrom.controllerKey = 200;
        objVcVirtualCdrom.key = 0;
        objVcVirtualCdrom.unitNumber = 0;
        objVcVirtualCdrom.connectable = objVcVirtualDeviceConnectInfoCDROM;

        let objVcVirtualDeviceConfigSpecCDROM: VcVirtualDeviceConfigSpec = new VcVirtualDeviceConfigSpec();
        objVcVirtualDeviceConfigSpecCDROM.device = objVcVirtualCdrom;
        objVcVirtualDeviceConfigSpecCDROM.operation = VcVirtualDeviceConfigSpecOperation.add;

        let arrVcVirtualDeviceConfigSpec:VcVirtualDeviceConfigSpec[] = [];
        arrVcVirtualDeviceConfigSpec.push(objVcVirtualDeviceConfigSpecSCSI);
        arrVcVirtualDeviceConfigSpec.push(objVcVirtualDeviceConfigSpecNETWORK);
        arrVcVirtualDeviceConfigSpec.push(objVcVirtualDeviceConfigSpecDISK);
        arrVcVirtualDeviceConfigSpec.push(objVcVirtualDeviceConfigSpecIDE);
        arrVcVirtualDeviceConfigSpec.push(objVcVirtualDeviceConfigSpecCDROM);

        let objVcVirtualMachineConfigSpec: VcVirtualMachineConfigSpec = new VcVirtualMachineConfigSpec();
        objVcVirtualMachineConfigSpec.name = strVcVirtualMachineName;
        objVcVirtualMachineConfigSpec.guestId = VcVirtualMachineGuestOsIdentifier["windows9Server64Guest"]
        objVcVirtualMachineConfigSpec.memoryMB = intMemoryInGB * 1024;
        objVcVirtualMachineConfigSpec.numCPUs = intCPU;
        objVcVirtualMachineConfigSpec.files = objVcVirtualMachineFileInfo;
        objVcVirtualMachineConfigSpec.deviceChange = arrVcVirtualDeviceConfigSpec;
        objVcVirtualMachineConfigSpec.cpuHotAddEnabled = false;
        objVcVirtualMachineConfigSpec.cpuHotRemoveEnabled = false;
        objVcVirtualMachineConfigSpec.memoryHotAddEnabled = false;
        objVcVirtualMachineConfigSpec.changeTrackingEnabled = true;
        objVcVirtualMachineConfigSpec.version = "vmx-09";

        let objVcTask: VcTask = objVcVmFolder.createVM_Task(objVcVirtualMachineConfigSpec, objVcResourcePool, objVcHostSystem);

        let objVcVirtualMachine: VcVirtualMachine = this.WaitForVcTaskEnd(objVcTask, 1);
    }

Discover more from Cloud Build Tools

Subscribe to get the latest posts sent to your email.

You may also like