Function: vCenter Virtual Machine Execute a Cross 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 vCenter vMotion operation.

Private Function: CrossVCenterVMotion

public CrossVCenterVMotion(objVcVirtualMachine: VcVirtualMachine, strThumbprintDestination: string, objVcClusterComputeResourceDestination: VcClusterComputeResource, objVcDatastoreDestination: VcDatastore, objVcFolderDestination: VcFolder, arrVcDistributedVirtualPortgroup: VcDistributedVirtualPortgroup[], strUsername: string, strPassword:string): boolean {

    strThumbprintDestination = strThumbprintDestination.replace(/|\u200E/gi, "");

    if (strThumbprintDestination.indexOf(" ") > -1) {
        strThumbprintDestination = strThumbprintDestination.replace(/ /g, ":");
    }

    strThumbprintDestination = strThumbprintDestination.trim();

    let objVcSdkConnection: VcSdkConnection = objVcClusterComputeResourceDestination.sdkConnection;

    let objVcServiceLocatorNamePassword: VcServiceLocatorNamePassword = new VcServiceLocatorNamePassword();
    objVcServiceLocatorNamePassword.username = strUsername;
    objVcServiceLocatorNamePassword.password = strPassword;

    let objVcServiceLocatorDestination: VcServiceLocator = new VcServiceLocator();
    objVcServiceLocatorDestination.credential = objVcServiceLocatorNamePassword;
    objVcServiceLocatorDestination.instanceUuid = objVcSdkConnection.instanceUuid;
    objVcServiceLocatorDestination.sslThumbprint = strThumbprintDestination;
    objVcServiceLocatorDestination.url = objVcSdkConnection.name;

    let arrVcHostSystem: VcHostSystem[] = objVcClusterComputeResourceDestination.host;

    let arrVcVirtualEthernetCardDistributedVirtualPortBackingInfo: VcVirtualEthernetCardDistributedVirtualPortBackingInfo[] = arrVcDistributedVirtualPortgroup.map((objVcDistributedVirtualPortgroup: VcDistributedVirtualPortgroup): VcVirtualEthernetCardDistributedVirtualPortBackingInfo => {

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

        let objVcDistributedVirtualSwitchPortConnection: VcDistributedVirtualSwitchPortConnection = new VcDistributedVirtualSwitchPortConnection();
        objVcDistributedVirtualSwitchPortConnection.switchUuid = objVcDistributedVirtualSwitch.uuid;
        objVcDistributedVirtualSwitchPortConnection.portgroupKey = objVcDistributedVirtualPortgroup.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 objVcHostSystemDestination: VcHostSystem = arrVcHostSystem[Math.floor(Math.random() * arrVcHostSystem.length)];

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

    return blnResult;
}

Discover more from Cloud Build Tools

Subscribe to get the latest posts sent to your email.

You may also like