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
public VclDeployLocationGet(objVclHost: VclHost): { DeployDataCentre: string, DeployStorageProfile: string } {
let objVclQueryService: VclQueryService = objVclHost.getQueryService();
let objVclExpression1: VclExpression = new VclExpression(VclQueryProviderVdcResourcePoolRelationField.NAME, "DataCenter*Cluster01", VclExpressionType.EQUALS);
let objVclExpression2: VclExpression = new VclExpression(VclQueryProviderVdcResourcePoolRelationField.ISENABLED, "true", VclExpressionType.EQUALS);
let arrVclExpression: VclExpression[] = [];
arrVclExpression.push(objVclExpression1);
arrVclExpression.push(objVclExpression2);
let objVclFilter: VclFilter = new VclFilter(arrVclExpression, VclFilterType.AND);
let objVclQueryParams: VclQueryParams = new VclQueryParams();
objVclQueryParams.setFilter(objVclFilter);
let objVclAbstractRecordResultSet: VclAbstractRecordResultSet = objVclQueryService.queryRecords(VclQueryRecordType.PROVIDERVDCRESOURCEPOOLRELATION, objVclQueryParams);
let arrVclQueryResultProviderVdcResourcePoolRelationRecord: VclQueryResultProviderVdcResourcePoolRelationRecord[] = objVclAbstractRecordResultSet.getRecords(new VclQueryResultProviderVdcResourcePoolRelationRecord());
let intNumberOfVMsInDataCenter01: number;
let intUsageCPUinDataCenter01: number;
let intUsageMemoryInDataCenter01: number;
let intNumberOfVMsInDataCenter02: number;
let intUsageCPUinDataCenter02: number;
let intUsageMemoryInDataCenter02: 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);
}
else if (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 + "%");
let strDeployDataCentre: string = "";
let strDeployStorageProfile: 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.
