package com.clouck.wrapper.aws;
import java.util.List;
import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.elasticloadbalancing.AmazonElasticLoadBalancing;
import com.amazonaws.services.elasticloadbalancing.AmazonElasticLoadBalancingClient;
import com.amazonaws.services.elasticloadbalancing.model.DescribeLoadBalancersRequest;
import com.amazonaws.services.elasticloadbalancing.model.DescribeLoadBalancersResult;
import com.clouck.converter.Ec2Converter;
import com.clouck.model.Account;
import com.clouck.model.Region;
import com.clouck.model.aws.AbstractResource;
@Component
public class ElbWrapperImpl implements ElbWrapper {
private static final Logger log = LoggerFactory.getLogger(ElbWrapperImpl.class);
@Autowired
private Ec2Converter converter;
private AmazonElasticLoadBalancing findClient(Account account, Region region) {
// TODO: need to config client config parameter. ignore it for now.
// TODO: need a cached version based on account and region as key
AWSCredentials credential = new BasicAWSCredentials(account.getAccessKeyId(), account.getSecretAccessKey());
AmazonElasticLoadBalancing elb = new AmazonElasticLoadBalancingClient(credential);
elb.setRegion(com.amazonaws.regions.Region.getRegion(region.getRegions()));
return elb;
}
@Override
public List<AbstractResource<?>> describeLoadBalancers(Account account, Region region, DateTime dt) {
AmazonElasticLoadBalancing elb = findClient(account, region);
DescribeLoadBalancersRequest req = new DescribeLoadBalancersRequest();
log.debug("start describing elb for account:{} in region:{} via api", account.getId() + "=>" + account.getName(), region);
DescribeLoadBalancersResult res = elb.describeLoadBalancers(req);
return converter.toLoadBalancers(res.getLoadBalancerDescriptions(), account.getId(), region, dt);
}
}