mirror of https://github.com/apache/jclouds.git
Issue 258 added missing methods and a unit test. fixed live test to test all regions
This commit is contained in:
parent
596ca233e3
commit
570e6366a6
|
@ -23,6 +23,7 @@ import org.jclouds.aws.ec2.services.AMIAsyncClient;
|
|||
import org.jclouds.aws.ec2.services.AvailabilityZoneAndRegionAsyncClient;
|
||||
import org.jclouds.aws.ec2.services.ElasticBlockStoreAsyncClient;
|
||||
import org.jclouds.aws.ec2.services.ElasticIPAddressAsyncClient;
|
||||
import org.jclouds.aws.ec2.services.ElasticLoadBalancerAsyncClient;
|
||||
import org.jclouds.aws.ec2.services.InstanceAsyncClient;
|
||||
import org.jclouds.aws.ec2.services.KeyPairAsyncClient;
|
||||
import org.jclouds.aws.ec2.services.MonitoringAsyncClient;
|
||||
|
@ -76,4 +77,9 @@ public interface EC2AsyncClient {
|
|||
* Provides asynchronous access to Elastic Block Store services.
|
||||
*/
|
||||
ElasticBlockStoreAsyncClient getElasticBlockStoreServices();
|
||||
|
||||
/**
|
||||
* Provides asynchronous access to Elastic Load Balancer services.
|
||||
*/
|
||||
ElasticLoadBalancerAsyncClient getElasticLoadBalancerServices();
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@ import org.jclouds.aws.ec2.services.AMIClient;
|
|||
import org.jclouds.aws.ec2.services.AvailabilityZoneAndRegionClient;
|
||||
import org.jclouds.aws.ec2.services.ElasticBlockStoreClient;
|
||||
import org.jclouds.aws.ec2.services.ElasticIPAddressClient;
|
||||
import org.jclouds.aws.ec2.services.ElasticLoadBalancerClient;
|
||||
import org.jclouds.aws.ec2.services.InstanceClient;
|
||||
import org.jclouds.aws.ec2.services.KeyPairClient;
|
||||
import org.jclouds.aws.ec2.services.MonitoringClient;
|
||||
|
@ -76,4 +77,9 @@ public interface EC2Client {
|
|||
* Provides synchronous access to Elastic Block Store services.
|
||||
*/
|
||||
ElasticBlockStoreClient getElasticBlockStoreServices();
|
||||
|
||||
/**
|
||||
* Provides synchronous access to Elastic Load Balancer services.
|
||||
*/
|
||||
ElasticLoadBalancerClient getElasticLoadBalancerServices();
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
package org.jclouds.aws.ec2;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
import static org.jclouds.aws.ec2.reference.EC2Constants.PROPERTY_EC2_AMI_OWNERS;
|
||||
import static org.jclouds.aws.ec2.reference.EC2Constants.*;
|
||||
import static org.jclouds.aws.ec2.reference.EC2Constants.PROPERTY_EC2_ENDPOINT;
|
||||
import static org.jclouds.aws.reference.AWSConstants.PROPERTY_AWS_ACCESSKEYID;
|
||||
import static org.jclouds.aws.reference.AWSConstants.PROPERTY_AWS_EXPIREINTERVAL;
|
||||
|
@ -40,6 +40,8 @@ public class EC2PropertiesBuilder extends PropertiesBuilder {
|
|||
protected Properties defaultProperties() {
|
||||
Properties properties = super.defaultProperties();
|
||||
properties.setProperty(PROPERTY_EC2_ENDPOINT, "https://ec2.us-east-1.amazonaws.com");
|
||||
properties.setProperty(PROPERTY_ELB_ENDPOINT,
|
||||
"https://elasticloadbalancing.us-east-1.amazonaws.com");
|
||||
properties.setProperty(PROPERTY_AWS_EXPIREINTERVAL, "60");
|
||||
// alestic and canonical
|
||||
properties.setProperty(PROPERTY_EC2_AMI_OWNERS, "063491364108,099720109477");
|
||||
|
|
|
@ -27,7 +27,9 @@ import java.util.concurrent.TimeUnit;
|
|||
import javax.inject.Named;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.aws.domain.Region;
|
||||
import org.jclouds.aws.ec2.EC2;
|
||||
import org.jclouds.aws.ec2.ELB;
|
||||
import org.jclouds.aws.ec2.domain.AvailabilityZoneInfo;
|
||||
import org.jclouds.aws.ec2.domain.RunningInstance;
|
||||
import org.jclouds.aws.ec2.predicates.InstanceStateRunning;
|
||||
|
@ -41,6 +43,8 @@ import org.jclouds.aws.ec2.services.ElasticBlockStoreAsyncClient;
|
|||
import org.jclouds.aws.ec2.services.ElasticBlockStoreClient;
|
||||
import org.jclouds.aws.ec2.services.ElasticIPAddressAsyncClient;
|
||||
import org.jclouds.aws.ec2.services.ElasticIPAddressClient;
|
||||
import org.jclouds.aws.ec2.services.ElasticLoadBalancerAsyncClient;
|
||||
import org.jclouds.aws.ec2.services.ElasticLoadBalancerClient;
|
||||
import org.jclouds.aws.ec2.services.InstanceAsyncClient;
|
||||
import org.jclouds.aws.ec2.services.InstanceClient;
|
||||
import org.jclouds.aws.ec2.services.KeyPairAsyncClient;
|
||||
|
@ -70,6 +74,7 @@ import org.jclouds.rest.RestClientFactory;
|
|||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.ImmutableBiMap;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.google.inject.Provides;
|
||||
|
@ -110,6 +115,26 @@ public class EC2RestClientModule extends AbstractModule {
|
|||
bindRetryHandlers();
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
@ELB
|
||||
protected URI provideELBURI(@Named(EC2Constants.PROPERTY_ELB_ENDPOINT) String endpoint) {
|
||||
return URI.create(endpoint);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
@ELB
|
||||
Map<String, URI> provideELBRegions() {
|
||||
return ImmutableMap.<String, URI> of(Region.US_EAST_1, URI
|
||||
.create("https://elasticloadbalancing.us-east-1.amazonaws.com"), Region.US_WEST_1,
|
||||
URI.create("https://elasticloadbalancing.us-west-1.amazonaws.com"),
|
||||
Region.EU_WEST_1,
|
||||
URI.create("https://elasticloadbalancing.eu-west-1.amazonaws.com"),
|
||||
Region.AP_SOUTHEAST_1, URI
|
||||
.create("https://elasticloadbalancing.ap-southeast-1.amazonaws.com"));
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
@EC2
|
||||
|
@ -130,8 +155,8 @@ public class EC2RestClientModule extends AbstractModule {
|
|||
|
||||
@Provides
|
||||
@Singleton
|
||||
Map<String, String> provideAvailabilityZoneToRegions(
|
||||
AvailabilityZoneAndRegionClient client, @EC2 Map<String, URI> regions) {
|
||||
Map<String, String> provideAvailabilityZoneToRegions(AvailabilityZoneAndRegionClient client,
|
||||
@EC2 Map<String, URI> regions) {
|
||||
Map<String, String> map = Maps.newHashMap();
|
||||
for (String region : regions.keySet()) {
|
||||
for (AvailabilityZoneInfo zoneInfo : client.describeAvailabilityZonesInRegion(region)) {
|
||||
|
@ -175,6 +200,13 @@ public class EC2RestClientModule extends AbstractModule {
|
|||
return factory.create(ElasticIPAddressAsyncClient.class);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
protected ElasticLoadBalancerAsyncClient provideElasticLoadBalancerAsyncClient(
|
||||
RestClientFactory factory) {
|
||||
return factory.create(ElasticLoadBalancerAsyncClient.class);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
public ElasticIPAddressClient provideElasticIPAddressClient(ElasticIPAddressAsyncClient client)
|
||||
|
@ -263,6 +295,14 @@ public class EC2RestClientModule extends AbstractModule {
|
|||
return SyncProxy.create(ElasticBlockStoreClient.class, client);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
public ElasticLoadBalancerClient provideElasticLoadBalancerClient(
|
||||
ElasticLoadBalancerAsyncClient client) throws IllegalArgumentException,
|
||||
SecurityException, NoSuchMethodException {
|
||||
return SyncProxy.create(ElasticLoadBalancerClient.class, client);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
@EC2
|
||||
|
|
|
@ -28,6 +28,7 @@ import org.jclouds.aws.ec2.services.AMIAsyncClient;
|
|||
import org.jclouds.aws.ec2.services.AvailabilityZoneAndRegionAsyncClient;
|
||||
import org.jclouds.aws.ec2.services.ElasticBlockStoreAsyncClient;
|
||||
import org.jclouds.aws.ec2.services.ElasticIPAddressAsyncClient;
|
||||
import org.jclouds.aws.ec2.services.ElasticLoadBalancerAsyncClient;
|
||||
import org.jclouds.aws.ec2.services.InstanceAsyncClient;
|
||||
import org.jclouds.aws.ec2.services.KeyPairAsyncClient;
|
||||
import org.jclouds.aws.ec2.services.MonitoringAsyncClient;
|
||||
|
@ -48,6 +49,7 @@ public class EC2AsyncClientImpl implements EC2AsyncClient {
|
|||
private final MonitoringAsyncClient monitoringServices;
|
||||
private final AvailabilityZoneAndRegionAsyncClient availabilityZoneAndRegionServices;
|
||||
private final ElasticBlockStoreAsyncClient elasticBlockStoreServices;
|
||||
private final ElasticLoadBalancerAsyncClient elasticLoadBalancerAsyncClient;
|
||||
|
||||
@Inject
|
||||
public EC2AsyncClientImpl(AMIAsyncClient AMIServices,
|
||||
|
@ -56,7 +58,8 @@ public class EC2AsyncClientImpl implements EC2AsyncClient {
|
|||
SecurityGroupAsyncClient securityGroupServices,
|
||||
MonitoringAsyncClient monitoringServices,
|
||||
AvailabilityZoneAndRegionAsyncClient availabilityZoneAndRegionServices,
|
||||
ElasticBlockStoreAsyncClient elasticBlockStoreServices) {
|
||||
ElasticBlockStoreAsyncClient elasticBlockStoreServices,
|
||||
ElasticLoadBalancerAsyncClient elasticLoadBalancerAsyncClient) {
|
||||
this.AMIServices = checkNotNull(AMIServices, "AMIServices");
|
||||
this.elasticIPAddressServices = checkNotNull(elasticIPAddressServices,
|
||||
"elasticIPAddressServices");
|
||||
|
@ -68,11 +71,14 @@ public class EC2AsyncClientImpl implements EC2AsyncClient {
|
|||
"availabilityZoneAndRegionServices");
|
||||
this.elasticBlockStoreServices = checkNotNull(elasticBlockStoreServices,
|
||||
"elasticBlockStoreServices");
|
||||
this.elasticLoadBalancerAsyncClient = checkNotNull(elasticLoadBalancerAsyncClient,
|
||||
"elasticLoadBalancerAsyncClient");
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public AMIAsyncClient getAMIServices() {
|
||||
return AMIServices;
|
||||
}
|
||||
|
@ -80,6 +86,7 @@ public class EC2AsyncClientImpl implements EC2AsyncClient {
|
|||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public ElasticIPAddressAsyncClient getElasticIPAddressServices() {
|
||||
return elasticIPAddressServices;
|
||||
}
|
||||
|
@ -87,6 +94,7 @@ public class EC2AsyncClientImpl implements EC2AsyncClient {
|
|||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public InstanceAsyncClient getInstanceServices() {
|
||||
return instanceServices;
|
||||
}
|
||||
|
@ -94,6 +102,7 @@ public class EC2AsyncClientImpl implements EC2AsyncClient {
|
|||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public KeyPairAsyncClient getKeyPairServices() {
|
||||
return keyPairServices;
|
||||
}
|
||||
|
@ -101,6 +110,7 @@ public class EC2AsyncClientImpl implements EC2AsyncClient {
|
|||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public SecurityGroupAsyncClient getSecurityGroupServices() {
|
||||
return securityGroupServices;
|
||||
}
|
||||
|
@ -108,6 +118,7 @@ public class EC2AsyncClientImpl implements EC2AsyncClient {
|
|||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public MonitoringAsyncClient getMonitoringServices() {
|
||||
return monitoringServices;
|
||||
}
|
||||
|
@ -115,6 +126,7 @@ public class EC2AsyncClientImpl implements EC2AsyncClient {
|
|||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public AvailabilityZoneAndRegionAsyncClient getAvailabilityZoneAndRegionServices() {
|
||||
return availabilityZoneAndRegionServices;
|
||||
}
|
||||
|
@ -122,8 +134,17 @@ public class EC2AsyncClientImpl implements EC2AsyncClient {
|
|||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public ElasticBlockStoreAsyncClient getElasticBlockStoreServices() {
|
||||
return elasticBlockStoreServices;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public ElasticLoadBalancerAsyncClient getElasticLoadBalancerServices() {
|
||||
return elasticLoadBalancerAsyncClient;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -28,6 +28,7 @@ import org.jclouds.aws.ec2.services.AMIClient;
|
|||
import org.jclouds.aws.ec2.services.AvailabilityZoneAndRegionClient;
|
||||
import org.jclouds.aws.ec2.services.ElasticBlockStoreClient;
|
||||
import org.jclouds.aws.ec2.services.ElasticIPAddressClient;
|
||||
import org.jclouds.aws.ec2.services.ElasticLoadBalancerClient;
|
||||
import org.jclouds.aws.ec2.services.InstanceClient;
|
||||
import org.jclouds.aws.ec2.services.KeyPairClient;
|
||||
import org.jclouds.aws.ec2.services.MonitoringClient;
|
||||
|
@ -48,13 +49,15 @@ public class EC2ClientImpl implements EC2Client {
|
|||
private final MonitoringClient monitoringServices;
|
||||
private final AvailabilityZoneAndRegionClient availabilityZoneAndRegionServices;
|
||||
private final ElasticBlockStoreClient elasticBlockStoreServices;
|
||||
private final ElasticLoadBalancerClient elasticLoadBalancerClient;
|
||||
|
||||
@Inject
|
||||
public EC2ClientImpl(AMIClient AMIServices, ElasticIPAddressClient elasticIPAddressServices,
|
||||
InstanceClient instanceServices, KeyPairClient keyPairServices,
|
||||
SecurityGroupClient securityGroupServices, MonitoringClient monitoringServices,
|
||||
AvailabilityZoneAndRegionClient availabilityZoneAndRegionServices,
|
||||
ElasticBlockStoreClient elasticBlockStoreServices) {
|
||||
ElasticBlockStoreClient elasticBlockStoreServices,
|
||||
ElasticLoadBalancerClient elasticLoadBalancerClient) {
|
||||
this.AMIServices = checkNotNull(AMIServices, "AMIServices");
|
||||
this.elasticIPAddressServices = checkNotNull(elasticIPAddressServices,
|
||||
"elasticIPAddressServices");
|
||||
|
@ -66,11 +69,14 @@ public class EC2ClientImpl implements EC2Client {
|
|||
"availabilityZoneAndRegionServices");
|
||||
this.elasticBlockStoreServices = checkNotNull(elasticBlockStoreServices,
|
||||
"elasticBlockStoreServices");
|
||||
this.elasticLoadBalancerClient = checkNotNull(elasticLoadBalancerClient,
|
||||
"elasticLoadBalancerClient");
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public AMIClient getAMIServices() {
|
||||
return AMIServices;
|
||||
}
|
||||
|
@ -78,6 +84,7 @@ public class EC2ClientImpl implements EC2Client {
|
|||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public ElasticIPAddressClient getElasticIPAddressServices() {
|
||||
return elasticIPAddressServices;
|
||||
}
|
||||
|
@ -85,6 +92,7 @@ public class EC2ClientImpl implements EC2Client {
|
|||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public InstanceClient getInstanceServices() {
|
||||
return instanceServices;
|
||||
}
|
||||
|
@ -92,6 +100,7 @@ public class EC2ClientImpl implements EC2Client {
|
|||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public KeyPairClient getKeyPairServices() {
|
||||
return keyPairServices;
|
||||
}
|
||||
|
@ -99,6 +108,7 @@ public class EC2ClientImpl implements EC2Client {
|
|||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public SecurityGroupClient getSecurityGroupServices() {
|
||||
return securityGroupServices;
|
||||
}
|
||||
|
@ -106,6 +116,7 @@ public class EC2ClientImpl implements EC2Client {
|
|||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public MonitoringClient getMonitoringServices() {
|
||||
return monitoringServices;
|
||||
}
|
||||
|
@ -113,6 +124,7 @@ public class EC2ClientImpl implements EC2Client {
|
|||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public AvailabilityZoneAndRegionClient getAvailabilityZoneAndRegionServices() {
|
||||
return availabilityZoneAndRegionServices;
|
||||
}
|
||||
|
@ -120,8 +132,17 @@ public class EC2ClientImpl implements EC2Client {
|
|||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public ElasticBlockStoreClient getElasticBlockStoreServices() {
|
||||
return elasticBlockStoreServices;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public ElasticLoadBalancerClient getElasticLoadBalancerServices() {
|
||||
return elasticLoadBalancerClient;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -33,5 +33,6 @@ public interface EC2Constants extends AWSConstants {
|
|||
* the ami owners you wish to use in {@link ComputeService}
|
||||
*/
|
||||
public static final String PROPERTY_EC2_AMI_OWNERS = "jclouds.ec2.ami-owners";
|
||||
public static final String PROPERTY_ELB_ENDPOINT = "jclouds.elb.endpoint";
|
||||
|
||||
}
|
||||
|
|
|
@ -59,12 +59,11 @@ public class EC2Utils {
|
|||
for (Object arg : gRequest.getArgs()) {
|
||||
if (arg instanceof String) {
|
||||
String regionName = (String) arg;
|
||||
if(Region.EU_WEST_1.equals(regionName) ||
|
||||
Region.US_WEST_1.equals(regionName) ||
|
||||
Region.US_EAST_1.equals(regionName) ||
|
||||
Region.US_STANDARD.equals(regionName) ||
|
||||
Region.AP_SOUTHEAST_1.equals(regionName)
|
||||
) return regionName;
|
||||
if (Region.EU_WEST_1.equals(regionName) || Region.US_WEST_1.equals(regionName)
|
||||
|| Region.US_EAST_1.equals(regionName)
|
||||
|| Region.US_STANDARD.equals(regionName)
|
||||
|| Region.AP_SOUTHEAST_1.equals(regionName))
|
||||
return regionName;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
@ -74,9 +73,22 @@ public class EC2Utils {
|
|||
for (Object arg : gRequest.getArgs()) {
|
||||
if (arg instanceof String) {
|
||||
String zone = (String) arg;
|
||||
if(AvailabilityZone.zones.contains(zone)) return zone;
|
||||
if (AvailabilityZone.zones.contains(zone))
|
||||
return zone;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void indexStringArrayToFormValuesWithStringFormat(GeneratedHttpRequest<?> request,
|
||||
String format, Object input) {
|
||||
checkArgument(checkNotNull(input, "input") instanceof String[],
|
||||
"this binder is only valid for String[] : " + input.getClass());
|
||||
String[] values = (String[]) input;
|
||||
for (int i = 0; i < values.length; i++) {
|
||||
request.addFormParam(String.format(format, (i + 1)), checkNotNull(values[i], format
|
||||
.toLowerCase()
|
||||
+ "s[" + i + "]"));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -20,11 +20,9 @@ import org.xml.sax.Attributes;
|
|||
import com.google.common.collect.Sets;
|
||||
|
||||
public class DescribeLoadBalancersResponseHandler extends
|
||||
ParseSax.HandlerWithResult<Set<ElasticLoadBalancer>>
|
||||
{
|
||||
ParseSax.HandlerWithResult<Set<ElasticLoadBalancer>> {
|
||||
@Inject
|
||||
public DescribeLoadBalancersResponseHandler(@EC2 String defaultRegion)
|
||||
{
|
||||
public DescribeLoadBalancersResponseHandler(@EC2 String defaultRegion) {
|
||||
this.defaultRegion = defaultRegion;
|
||||
this.listenerHandler = new LoadBalancerListenerHandler();
|
||||
}
|
||||
|
@ -35,8 +33,7 @@ public class DescribeLoadBalancersResponseHandler extends
|
|||
@Resource
|
||||
protected Logger logger = Logger.NULL;
|
||||
|
||||
private Set<ElasticLoadBalancer> contents = Sets
|
||||
.newLinkedHashSet();
|
||||
private Set<ElasticLoadBalancer> contents = Sets.newLinkedHashSet();
|
||||
private StringBuilder currentText = new StringBuilder();
|
||||
private final String defaultRegion;
|
||||
private final LoadBalancerListenerHandler listenerHandler;
|
||||
|
@ -46,116 +43,79 @@ public class DescribeLoadBalancersResponseHandler extends
|
|||
private boolean inAppCookieStickinessPolicies = false;
|
||||
private boolean inLBCookieStickinessPolicies = false;
|
||||
private boolean inAvailabilityZones = false;
|
||||
//TODO unused?
|
||||
private boolean inLoadBalancerDescriptions = false;
|
||||
|
||||
private ElasticLoadBalancer elb;
|
||||
//TODO unused?
|
||||
private AppCookieStickinessPolicy appCookieStickinessPolicy;
|
||||
//TODO unused?
|
||||
private LBCookieStickinessPolicy lBCookieStickinessPolicy;
|
||||
|
||||
public void startElement(String uri, String localName, String qName,
|
||||
Attributes attributes)
|
||||
{
|
||||
public void startElement(String uri, String localName, String qName, Attributes attributes) {
|
||||
|
||||
if (qName.equals("ListenerDescriptions") || inListenerDescriptions)
|
||||
{
|
||||
if (qName.equals("ListenerDescriptions") || inListenerDescriptions) {
|
||||
inListenerDescriptions = true;
|
||||
}
|
||||
else if (qName.equals("AppCookieStickinessPolicies"))
|
||||
{
|
||||
} else if (qName.equals("AppCookieStickinessPolicies")) {
|
||||
inAppCookieStickinessPolicies = true;
|
||||
}
|
||||
else if (qName.equals("LBCookieStickinessPolicies"))
|
||||
{
|
||||
} else if (qName.equals("LBCookieStickinessPolicies")) {
|
||||
inLBCookieStickinessPolicies = true;
|
||||
}
|
||||
else if (qName.equals("LoadBalancerDescriptions"))
|
||||
{
|
||||
} else if (qName.equals("LoadBalancerDescriptions")) {
|
||||
inLoadBalancerDescriptions = true;
|
||||
}
|
||||
else if (qName.equals("Instances"))
|
||||
{
|
||||
} else if (qName.equals("Instances")) {
|
||||
inInstances = true;
|
||||
}
|
||||
else if (qName.equals("AvailabilityZones"))
|
||||
{
|
||||
} else if (qName.equals("AvailabilityZones")) {
|
||||
inAvailabilityZones = true;
|
||||
}
|
||||
|
||||
if (qName.equals("member"))
|
||||
{
|
||||
if (qName.equals("member")) {
|
||||
if (!(inListenerDescriptions || inAppCookieStickinessPolicies || inInstances
|
||||
|| inLBCookieStickinessPolicies || inAvailabilityZones))
|
||||
{
|
||||
|| inLBCookieStickinessPolicies || inAvailabilityZones)) {
|
||||
elb = new ElasticLoadBalancer();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void endElement(String uri, String localName, String qName)
|
||||
{
|
||||
public void endElement(String uri, String localName, String qName) {
|
||||
logger.info(qName);
|
||||
|
||||
// if end tag is one of below then set inXYZ to false
|
||||
if (qName.equals("ListenerDescriptions"))
|
||||
{
|
||||
if (qName.equals("ListenerDescriptions")) {
|
||||
inListenerDescriptions = false;
|
||||
}
|
||||
else if (qName.equals("AppCookieStickinessPolicies"))
|
||||
{
|
||||
} else if (qName.equals("AppCookieStickinessPolicies")) {
|
||||
inAppCookieStickinessPolicies = false;
|
||||
}
|
||||
else if (qName.equals("LBCookieStickinessPolicies"))
|
||||
{
|
||||
} else if (qName.equals("LBCookieStickinessPolicies")) {
|
||||
inLBCookieStickinessPolicies = false;
|
||||
}
|
||||
else if (qName.equals("LoadBalancerDescriptions"))
|
||||
{
|
||||
} else if (qName.equals("LoadBalancerDescriptions")) {
|
||||
inLoadBalancerDescriptions = false;
|
||||
}
|
||||
else if (qName.equals("Instances"))
|
||||
{
|
||||
} else if (qName.equals("Instances")) {
|
||||
inInstances = false;
|
||||
}
|
||||
else if (qName.equals("AvailabilityZones"))
|
||||
{
|
||||
} else if (qName.equals("AvailabilityZones")) {
|
||||
inAvailabilityZones = false;
|
||||
}
|
||||
|
||||
|
||||
if (qName.equals("DNSName"))
|
||||
{
|
||||
if (qName.equals("DNSName")) {
|
||||
elb.setDnsName(currentText.toString().trim());
|
||||
}
|
||||
else if (qName.equals("LoadBalancerName"))
|
||||
{
|
||||
} else if (qName.equals("LoadBalancerName")) {
|
||||
elb.setName(currentText.toString().trim());
|
||||
}
|
||||
else if (qName.equals("InstanceId"))
|
||||
{
|
||||
} else if (qName.equals("InstanceId")) {
|
||||
elb.getInstanceIds().add(currentText.toString().trim());
|
||||
}
|
||||
|
||||
else if (qName.equals("member"))
|
||||
{
|
||||
else if (qName.equals("member")) {
|
||||
|
||||
if (inAvailabilityZones)
|
||||
{
|
||||
if (inAvailabilityZones) {
|
||||
elb.getAvailabilityZones().add(currentText.toString().trim());
|
||||
}
|
||||
else if (!(inListenerDescriptions || inAppCookieStickinessPolicies || inInstances
|
||||
|| inLBCookieStickinessPolicies || inAvailabilityZones))
|
||||
{
|
||||
try
|
||||
{
|
||||
} else if (!(inListenerDescriptions || inAppCookieStickinessPolicies || inInstances
|
||||
|| inLBCookieStickinessPolicies || inAvailabilityZones)) {
|
||||
try {
|
||||
String region = EC2Utils.findRegionInArgsOrNull(request);
|
||||
if (region == null)
|
||||
region = defaultRegion;
|
||||
|
||||
elb.setRegion(region);
|
||||
contents.add(elb);
|
||||
}
|
||||
catch (NullPointerException e)
|
||||
{
|
||||
} catch (NullPointerException e) {
|
||||
logger.warn(e, "malformed load balancer: %s", localName);
|
||||
}
|
||||
|
||||
|
@ -169,13 +129,11 @@ public class DescribeLoadBalancersResponseHandler extends
|
|||
}
|
||||
|
||||
@Override
|
||||
public Set<ElasticLoadBalancer> getResult()
|
||||
{
|
||||
public Set<ElasticLoadBalancer> getResult() {
|
||||
return contents;
|
||||
}
|
||||
|
||||
public void characters(char ch[], int start, int length)
|
||||
{
|
||||
public void characters(char ch[], int start, int length) {
|
||||
currentText.append(ch, start, length);
|
||||
}
|
||||
|
||||
|
@ -186,39 +144,25 @@ public class DescribeLoadBalancersResponseHandler extends
|
|||
}
|
||||
|
||||
public class LoadBalancerListenerHandler extends
|
||||
ParseSax.HandlerWithResult<Set<LoadBalancerListener>>
|
||||
{
|
||||
ParseSax.HandlerWithResult<Set<LoadBalancerListener>> {
|
||||
private Set<LoadBalancerListener> listeners = Sets.newHashSet();
|
||||
private StringBuilder currentText = new StringBuilder();
|
||||
private LoadBalancerListener listener;
|
||||
|
||||
public void startElement(String uri, String name, String qName,
|
||||
Attributes attrs)
|
||||
{
|
||||
if (qName.equals("member"))
|
||||
{
|
||||
public void startElement(String uri, String name, String qName, Attributes attrs) {
|
||||
if (qName.equals("member")) {
|
||||
listener = new LoadBalancerListener();
|
||||
}
|
||||
}
|
||||
|
||||
public void endElement(String uri, String name, String qName)
|
||||
{
|
||||
if (qName.equals("Protocol"))
|
||||
{
|
||||
public void endElement(String uri, String name, String qName) {
|
||||
if (qName.equals("Protocol")) {
|
||||
listener.setProtocol(currentText.toString().trim());
|
||||
}
|
||||
else if (qName.equals("LoadBalancerPort"))
|
||||
{
|
||||
listener.setLoadBalancerPort(Integer.parseInt(currentText
|
||||
.toString().trim()));
|
||||
}
|
||||
else if (qName.equals("InstancePort"))
|
||||
{
|
||||
listener.setInstancePort(Integer.parseInt(currentText
|
||||
.toString().trim()));
|
||||
}
|
||||
else if (qName.equals("member"))
|
||||
{
|
||||
} else if (qName.equals("LoadBalancerPort")) {
|
||||
listener.setLoadBalancerPort(Integer.parseInt(currentText.toString().trim()));
|
||||
} else if (qName.equals("InstancePort")) {
|
||||
listener.setInstancePort(Integer.parseInt(currentText.toString().trim()));
|
||||
} else if (qName.equals("member")) {
|
||||
listeners.add(listener);
|
||||
}
|
||||
|
||||
|
@ -227,13 +171,11 @@ public class DescribeLoadBalancersResponseHandler extends
|
|||
}
|
||||
|
||||
@Override
|
||||
public Set<LoadBalancerListener> getResult()
|
||||
{
|
||||
public Set<LoadBalancerListener> getResult() {
|
||||
return listeners;
|
||||
}
|
||||
|
||||
public void characters(char ch[], int start, int length)
|
||||
{
|
||||
public void characters(char ch[], int start, int length) {
|
||||
currentText.append(ch, start, length);
|
||||
}
|
||||
|
||||
|
|
|
@ -29,6 +29,7 @@ import javax.inject.Singleton;
|
|||
import org.jclouds.aws.domain.Region;
|
||||
import org.jclouds.aws.ec2.EC2;
|
||||
import org.jclouds.aws.ec2.EC2PropertiesBuilder;
|
||||
import org.jclouds.aws.ec2.ELB;
|
||||
import org.jclouds.aws.ec2.domain.AvailabilityZone;
|
||||
import org.jclouds.aws.filters.FormSigner;
|
||||
import org.jclouds.date.TimeStamp;
|
||||
|
@ -79,6 +80,8 @@ public abstract class BaseEC2AsyncClientTest<T> extends RestClientTest<T> {
|
|||
.build(), "properties"));
|
||||
bind(URI.class).annotatedWith(EC2.class).toInstance(
|
||||
URI.create("https://ec2.amazonaws.com"));
|
||||
bind(URI.class).annotatedWith(ELB.class).toInstance(
|
||||
URI.create("https://elasticloadbalancing.us-east-1.amazonaws.com"));
|
||||
bind(String.class).annotatedWith(EC2.class).toInstance(Region.US_EAST_1);
|
||||
bind(Logger.LoggerFactory.class).toInstance(new LoggerFactory() {
|
||||
public Logger getLogger(String category) {
|
||||
|
@ -105,12 +108,26 @@ public abstract class BaseEC2AsyncClientTest<T> extends RestClientTest<T> {
|
|||
.create("https://ec2.us-west-1.amazonaws.com"));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
@Provides
|
||||
@Singleton
|
||||
@ELB
|
||||
Map<String, URI> provideELBRegions() {
|
||||
return ImmutableMap.<String, URI> of(Region.US_EAST_1, URI
|
||||
.create("https://elasticloadbalancing.us-east-1.amazonaws.com"),
|
||||
Region.US_WEST_1, URI
|
||||
.create("https://elasticloadbalancing.us-west-1.amazonaws.com"),
|
||||
Region.EU_WEST_1, URI
|
||||
.create("https://elasticloadbalancing.eu-west-1.amazonaws.com"),
|
||||
Region.AP_SOUTHEAST_1, URI
|
||||
.create("https://elasticloadbalancing.ap-southeast-1.amazonaws.com"));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
@Singleton
|
||||
@Provides
|
||||
Map<String, String> provideAvailabilityZoneRegionMap() {
|
||||
return ImmutableMap.<String, String> of(AvailabilityZone.US_EAST_1A,
|
||||
Region.US_EAST_1);
|
||||
return ImmutableMap.<String, String> of(AvailabilityZone.US_EAST_1A, Region.US_EAST_1);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -0,0 +1,72 @@
|
|||
/**
|
||||
*
|
||||
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||
*
|
||||
* ====================================================================
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* ====================================================================
|
||||
*/
|
||||
package org.jclouds.aws.ec2.services;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
import org.jclouds.aws.ec2.xml.RegisterInstancesWithLoadBalancerResponseHandler;
|
||||
import org.jclouds.http.functions.ParseSax;
|
||||
import org.jclouds.rest.internal.GeneratedHttpRequest;
|
||||
import org.jclouds.rest.internal.RestAnnotationProcessor;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.inject.TypeLiteral;
|
||||
|
||||
/**
|
||||
* Tests behavior of {@code ElasticLoadBalancerAsyncClient}
|
||||
*
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
@Test(groups = "unit", testName = "ec2.ElasticLoadBalancerAsyncClientTest")
|
||||
public class ElasticLoadBalancerAsyncClientTest extends
|
||||
BaseEC2AsyncClientTest<ElasticLoadBalancerAsyncClient> {
|
||||
|
||||
public void testRegisterInstancesWithLoadBalancer() throws SecurityException,
|
||||
NoSuchMethodException, IOException {
|
||||
Method method = ElasticLoadBalancerAsyncClient.class.getMethod(
|
||||
"registerInstancesWithLoadBalancer", String.class, String.class, String[].class);
|
||||
|
||||
GeneratedHttpRequest<ElasticLoadBalancerAsyncClient> httpMethod = processor.createRequest(
|
||||
method, null, "ReferenceAP1", "i-6055fa09");
|
||||
|
||||
assertRequestLineEquals(httpMethod,
|
||||
"POST https://elasticloadbalancing.us-east-1.amazonaws.com/ HTTP/1.1");
|
||||
assertHeadersEqual(
|
||||
httpMethod,
|
||||
"Content-Length: 89\nContent-Type: application/x-www-form-urlencoded\nHost: elasticloadbalancing.us-east-1.amazonaws.com\n");
|
||||
assertPayloadEquals(
|
||||
httpMethod,
|
||||
"Version=2009-11-25&Action=RegisterInstancesWithLoadBalancer&LoadBalancerName=ReferenceAP1&Instances.member.1.InstanceId=i-6055fa09");
|
||||
|
||||
assertResponseParserClassEquals(method, httpMethod, ParseSax.class);
|
||||
assertSaxResponseParserClassEquals(method,
|
||||
RegisterInstancesWithLoadBalancerResponseHandler.class);
|
||||
assertExceptionParserClassEquals(method, null);
|
||||
|
||||
checkFilters(httpMethod);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected TypeLiteral<RestAnnotationProcessor<ElasticLoadBalancerAsyncClient>> createTypeLiteral() {
|
||||
return new TypeLiteral<RestAnnotationProcessor<ElasticLoadBalancerAsyncClient>>() {
|
||||
};
|
||||
}
|
||||
|
||||
}
|
|
@ -22,6 +22,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
|
|||
import static org.testng.Assert.assertNotNull;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import org.jclouds.aws.domain.Region;
|
||||
import org.jclouds.aws.ec2.EC2AsyncClient;
|
||||
|
@ -35,6 +36,7 @@ import org.testng.annotations.AfterTest;
|
|||
import org.testng.annotations.BeforeGroups;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
|
||||
/**
|
||||
|
@ -43,67 +45,56 @@ import com.google.common.collect.ImmutableSet;
|
|||
* @author Lili Nader
|
||||
*/
|
||||
@Test(groups = "live", sequential = true, testName = "ec2.ElasticLoadBalancerClientLiveTest")
|
||||
public class ElasticLoadBalancerClientLiveTest
|
||||
{
|
||||
public class ElasticLoadBalancerClientLiveTest {
|
||||
|
||||
private ElasticLoadBalancerClient client;
|
||||
private RestContext<EC2AsyncClient, EC2Client> context;
|
||||
|
||||
@BeforeGroups(groups = { "live" })
|
||||
public void setupClient()
|
||||
{
|
||||
String user = checkNotNull(System.getProperty("jclouds.test.user"),
|
||||
"jclouds.test.user");
|
||||
String password = checkNotNull(System.getProperty("jclouds.test.key"),
|
||||
"jclouds.test.key");
|
||||
public void setupClient() {
|
||||
String user = checkNotNull(System.getProperty("jclouds.test.user"), "jclouds.test.user");
|
||||
String password = checkNotNull(System.getProperty("jclouds.test.key"), "jclouds.test.key");
|
||||
|
||||
context = EC2ContextFactory.createContext(user, password,
|
||||
new Log4JLoggingModule()).getProviderSpecificContext();
|
||||
context = EC2ContextFactory.createContext(user, password, new Log4JLoggingModule())
|
||||
.getProviderSpecificContext();
|
||||
client = context.getApi().getElasticLoadBalancerServices();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCreateLoadBalancer()
|
||||
{
|
||||
void testCreateLoadBalancer() {
|
||||
String name = "TestLoadBalancer";
|
||||
for (String region : ImmutableSet.of(Region.US_EAST_1))
|
||||
{
|
||||
String dnsName = client.createLoadBalancer(region, name, "http",
|
||||
80, 80, AvailabilityZone.US_EAST_1A);
|
||||
for (Entry<String, String> regionZone : ImmutableMap.<String, String> of(Region.US_EAST_1,
|
||||
AvailabilityZone.US_EAST_1A, Region.US_WEST_1, AvailabilityZone.US_WEST_1A,
|
||||
Region.EU_WEST_1, AvailabilityZone.EU_WEST_1A, Region.AP_SOUTHEAST_1,
|
||||
AvailabilityZone.AP_SOUTHEAST_1A).entrySet()) {
|
||||
String dnsName = client.createLoadBalancer(regionZone.getKey(), name, "http", 80, 80,
|
||||
regionZone.getValue());
|
||||
assertNotNull(dnsName);
|
||||
assert (dnsName.startsWith(name));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testDescribeLoadBalancers()
|
||||
{
|
||||
@Test(dependsOnMethods = "testCreateLoadBalancer")
|
||||
void testDescribeLoadBalancers() {
|
||||
String name = "TestDescribeLoadBalancer";
|
||||
for (String region : ImmutableSet.of(Region.US_EAST_1))
|
||||
{
|
||||
client.createLoadBalancer(region, name, "http",
|
||||
80, 80, AvailabilityZone.US_EAST_1A);
|
||||
Set<ElasticLoadBalancer> allResults = client.describeLoadBalancers(
|
||||
region, name);
|
||||
for (String region : ImmutableSet.of(Region.US_EAST_1, Region.US_WEST_1, Region.EU_WEST_1,
|
||||
Region.AP_SOUTHEAST_1)) {
|
||||
Set<ElasticLoadBalancer> allResults = client.describeLoadBalancers(region, name);
|
||||
assertNotNull(allResults);
|
||||
assert (allResults.size() >= 1);
|
||||
|
||||
client.deleteLoadBalancer(region, name);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testDeleteLoadBalancer()
|
||||
{
|
||||
for (String region : ImmutableSet.of(Region.US_EAST_1))
|
||||
{
|
||||
void testDeleteLoadBalancer() {
|
||||
for (String region : ImmutableSet.of(Region.US_EAST_1, Region.US_WEST_1, Region.EU_WEST_1,
|
||||
Region.AP_SOUTHEAST_1)) {
|
||||
client.deleteLoadBalancer(region, "TestLoadBalancer");
|
||||
}
|
||||
}
|
||||
|
||||
@AfterTest
|
||||
public void shutdown()
|
||||
{
|
||||
public void shutdown() {
|
||||
context.close();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,16 +24,9 @@ import static org.easymock.classextension.EasyMock.replay;
|
|||
import static org.testng.Assert.assertEquals;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.Date;
|
||||
import java.util.Set;
|
||||
|
||||
import org.jclouds.aws.domain.Region;
|
||||
import org.jclouds.aws.ec2.domain.AvailabilityZone;
|
||||
import org.jclouds.aws.ec2.domain.ElasticLoadBalancer;
|
||||
import org.jclouds.aws.ec2.domain.Image;
|
||||
import org.jclouds.aws.ec2.domain.ElasticLoadBalancer.AppCookieStickinessPolicy;
|
||||
import org.jclouds.aws.ec2.domain.ElasticLoadBalancer.LBCookieStickinessPolicy;
|
||||
import org.jclouds.aws.ec2.domain.ElasticLoadBalancer.LoadBalancerListener;
|
||||
import org.jclouds.http.functions.ParseSax;
|
||||
import org.jclouds.rest.internal.GeneratedHttpRequest;
|
||||
import org.testng.annotations.Test;
|
||||
|
@ -54,7 +47,8 @@ public class DescribeLoadBalancerResponseHandlerTest extends BaseEC2HandlerTest
|
|||
|
||||
Set<ElasticLoadBalancer> contents = Sets.newHashSet();
|
||||
ElasticLoadBalancer dummy = new ElasticLoadBalancer(defaultRegion, "my-load-balancer",
|
||||
ImmutableSet.of("i-5b33e630", "i-8f26d7e4", "i-5933e632"), ImmutableSet.of("us-east-1a"),
|
||||
ImmutableSet.of("i-5b33e630", "i-8f26d7e4", "i-5933e632"), ImmutableSet
|
||||
.of("us-east-1a"),
|
||||
"my-load-balancer-1400212309.us-east-1.elb.amazonaws.com");
|
||||
contents.add(dummy);
|
||||
|
||||
|
@ -63,7 +57,6 @@ public class DescribeLoadBalancerResponseHandlerTest extends BaseEC2HandlerTest
|
|||
assertEquals(result, contents);
|
||||
}
|
||||
|
||||
|
||||
private Set<ElasticLoadBalancer> parseLoadBalancers(InputStream is) {
|
||||
DescribeLoadBalancersResponseHandler handler = injector
|
||||
.getInstance(DescribeLoadBalancersResponseHandler.class);
|
||||
|
|
Loading…
Reference in New Issue