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.autoscaling.AmazonAutoScaling;
import com.amazonaws.services.autoscaling.AmazonAutoScalingClient;
import com.amazonaws.services.autoscaling.model.DescribeAutoScalingGroupsRequest;
import com.amazonaws.services.autoscaling.model.DescribeAutoScalingGroupsResult;
import com.amazonaws.services.autoscaling.model.DescribeLaunchConfigurationsRequest;
import com.amazonaws.services.autoscaling.model.DescribeLaunchConfigurationsResult;
import com.clouck.converter.Ec2Converter;
import com.clouck.model.Account;
import com.clouck.model.Region;
import com.clouck.model.aws.AbstractResource;
@Component
public class AsWrapperImpl implements AsWrapper {
private static final Logger log = LoggerFactory.getLogger(AsWrapperImpl.class);
@Autowired
private Ec2Converter converter;
private AmazonAutoScaling 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());
AmazonAutoScaling as = new AmazonAutoScalingClient(credential);
// as.setEndpoint(region.toAsEndpoint());
return as;
}
@Override
public List<AbstractResource<?>> describeLaunchConfigurations(Account account, Region region, DateTime dt) {
AmazonAutoScaling as = findClient(account, region);
DescribeLaunchConfigurationsRequest req = new DescribeLaunchConfigurationsRequest();
log.debug("start describing instances for account:{} in region:{} via api", account.getId() + "=>" + account.getName(), region);
DescribeLaunchConfigurationsResult res = as.describeLaunchConfigurations(req);
return converter.toAsLaunchConfigurations(res.getLaunchConfigurations(), account.getId(), region, dt);
}
@Override
public List<AbstractResource<?>> describeAutoScalingGroups(Account account, Region region, DateTime dt) {
AmazonAutoScaling as = findClient(account, region);
DescribeAutoScalingGroupsRequest req = new DescribeAutoScalingGroupsRequest();
log.debug("start describing auto scaling groups for account:{} in region:{} via api", account.getId() + "=>" + account.getName(), region);
DescribeAutoScalingGroupsResult res = as.describeAutoScalingGroups(req);
return converter.toAsGroups(res.getAutoScalingGroups(), account.getId(), region, dt);
}
}