package alien4cloud.it.provider.util;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.jclouds.ContextBuilder;
import org.jclouds.aws.ec2.AWSEC2Api;
import org.jclouds.ec2.domain.Reservation;
import org.jclouds.ec2.domain.RunningInstance;
import org.jclouds.ec2.domain.Volume;
import org.jclouds.ec2.features.ElasticBlockStoreApi;
import org.jclouds.ec2.features.InstanceApi;
import org.jclouds.logging.slf4j.config.SLF4JLoggingModule;
import org.jclouds.rest.ResourceNotFoundException;
import org.jclouds.sshj.config.SshjSshClientModule;
import com.google.common.collect.ImmutableSet;
import com.google.inject.Module;
import alien4cloud.exception.NotFoundException;
public class AwsClient {
private ElasticBlockStoreApi blockStoreApi;
private InstanceApi instanceApi;
public AwsClient() {
String accessKeyId = System.getenv("AWS_ACCESS_KEY_ID");
String secretKey = System.getenv("AWS_SECRET_KEY");
String region = System.getenv("AWS_REGION");
if (StringUtils.isBlank(accessKeyId) || StringUtils.isBlank(secretKey) || StringUtils.isBlank(region)) {
throw new NotFoundException("Aws Client need 3 environment variables set : AWS_ACCESS_KEY_ID, AWS_SECRET_KEY, AWS_REGION");
}
AWSEC2Api ec2Api = ContextBuilder.newBuilder("aws-ec2").credentials(accessKeyId, secretKey)
.modules(ImmutableSet.<Module> of(new SLF4JLoggingModule(), new SshjSshClientModule())).buildApi(AWSEC2Api.class);
blockStoreApi = ec2Api.getElasticBlockStoreApiForRegion(region).get();
instanceApi = ec2Api.getInstanceApiForRegion(region).get();
}
public Reservation<? extends RunningInstance> getCompute(String id) {
Set<? extends Reservation<? extends RunningInstance>> instances = instanceApi.describeInstancesInRegion(null, id);
if (!instances.isEmpty()) {
return instances.iterator().next();
} else {
return null;
}
}
public Volume getVolume(String id) {
try {
Set<Volume> volumes = blockStoreApi.describeVolumesInRegion(null, id);
if (!volumes.isEmpty()) {
return volumes.iterator().next();
} else {
return null;
}
} catch (ResourceNotFoundException e) {
return null;
}
}
public void deleteVolume(String id) {
blockStoreApi.deleteVolumeInRegion(null, id);
}
public void deleteCompute(String id) {
instanceApi.terminateInstancesInRegion(null, id);
}
}