@Override public void execute() throws ResourceAllocationException, ResourceUnavailableException { HealthCheckPolicy policy = null; boolean success = false; try { CallContext.current().setEventDetails("Load balancer health check policy ID : " + getEntityId()); success = _lbService.applyLBHealthCheckPolicy(this); if (success) { // State might be different after the rule is applied, so get new object here policy = _entityMgr.findById(HealthCheckPolicy.class, getEntityId()); LoadBalancer lb = _lbService.findById(policy.getLoadBalancerId()); LBHealthCheckResponse hcResponse = _responseGenerator.createLBHealthCheckPolicyResponse(policy, lb); setResponseObject(hcResponse); hcResponse.setResponseName(getCommandName()); } } finally { if (!success || (policy == null)) { throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create health check policy"); } } }
Map<String, String> paramMap = cmd.getFullUrlParams(); if (cmd.getResponsTimeOut() > cmd.getHealthCheckInterval()) throw new InvalidParameterValueException("Failed to create HealthCheck policy : Monitor interval must be greater than response timeout"); LoadBalancerVO loadBalancer = _lbDao.findById(cmd.getLbRuleId()); if (loadBalancer == null) { throw new InvalidParameterValueException("Failed: LB rule id: " + cmd.getLbRuleId() + " not present "); throw new InvalidParameterValueException("Failed: LB rule id: " + cmd.getLbRuleId() + " is in deleting state: "); "Failed to create HealthCheck policy: Validation Failed (HealthCheck Policy is not supported by LB Provider for the LB rule id :" + cmd.getLbRuleId() + ")"); List<LBHealthCheckPolicyVO> hcPolicies = _lb2healthcheckDao.listByLoadBalancerId(cmd.getLbRuleId(), false); if (hcPolicies.size() > 0) { throw new InvalidParameterValueException("Failed to create HealthCheck policy: Already policy attached for the LB Rule id :" + cmd.getLbRuleId()); new LBHealthCheckPolicyVO(loadBalancer.getId(), cmd.getPingPath(), cmd.getDescription(), cmd.getResponsTimeOut(), cmd.getHealthCheckInterval(), cmd.getHealthyThreshold(), cmd.getUnhealthyThreshold()); new LBHealthCheckPolicyVO(loadBalancer.getId(), cmd.getPingPath(), cmd.getDescription(), cmd.getResponsTimeOut(), cmd.getHealthCheckInterval(), cmd.getHealthyThreshold(), cmd.getUnhealthyThreshold()); Boolean forDisplay = cmd.getDisplay(); if (forDisplay != null) { policy.setDisplay(forDisplay);
@Override @DB @ActionEvent(eventType = EventTypes.EVENT_LB_HEALTHCHECKPOLICY_CREATE, eventDescription = "Apply HealthCheckPolicy to load balancer ", async = true) public boolean applyLBHealthCheckPolicy(CreateLBHealthCheckPolicyCmd cmd) { boolean success = true; LoadBalancerVO loadBalancer = _lbDao.findById(cmd.getLbRuleId()); if (loadBalancer == null) { throw new InvalidParameterException("Invalid Load balancer Id:" + cmd.getLbRuleId()); } FirewallRule.State backupState = loadBalancer.getState(); loadBalancer.setState(FirewallRule.State.Add); _lbDao.persist(loadBalancer); try { applyLoadBalancerConfig(cmd.getLbRuleId()); } catch (ResourceUnavailableException e) { s_logger.warn("Unable to apply healthcheck policy to the lb rule: " + cmd.getLbRuleId() + " because resource is unavaliable:", e); if (isRollBackAllowedForProvider(loadBalancer)) { loadBalancer.setState(backupState); _lbDao.persist(loadBalancer); s_logger.debug("LB Rollback rule id: " + loadBalancer.getId() + " lb state rolback while creating healthcheck policy"); } deleteLBHealthCheckPolicy(cmd.getEntityId(), false); success = false; } return success; }
private boolean validateHealthCheck(CreateLBHealthCheckPolicyCmd cmd) { LoadBalancerVO loadBalancer = _lbDao.findById(cmd.getLbRuleId()); String capability = getLBCapability(loadBalancer.getNetworkId(), Capability.HealthCheckPolicy.getName()); if (capability != null) { return true; } return false; }