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 Create a Load Balancer on an Edge
Function VclLoadBalancerVirtualServerCreate
public VclLoadBalancerVirtualServerCreate(objVclVdc: VclVdc, objVclOrgVdcNetwork: VclOrgVdcNetwork, objVclVApp: VclVApp, strDeployDataCentre: string, strVclLoadBalancerName: string, strLoadBalancerIpAddress: string): void {
let objVclGateway: VclGateway = this.VclGatewayGet(objVclVdc, strDeployDataCentre);
objVclGateway.updateInternalState();
this.objLogger.info("The Next Available IP is: " + strLoadBalancerIpAddress);
let arrLoadBalancerIPAddress: string[] = strLoadBalancerIpAddress.split('.');
let strOctetA: string = System.decimalToHex(parseInt(arrLoadBalancerIPAddress[0])).toLowerCase();
let strOctetB: string = System.decimalToHex(parseInt(arrLoadBalancerIPAddress[1])).toLowerCase();
let strOctetC: string = System.decimalToHex(parseInt(arrLoadBalancerIPAddress[2])).toLowerCase();
let strOctetD: string = System.decimalToHex(parseInt(arrLoadBalancerIPAddress[3])).toLowerCase();
if (strOctetA.length == 1) { strOctetA = "0" + strOctetA; }
if (strOctetB.length == 1) { strOctetB = "0" + strOctetB; }
if (strOctetC.length == 1) { strOctetC = "0" + strOctetC; }
if (strOctetD.length == 1) { strOctetD = "0" + strOctetD; }
let strLoadBalancerHostName: string = strOctetA + strOctetB + strOctetC + strOctetD + "-vip.cloudbuildtools.com";
let objVclLBPoolHealthCheck: VclLBPoolHealthCheck = new VclLBPoolHealthCheck();
objVclLBPoolHealthCheck.timeout = "15";
objVclLBPoolHealthCheck.uri = "/";
objVclLBPoolHealthCheck.mode = "HTTP";
objVclLBPoolHealthCheck.interval = "5";
objVclLBPoolHealthCheck.healthThreshold = "2";
objVclLBPoolHealthCheck.unhealthThreshold = "3";
let objVclLBPoolServicePort: VclLBPoolServicePort = new VclLBPoolServicePort();
objVclLBPoolServicePort.isEnabled = true;
objVclLBPoolServicePort.port = "80";
objVclLBPoolServicePort.protocol = "HTTP";
objVclLBPoolServicePort.healthCheckPort = "80";
objVclLBPoolServicePort.algorithm = "LEAST_CONN";
objVclLBPoolServicePort.healthCheck.add(objVclLBPoolHealthCheck);
let objVclLBPoolServicePortMember: VclLBPoolServicePort = new VclLBPoolServicePort();
objVclLBPoolServicePortMember.port = "80";
objVclLBPoolServicePortMember.protocol = "HTTP";
objVclLBPoolServicePortMember.healthCheckPort = "80";
let objVclLoadBalancerPool: VclLoadBalancerPool = new VclLoadBalancerPool();
objVclLoadBalancerPool.operational = true;
objVclLoadBalancerPool.name = strVclLoadBalancerName + "-Pool";
objVclLoadBalancerPool.description = strLoadBalancerHostName;
objVclLoadBalancerPool.errorDetails = "";
objVclLoadBalancerPool.servicePort.add(objVclLBPoolServicePort);
let arrVclVM: VclVM[] = objVclVApp.getChildrenVms();
arrVclVM.forEach((objVclVM: VclVM): void => {
this.objLogger.info("objVclVM.name = " + objVclVM.name);
let arrVclVirtualNetworkCard: VclVirtualNetworkCard[] = objVclVM.getNetworkCards();
let objVclVirtualNetworkCard: VclVirtualNetworkCard = arrVclVirtualNetworkCard.find((objVclVirtualNetworkCard: VclVirtualNetworkCard): boolean => {
return objVclVirtualNetworkCard.primaryNetworkConnection == true;
});
this.objLogger.info("objVclVirtualNetworkCard.ipAddress = " + objVclVirtualNetworkCard.ipAddress);
let objVclLBPoolMember: VclLBPoolMember = new VclLBPoolMember();
objVclLBPoolMember.weight = "1";
objVclLBPoolMember.ipAddress = objVclVirtualNetworkCard.ipAddress;
objVclLBPoolMember.servicePort.add(objVclLBPoolServicePortMember);
objVclLoadBalancerPool.member.add(objVclLBPoolMember);
this.objLogger.info("objVclLoadBalancerPool.member.size() = " + objVclLoadBalancerPool.member.size());
});
let objVclLBPersistence: VclLBPersistence = new VclLBPersistence();
objVclLBPersistence.method = "COOKIE";
objVclLBPersistence.cookieName = "VCOSESSIONID";
objVclLBPersistence.cookieMode = "INSERT";
let objVclLBVirtualServerServiceProfile: VclLBVirtualServerServiceProfile = new VclLBVirtualServerServiceProfile();
objVclLBVirtualServerServiceProfile.isEnabled = true;
objVclLBVirtualServerServiceProfile.protocol = "HTTP";
objVclLBVirtualServerServiceProfile.port = "80";
objVclLBVirtualServerServiceProfile.persistence = objVclLBPersistence;
let objVclLoadBalancerVirtualServer: VclLoadBalancerVirtualServer = new VclLoadBalancerVirtualServer();
objVclLoadBalancerVirtualServer.isEnabled = true;
objVclLoadBalancerVirtualServer.logging = false;
objVclLoadBalancerVirtualServer.pool = strVclLoadBalancerName + "-Pool";
objVclLoadBalancerVirtualServer.name = strVclLoadBalancerName + "-VirtualServer";
objVclLoadBalancerVirtualServer.description = strLoadBalancerHostName;
objVclLoadBalancerVirtualServer.ipAddress = strLoadBalancerIpAddress;
objVclLoadBalancerVirtualServer.interface = objVclOrgVdcNetwork.getReference();
objVclLoadBalancerVirtualServer.serviceProfile.add(objVclLBVirtualServerServiceProfile);
let objVclLoadBalancerService: VclLoadBalancerService = new VclLoadBalancerService();
objVclLoadBalancerService.isEnabled = true;
objVclLoadBalancerService.pool.add(objVclLoadBalancerPool);
objVclLoadBalancerService.virtualServer.add(objVclLoadBalancerVirtualServer);
this.objLogger.info("objVclLoadBalancerService.virtualServer.size() = " + objVclLoadBalancerService.virtualServer.size());
this.objLogger.info("Preperation Completed, next phase of applying the configuration is about to run.");
let objVclGatewayConfiguration: VclGatewayConfiguration = objVclGateway.configuration;
let objVclGatewayFeatures: VclGatewayFeatures = objVclGatewayConfiguration.edgeGatewayServiceConfiguration;
let objVclAbstractObjectSet: VclAbstractObjectSet = objVclGatewayFeatures.networkService;
let arrVclLoadBalancerService: VclLoadBalancerService[] = objVclAbstractObjectSet.find(new VclLoadBalancerService());
let arrVclLoadBalancerPool: VclLoadBalancerPool[];
let arrLoadBalancerVirtualServer: VclLoadBalancerVirtualServer[];
if (arrVclLoadBalancerService.length == 0) {
this.objLogger.info("Load Balancer Service Not Found on Gateway");
objVclGatewayFeatures.networkService.add(objVclLoadBalancerService);
arrVclLoadBalancerPool = objVclLoadBalancerService.pool.enumerate();;
this.objLogger.info("Pool to be Applied: " + arrVclLoadBalancerPool[0].name);
arrLoadBalancerVirtualServer = objVclLoadBalancerService.virtualServer.enumerate();
this.objLogger.info("Virtual Server to be applied: " + arrLoadBalancerVirtualServer[0].name);
}
else {
let objVclLoadBalancerService: VclLoadBalancerService = arrVclLoadBalancerService[0];
let intLoadBalancerPoolSize: number = objVclLoadBalancerService.pool.size();
let intLoadBalancerVirtualServerSize: number = objVclLoadBalancerService.virtualServer.size();
if ((intLoadBalancerPoolSize == 64) || (intLoadBalancerVirtualServerSize == 64)) {
this.objLogger.info("Load Balancer Pools Before Service is Applied: " + intLoadBalancerPoolSize);
this.objLogger.info("Load Balancer Virtual Servers Before Service is Applied: " + intLoadBalancerVirtualServerSize);
this.objLogger.info("No more Load Balancer Services can be Applied to this vShield Edge Device.");
throw "No more Load Balancer Services can be Applied to this vShield Edge Device.";
}
else {
this.objLogger.info("Load Balancer Pools Before Service is Applied: " + intLoadBalancerPoolSize);
this.objLogger.info("Load Balancer Virtual Servers Before Service is Applied: " + intLoadBalancerVirtualServerSize);
let arrVclLoadBalancerPool: VclLoadBalancerPool[] = objVclLoadBalancerService.pool.enumerate();
if (intLoadBalancerPoolSize == 0) {
this.objLogger.info("No existing Pools found. ");
this.objLogger.info("New Pool " + strVclLoadBalancerName + "-Pool will be deployed.");
objVclLoadBalancerService.pool.add(objVclLoadBalancerPool);
}
else {
arrVclLoadBalancerPool.forEach((objVclLoadBalancerPool: VclLoadBalancerPool) => {
if (objVclLoadBalancerPool.name === strVclLoadBalancerName + "-Pool") {
this.objLogger.info("A Match was Found for " + strVclLoadBalancerName + "-Pool, will NOT be deployed");
}
else {
// TO DO - SS - The logic here is not good
this.objLogger.info("No Match was Found for " + strVclLoadBalancerName + "-Pool, will be deployed.");
objVclLoadBalancerService.pool.add(objVclLoadBalancerPool);
}
});
}
let arrVclLoadBalancerVirtualServer: VclLoadBalancerVirtualServer[] = objVclLoadBalancerService.virtualServer.enumerate();
if (arrVclLoadBalancerVirtualServer.length === 0) {
this.objLogger.info("New Virtual Server " + strVclLoadBalancerName + "-VirtualServer will be deployed.");
objVclLoadBalancerService.virtualServer.add(objVclLoadBalancerVirtualServer);
}
else {
arrLoadBalancerVirtualServer.forEach((objVclLoadBalancerVirtualServer: VclLoadBalancerVirtualServer): void => {
if (objVclLoadBalancerVirtualServer.name == strVclLoadBalancerName + "-VirtualServer") {
this.objLogger.info("A Match was Found for " + strVclLoadBalancerName + "-VirtualServer will NOT be deployed.");
}
else {
// TO DO - SS - The logic here is not good
this.objLogger.info("No Match was Found for " + strVclLoadBalancerName + "-VirtualServer will be deployed.");
objVclLoadBalancerService.virtualServer.add(objVclLoadBalancerVirtualServer);
}
});
}
}
}
this.objLogger.info("objVclGateway.update() is the next command to be run.");
let objVclTask: VclTask = objVclGateway.update();
this.WaitForVclTask(objVclTask, 1);
}Discover more from Cloud Build Tools
Subscribe to get the latest posts sent to your email.
