Function: vCenter Virtual Machine Execute a Cross Cluster and Network vCenter vMotion

by Simon Sparks · 21 February 2026

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

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

Filename: PluginVCVirtualMachineService.ts

Description: Orchestrator Function to execute a Cross Cluster and Network vCenter vMotion operation.

Private Function: CrossClusterAndNetworkVMotion

public CrossClusterAndNetworkVMotion(objVcVirtualMachine: VcVirtualMachine, objVcClusterComputeResourceDestination: VcClusterComputeResource, objVcDatastoreDestination: VcDatastore, objVcFolderDestination: VcFolder, arrVcDistributedVirtualPortgroupDestination: VcDistributedVirtualPortgroup[]): boolean {

    let arrVcVirtualEthernetCardDistributedVirtualPortBackingInfo: VcVirtualEthernetCardDistributedVirtualPortBackingInfo[] = arrVcDistributedVirtualPortgroupDestination.map((objVcDistributedVirtualPortgroupDestination: VcDistributedVirtualPortgroup): VcVirtualEthernetCardDistributedVirtualPortBackingInfo => {

        let objVcDVPortgroupConfigInfo: VcDVPortgroupConfigInfo = objVcDistributedVirtualPortgroupDestination.config;
        let objVcDistributedVirtualSwitch: VcDistributedVirtualSwitch = objVcDVPortgroupConfigInfo.distributedVirtualSwitch;

        let objVcDistributedVirtualSwitchPortConnection: VcDistributedVirtualSwitchPortConnection = new VcDistributedVirtualSwitchPortConnection();
        objVcDistributedVirtualSwitchPortConnection.switchUuid = objVcDistributedVirtualSwitch.uuid;
        objVcDistributedVirtualSwitchPortConnection.portgroupKey = objVcDistributedVirtualPortgroupDestination.moref.value;

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

        return objVcVirtualEthernetCardDistributedVirtualPortBackingInfo;
    });

    let arrVcVirtualNetworkAdapter: (VcVirtualE1000 | VcVirtualE1000e | VcVirtualPCNet32 | VcVirtualVmxnet | VcVirtualVmxnet2 | VcVirtualVmxnet3 | VcVirtualSriovEthernetCard)[] = this.GetAllVcVirtualNetworkCards(objVcVirtualMachine);

    let arrVcVirtualDeviceConfigSpec: VcVirtualDeviceConfigSpec[] = arrVcVirtualNetworkAdapter.map((objVcVirtualNetworkAdapter: (VcVirtualE1000 | VcVirtualE1000e | VcVirtualPCNet32 | VcVirtualVmxnet | VcVirtualVmxnet2 | VcVirtualVmxnet3 | VcVirtualSriovEthernetCard)): VcVirtualDeviceConfigSpec => {

        objVcVirtualNetworkAdapter.backing = arrVcVirtualEthernetCardDistributedVirtualPortBackingInfo["ID??"];    // TO DO - Figure Out The Network Allocation

        let objVcVirtualDeviceConfigSpec: VcVirtualDeviceConfigSpec = this.VcVirtualDeviceConfigSpecCreate(objVcVirtualNetworkAdapter, VcVirtualDeviceConfigSpecOperation.edit);

        return objVcVirtualDeviceConfigSpec;
    });

    let objVcResourcePoolDestination: VcResourcePool = objVcClusterComputeResourceDestination.resourcePool;

    let arrVcHostSystemDestination: VcHostSystem[] = objVcClusterComputeResourceDestination.host;
    let objVcHostSystemDestination: VcHostSystem = arrVcHostSystemDestination[Math.floor(Math.random() * arrVcHostSystemDestination.length)];

    let blnResult: boolean = this.Relocate(objVcVirtualMachine, objVcDatastoreDestination, objVcResourcePoolDestination, objVcHostSystemDestination, objVcFolderDestination, arrVcVirtualDeviceConfigSpec, null);

    return blnResult;
}

Discover more from Cloud Build Tools

Subscribe to get the latest posts sent to your email.

You may also like