Orchestrator Function: Load Balance Virtual Machine Deployments Across 2 vSphere Clusters in a Provider Virtual Data Center

by Simon Sparks · 5 September 2013

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

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

Filename: vCloudService.ts

Description: Orchestrator Function to load balanced deployment of virtual machines across 2 vSphere clusters in a Provider Virtual Data Center

Function: VclDeployLocationGet

publicVclDeployLocationGet(objVclHost:VclHost):{DeployDataCentre:string,DeployStorageProfile:string}{
letobjVclQueryService:VclQueryService=objVclHost.getQueryService();

letobjVclExpression1:VclExpression=newVclExpression(VclQueryProviderVdcResourcePoolRelationField.NAME,"DataCenter*Cluster01",VclExpressionType.EQUALS);

letobjVclExpression2:VclExpression=newVclExpression(VclQueryProviderVdcResourcePoolRelationField.ISENABLED,"true",VclExpressionType.EQUALS);

letarrVclExpression:VclExpression[]= [];
arrVclExpression.push(objVclExpression1);
arrVclExpression.push(objVclExpression2);

letobjVclFilter:VclFilter=newVclFilter(arrVclExpression,VclFilterType.AND);

letobjVclQueryParams:VclQueryParams=newVclQueryParams();
objVclQueryParams.setFilter(objVclFilter);

letobjVclAbstractRecordResultSet:VclAbstractRecordResultSet=objVclQueryService.queryRecords(VclQueryRecordType.PROVIDERVDCRESOURCEPOOLRELATION,objVclQueryParams);

letarrVclQueryResultProviderVdcResourcePoolRelationRecord:VclQueryResultProviderVdcResourcePoolRelationRecord[]=objVclAbstractRecordResultSet.getRecords(newVclQueryResultProviderVdcResourcePoolRelationRecord());

letintNumberOfVMsInDataCenter01:number;
letintUsageCPUinDataCenter01:number;
letintUsageMemoryInDataCenter01:number;

letintNumberOfVMsInDataCenter02:number;
letintUsageCPUinDataCenter02:number;
letintUsageMemoryInDataCenter02:number;

arrVclQueryResultProviderVdcResourcePoolRelationRecord.forEach((objVclQueryResultProviderVdcResourcePoolRelationRecord:VclQueryResultProviderVdcResourcePoolRelationRecord):void=>{

if (objVclQueryResultProviderVdcResourcePoolRelationRecord.name=="DataCenter01Cluster01"){
intNumberOfVMsInDataCenter01=objVclQueryResultProviderVdcResourcePoolRelationRecord.numberOfVMs;
intUsageCPUinDataCenter01=100* (objVclQueryResultProviderVdcResourcePoolRelationRecord.cpuReservationAllocationMhz/objVclQueryResultProviderVdcResourcePoolRelationRecord.cpuReservationLimitMhz);
intUsageMemoryInDataCenter01=100* (objVclQueryResultProviderVdcResourcePoolRelationRecord.memoryReservationAllocationMB/objVclQueryResultProviderVdcResourcePoolRelationRecord.memoryReservationLimitMB);
}
elseif (objVclQueryResultProviderVdcResourcePoolRelationRecord.name=="DataCenter02Cluster01"){
intNumberOfVMsInDataCenter02=objVclQueryResultProviderVdcResourcePoolRelationRecord.numberOfVMs;
intUsageCPUinDataCenter02=100* (objVclQueryResultProviderVdcResourcePoolRelationRecord.cpuReservationAllocationMhz/objVclQueryResultProviderVdcResourcePoolRelationRecord.cpuReservationLimitMhz);
intUsageMemoryInDataCenter02=100* (objVclQueryResultProviderVdcResourcePoolRelationRecord.memoryReservationAllocationMB/objVclQueryResultProviderVdcResourcePoolRelationRecord.memoryReservationLimitMB);
}

});

this.objLogger.info("===== DataCenter01 ===== Usage VMs ="+intNumberOfVMsInDataCenter01);
this.objLogger.info("===== DataCenter01 ===== Usage CPU ="+intUsageCPUinDataCenter01+"%");
this.objLogger.info("===== DataCenter01 ===== Usage Memory ="+intUsageMemoryInDataCenter01+"%");

this.objLogger.info("===== DataCenter02 ===== Usage VMs ="+intNumberOfVMsInDataCenter02);
this.objLogger.info("===== DataCenter02 ===== Usage CPU ="+intUsageCPUinDataCenter02+"%");
this.objLogger.info("===== DataCenter02 ===== Usage Memory ="+intUsageMemoryInDataCenter02+"%");

letstrDeployDataCentre:string="";
letstrDeployStorageProfile:string="";

if (intUsageMemoryInDataCenter01>intUsageMemoryInDataCenter02){
strDeployDataCentre="DataCenter02";
strDeployStorageProfile="DataCenter01-Storage-Profile-Name";
}
else{
strDeployDataCentre="DataCenter01";
strDeployStorageProfile="DataCenter01-Storage-Profile-Name";
}

this.objLogger.info("===== This vApp will be deployed into the"+strDeployStorageProfile+" storage profile in"+strDeployDataCentre);

return{
DeployDataCentre:strDeployDataCentre,
DeployStorageProfile:strDeployStorageProfile
};
}

Discover more from Cloud Build Tools

Subscribe to get the latest posts sent to your email.

You may also like