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.
