package tw.com.providers;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.amazonaws.services.elasticloadbalancing.AmazonElasticLoadBalancingClient;
import com.amazonaws.services.elasticloadbalancing.model.DeregisterInstancesFromLoadBalancerRequest;
import com.amazonaws.services.elasticloadbalancing.model.DeregisterInstancesFromLoadBalancerResult;
import com.amazonaws.services.elasticloadbalancing.model.DescribeLoadBalancersRequest;
import com.amazonaws.services.elasticloadbalancing.model.DescribeLoadBalancersResult;
import com.amazonaws.services.elasticloadbalancing.model.DescribeTagsRequest;
import com.amazonaws.services.elasticloadbalancing.model.DescribeTagsResult;
import com.amazonaws.services.elasticloadbalancing.model.Instance;
import com.amazonaws.services.elasticloadbalancing.model.LoadBalancerDescription;
import com.amazonaws.services.elasticloadbalancing.model.RegisterInstancesWithLoadBalancerRequest;
import com.amazonaws.services.elasticloadbalancing.model.RegisterInstancesWithLoadBalancerResult;
import com.amazonaws.services.elasticloadbalancing.model.Tag;
import com.amazonaws.services.elasticloadbalancing.model.TagDescription;
public class LoadBalancerClient {
private static final Logger logger = LoggerFactory.getLogger(LoadBalancerClient.class);
private AmazonElasticLoadBalancingClient elbClient;
public LoadBalancerClient(AmazonElasticLoadBalancingClient elbClient) {
this.elbClient = elbClient;
}
public List<LoadBalancerDescription> describeLoadBalancers() {
DescribeLoadBalancersRequest request = new DescribeLoadBalancersRequest();
DescribeLoadBalancersResult result = elbClient.describeLoadBalancers(request);
List<LoadBalancerDescription> descriptions = result.getLoadBalancerDescriptions();
logger.info(String.format("Found %s load balancers %s", descriptions.size(), descriptions));
return descriptions;
}
public void registerInstances(List<Instance> instances, String lbName) {
logger.info(String.format("Registering instances %s with loadbalancer %s", instances, lbName));
RegisterInstancesWithLoadBalancerRequest regInstances = new RegisterInstancesWithLoadBalancerRequest();
regInstances.setInstances(instances);
regInstances.setLoadBalancerName(lbName);
RegisterInstancesWithLoadBalancerResult result = elbClient.registerInstancesWithLoadBalancer(regInstances);
logger.info("ELB Add instance call result: " + result.toString());
}
public List<Instance> degisterInstancesFromLB(List<Instance> toRemove,
String loadBalancerName) {
DeregisterInstancesFromLoadBalancerRequest request= new DeregisterInstancesFromLoadBalancerRequest();
request.setInstances(toRemove);
request.setLoadBalancerName(loadBalancerName);
DeregisterInstancesFromLoadBalancerResult result = elbClient.deregisterInstancesFromLoadBalancer(request);
List<Instance> remaining = result.getInstances();
logger.info(String.format("ELB %s now has %s instances registered", loadBalancerName, remaining.size()));
return remaining;
}
public List<Tag> getTagsFor(String loadBalancerName) {
DescribeTagsRequest describeTagsRequest = new DescribeTagsRequest().withLoadBalancerNames(loadBalancerName);
DescribeTagsResult result = elbClient.describeTags(describeTagsRequest);
List<TagDescription> descriptions = result.getTagDescriptions();
logger.info(String.format("Fetching %s tags for LB %s ", descriptions.size(), loadBalancerName));
return descriptions.get(0).getTags();
}
}