Updated Branches: refs/heads/trunk 454c93cfc -> ff785da1f
WHIRR-753 - Move to jclouds 1.7.0, use security group extension Project: http://git-wip-us.apache.org/repos/asf/whirr/repo Commit: http://git-wip-us.apache.org/repos/asf/whirr/commit/ff785da1 Tree: http://git-wip-us.apache.org/repos/asf/whirr/tree/ff785da1 Diff: http://git-wip-us.apache.org/repos/asf/whirr/diff/ff785da1 Branch: refs/heads/trunk Commit: ff785da1f55e343bf65d15bf34eeb696272d4081 Parents: 454c93c Author: Andrew Bayer <[email protected]> Authored: Tue Jan 7 14:29:14 2014 -0800 Committer: Andrew Bayer <[email protected]> Committed: Tue Jan 7 14:29:14 2014 -0800 ---------------------------------------------------------------------- CHANGES.txt | 3 + .../apache/whirr/compute/BootstrapTemplate.java | 39 ++++--- .../whirr/service/BlobStoreContextBuilder.java | 57 +++------- .../org/apache/whirr/service/ComputeCache.java | 42 +++---- .../apache/whirr/service/FirewallManager.java | 112 +++++++------------ .../whirr/compute/BootstrapTemplateTest.java | 12 +- .../integration/FirewallManagerTest.java | 16 ++- parent/pom.xml | 4 +- 8 files changed, 117 insertions(+), 168 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/whirr/blob/ff785da1/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index fc3207b..4d32e5c 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -8,6 +8,9 @@ Release 0.9.0 (Unreleased Changes) IMPROVEMENTS + WHIRR-753. Move to jclouds 1.7.0, use new SecurityGroup + abstractions. (abayer) + WHIRR-751. Improve Kerberos service (graham) WHIRR-748. Move to jclouds 1.6.2-incubating. (abayer) http://git-wip-us.apache.org/repos/asf/whirr/blob/ff785da1/core/src/main/java/org/apache/whirr/compute/BootstrapTemplate.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/whirr/compute/BootstrapTemplate.java b/core/src/main/java/org/apache/whirr/compute/BootstrapTemplate.java index 7c818b1..8d8c61c 100644 --- a/core/src/main/java/org/apache/whirr/compute/BootstrapTemplate.java +++ b/core/src/main/java/org/apache/whirr/compute/BootstrapTemplate.java @@ -25,28 +25,27 @@ import static org.jclouds.scriptbuilder.domain.Statements.interpret; import static org.jclouds.scriptbuilder.domain.Statements.newStatementList; import static org.jclouds.scriptbuilder.statements.ssh.SshStatements.sshdConfig; +import com.google.common.base.Joiner; +import com.google.common.base.Splitter; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; import org.apache.whirr.ClusterSpec; import org.apache.whirr.InstanceTemplate; import org.apache.whirr.service.jclouds.StatementBuilder; -import org.jclouds.aws.ec2.AWSEC2ApiMetadata; +import org.jclouds.aws.ec2.compute.AWSEC2ComputeService; import org.jclouds.aws.ec2.compute.AWSEC2TemplateOptions; -import org.jclouds.ec2.EC2ApiMetadata; -import org.jclouds.ec2.compute.options.EC2TemplateOptions; -import org.jclouds.ec2.compute.predicates.EC2ImagePredicates; import org.jclouds.compute.ComputeService; import org.jclouds.compute.ComputeServiceContext; import org.jclouds.compute.domain.Template; import org.jclouds.compute.domain.TemplateBuilder; +import org.jclouds.ec2.compute.EC2ComputeService; +import org.jclouds.ec2.compute.options.EC2TemplateOptions; +import org.jclouds.ec2.compute.predicates.EC2ImagePredicates; import org.jclouds.scriptbuilder.domain.OsFamily; import org.jclouds.scriptbuilder.domain.Statement; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.common.base.Joiner; -import com.google.common.base.Splitter; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; - public class BootstrapTemplate { private static final Logger LOG = @@ -100,7 +99,7 @@ public class BootstrapTemplate { ComputeServiceContext context, ClusterSpec spec, Template template, InstanceTemplate instanceTemplate ) { - if (AWSEC2ApiMetadata.CONTEXT_TOKEN.isAssignableFrom(context.getBackendType())) { + if (AWSEC2ComputeService.class.isInstance(context.getComputeService())) { template.getOptions().as(AWSEC2TemplateOptions.class) .spotPrice(instanceTemplate.getAwsEc2SpotPrice() != null ? instanceTemplate.getAwsEc2SpotPrice() : spec.getAwsEc2SpotPrice()); @@ -116,12 +115,12 @@ public class BootstrapTemplate { ClusterSpec spec, Template template, InstanceTemplate instanceTemplate) { - if (EC2ApiMetadata.CONTEXT_TOKEN.isAssignableFrom(context.getBackendType())) { - if (EC2ImagePredicates.rootDeviceType(EBS).apply(template.getImage())) { - template.getOptions().as(EC2TemplateOptions.class).mapEphemeralDeviceToDeviceName("/dev/sdc", "ephemeral1"); - } + if (EC2ComputeService.class.isInstance(context.getComputeService())) { + if (EC2ImagePredicates.rootDeviceType(EBS).apply(template.getImage())) { + template.getOptions().as(EC2TemplateOptions.class).mapEphemeralDeviceToDeviceName("/dev/sdc", "ephemeral1"); } - return setPlacementGroup(context, spec, template, instanceTemplate); + } + return setPlacementGroup(context, spec, template, instanceTemplate); } /** @@ -129,13 +128,13 @@ public class BootstrapTemplate { */ private static Template setPlacementGroup(ComputeServiceContext context, ClusterSpec spec, Template template, InstanceTemplate instanceTemplate) { - if (AWSEC2ApiMetadata.CONTEXT_TOKEN.isAssignableFrom(context.getBackendType())) { - if (spec.getAwsEc2PlacementGroup() != null) { - template.getOptions().as(AWSEC2TemplateOptions.class).placementGroup(spec.getAwsEc2PlacementGroup()); - } + if (AWSEC2ComputeService.class.isInstance(context.getComputeService())) { + if (spec.getAwsEc2PlacementGroup() != null) { + template.getOptions().as(AWSEC2TemplateOptions.class).placementGroup(spec.getAwsEc2PlacementGroup()); } + } - return template; + return template; } // must be used inside InitBuilder, as this sets the shell variables used in this statement http://git-wip-us.apache.org/repos/asf/whirr/blob/ff785da1/core/src/main/java/org/apache/whirr/service/BlobStoreContextBuilder.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/whirr/service/BlobStoreContextBuilder.java b/core/src/main/java/org/apache/whirr/service/BlobStoreContextBuilder.java index 0046bbf..82ce6dc 100644 --- a/core/src/main/java/org/apache/whirr/service/BlobStoreContextBuilder.java +++ b/core/src/main/java/org/apache/whirr/service/BlobStoreContextBuilder.java @@ -18,10 +18,23 @@ package org.apache.whirr.service; +import java.io.Closeable; import java.util.Map; import java.util.Properties; import java.util.Set; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Function; +import com.google.common.base.Objects; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import com.google.common.collect.ForwardingObject; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterables; +import com.google.common.collect.Maps; +import com.google.common.reflect.TypeToken; +import com.google.inject.Module; import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationConverter; import org.apache.whirr.ClusterSpec; @@ -30,13 +43,10 @@ import org.jclouds.ContextBuilder; import org.jclouds.apis.ApiMetadata; import org.jclouds.apis.Apis; import org.jclouds.blobstore.AsyncBlobStore; -import org.jclouds.blobstore.BlobMap; import org.jclouds.blobstore.BlobRequestSigner; import org.jclouds.blobstore.BlobStore; import org.jclouds.blobstore.BlobStoreContext; -import org.jclouds.blobstore.InputStreamMap; import org.jclouds.blobstore.attr.ConsistencyModel; -import org.jclouds.blobstore.options.ListContainerOptions; import org.jclouds.enterprise.config.EnterpriseConfigurationModule; import org.jclouds.logging.slf4j.config.SLF4JLoggingModule; import org.jclouds.providers.ProviderMetadata; @@ -45,19 +55,6 @@ import org.jclouds.rest.Utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Function; -import com.google.common.base.Objects; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.CacheLoader; -import com.google.common.cache.LoadingCache; -import com.google.common.collect.ForwardingObject; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterables; -import com.google.common.collect.Maps; -import com.google.common.reflect.TypeToken; -import com.google.inject.Module; - public class BlobStoreContextBuilder { private static final Logger LOG = LoggerFactory.getLogger(Cache.class); @@ -126,25 +123,7 @@ public class BlobStoreContextBuilder { return delegate().getSigner(); } - @Override - public InputStreamMap createInputStreamMap(String container, ListContainerOptions options) { - return delegate().createInputStreamMap(container, options); - } - - @Override - public InputStreamMap createInputStreamMap(String container) { - return delegate().createInputStreamMap(container); - } - - @Override - public BlobMap createBlobMap(String container, ListContainerOptions options) { - return delegate().createBlobMap(container, options); - } - @Override - public BlobMap createBlobMap(String container) { - return delegate().createBlobMap(container); - } @Override public AsyncBlobStore getAsyncBlobStore() { @@ -162,11 +141,6 @@ public class BlobStoreContextBuilder { } @Override - public Utils getUtils() { - return delegate().getUtils(); - } - - @Override public Utils utils() { return delegate().utils(); } @@ -182,6 +156,11 @@ public class BlobStoreContextBuilder { } @Override + public <A extends Closeable> A unwrapApi(Class<A> apiClass) { + return delegate().unwrapApi(apiClass); + } + + @Override public <C extends Context> C unwrap(TypeToken<C> type) { return delegate().<C>unwrap(type); } http://git-wip-us.apache.org/repos/asf/whirr/blob/ff785da1/core/src/main/java/org/apache/whirr/service/ComputeCache.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/whirr/service/ComputeCache.java b/core/src/main/java/org/apache/whirr/service/ComputeCache.java index 6a4b032..bc51059 100644 --- a/core/src/main/java/org/apache/whirr/service/ComputeCache.java +++ b/core/src/main/java/org/apache/whirr/service/ComputeCache.java @@ -23,10 +23,26 @@ import static org.jclouds.aws.ec2.reference.AWSEC2Constants.PROPERTY_EC2_AMI_QUE import static org.jclouds.aws.ec2.reference.AWSEC2Constants.PROPERTY_EC2_CC_AMI_QUERY; import static org.jclouds.location.reference.LocationConstants.PROPERTY_REGION; +import java.io.Closeable; import java.util.Map; import java.util.Properties; import java.util.Set; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Function; +import com.google.common.base.Objects; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import com.google.common.collect.ForwardingObject; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterables; +import com.google.common.collect.Maps; +import com.google.common.eventbus.AllowConcurrentEvents; +import com.google.common.eventbus.Subscribe; +import com.google.common.reflect.TypeToken; +import com.google.inject.Module; import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationConverter; import org.apache.commons.lang.StringUtils; @@ -55,22 +71,6 @@ import org.jclouds.sshj.config.SshjSshClientModule; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Function; -import com.google.common.base.Objects; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.CacheLoader; -import com.google.common.cache.LoadingCache; -import com.google.common.collect.ForwardingObject; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterables; -import com.google.common.collect.Maps; -import com.google.common.eventbus.AllowConcurrentEvents; -import com.google.common.eventbus.Subscribe; -import com.google.common.reflect.TypeToken; -import com.google.inject.Module; - /** * A convenience class for building jclouds {@link ComputeServiceContext} objects. */ @@ -182,11 +182,6 @@ public enum ComputeCache implements Function<ClusterSpec, ComputeServiceContext> } @Override - public Utils getUtils() { - return delegate().getUtils(); - } - - @Override public Utils utils() { return delegate().utils(); } @@ -202,6 +197,11 @@ public enum ComputeCache implements Function<ClusterSpec, ComputeServiceContext> } @Override + public <A extends Closeable> A unwrapApi(Class<A> apiClass) { + return delegate().unwrapApi(apiClass); + } + + @Override public <C extends Context> C unwrap(TypeToken<C> type) { return delegate().<C>unwrap(type); } http://git-wip-us.apache.org/repos/asf/whirr/blob/ff785da1/core/src/main/java/org/apache/whirr/service/FirewallManager.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/whirr/service/FirewallManager.java b/core/src/main/java/org/apache/whirr/service/FirewallManager.java index 0599e43..aa8906f 100644 --- a/core/src/main/java/org/apache/whirr/service/FirewallManager.java +++ b/core/src/main/java/org/apache/whirr/service/FirewallManager.java @@ -27,31 +27,25 @@ import java.util.Collections; import java.util.List; import java.util.Set; +import com.google.common.base.Function; +import com.google.common.base.Predicate; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import org.apache.commons.io.IOUtils; import org.apache.whirr.Cluster; import org.apache.whirr.Cluster.Instance; import org.apache.whirr.ClusterSpec; -import org.jclouds.aws.util.AWSUtils; import org.jclouds.compute.ComputeServiceContext; -import org.jclouds.ec2.EC2ApiMetadata; -import org.jclouds.ec2.EC2Client; -import org.jclouds.ec2.domain.IpProtocol; -import org.jclouds.openstack.nova.v2_0.NovaApiMetadata; -import org.jclouds.openstack.nova.v2_0.domain.Ingress; -import org.jclouds.openstack.nova.v2_0.domain.SecurityGroup; -import org.jclouds.openstack.nova.v2_0.extensions.SecurityGroupApi; +import org.jclouds.compute.domain.SecurityGroup; +import org.jclouds.compute.extensions.SecurityGroupExtension; import org.jclouds.javax.annotation.Nullable; +import org.jclouds.net.domain.IpPermission; +import org.jclouds.net.domain.IpProtocol; import org.jclouds.scriptbuilder.domain.Statement; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.common.base.Function; -import com.google.common.base.Optional; -import com.google.common.base.Predicate; -import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; -import com.google.common.collect.Sets; - public class FirewallManager { public static class StoredRule { @@ -282,66 +276,46 @@ public class FirewallManager { } public static void authorizeIngress(ComputeServiceContext computeServiceContext, - Set<Instance> instances, ClusterSpec clusterSpec, List<String> cidrs, int... ports) { - - if (EC2ApiMetadata.CONTEXT_TOKEN.isAssignableFrom(computeServiceContext.getBackendType())) { - // This code (or something like it) may be added to jclouds (see - // http://code.google.com/p/jclouds/issues/detail?id=336). - // Until then we need this temporary workaround. - String region = AWSUtils.parseHandle(Iterables.get(instances, 0).getId())[0]; - EC2Client ec2Client = computeServiceContext.unwrap(EC2ApiMetadata.CONTEXT_TOKEN).getApi(); - String groupName = "jclouds#" + clusterSpec.getClusterName(); - for (String cidr : cidrs) { - for (int port : ports) { - try { - ec2Client.getSecurityGroupServices() - .authorizeSecurityGroupIngressInRegion(region, groupName, - IpProtocol.TCP, port, port, cidr); - } catch(IllegalStateException e) { - LOG.warn(e.getMessage()); - /* ignore, it means that this permission was already granted */ + Set<Instance> instances, final ClusterSpec clusterSpec, List<String> cidrs, int... ports) { + + try { + if (computeServiceContext.getComputeService().getSecurityGroupExtension().isPresent()) { + SecurityGroupExtension securityGroupExtension = computeServiceContext.getComputeService().getSecurityGroupExtension().get(); + Instance instance = Iterables.getFirst(instances, null); + if (instance != null) { + SecurityGroup group = Iterables.find(securityGroupExtension.listSecurityGroupsForNode(instance.getNodeMetadata().getId()), + new Predicate<SecurityGroup>() { + @Override + public boolean apply(SecurityGroup input) { + if (input.getName().contains(clusterSpec.getClusterName()) || + input.getId().contains(clusterSpec.getClusterName())) { + return true; + } + return false; //To change body of implemented methods use File | Settings | File Templates. + } + }); + + if (group == null) { + group = securityGroupExtension.createSecurityGroup(clusterSpec.getClusterName(), + instance.getNodeMetadata().getLocation()); } - } - } - } else if (NovaApiMetadata.CONTEXT_TOKEN.isAssignableFrom(computeServiceContext.getBackendType())) { - // This code (or something like it) may be added to jclouds (see - // http://code.google.com/p/jclouds/issues/detail?id=336). - // Until then we need this temporary workaround. - Optional<? extends SecurityGroupApi> securityGroupApi = computeServiceContext.unwrap(NovaApiMetadata.CONTEXT_TOKEN) - .getApi() - .getSecurityGroupExtensionForZone(clusterSpec.getTemplate().getLocationId()); - - if (securityGroupApi.isPresent()) { - final String groupName = "jclouds-" + clusterSpec.getClusterName(); - Optional<? extends SecurityGroup> group = securityGroupApi.get().list().firstMatch(new Predicate<SecurityGroup>() { - @Override - public boolean apply(SecurityGroup secGrp) { - return secGrp.getName().equals(groupName); - } - }); - - if (group.isPresent()) { - for (String cidr : cidrs) { - for (int port : ports) { - try { - securityGroupApi.get().createRuleAllowingCidrBlock(group.get().getId(), - Ingress.builder() - .ipProtocol(org.jclouds.openstack.nova.v2_0.domain.IpProtocol.TCP) - .fromPort(port).toPort(port).build(), - cidr); - - } catch(IllegalStateException e) { - LOG.warn(e.getMessage()); - /* ignore, it means that this permission was already granted */ - } - } + + for (int port : ports) { + IpPermission.Builder builder = IpPermission.builder(); + builder.cidrBlocks(cidrs); + builder.ipProtocol(IpProtocol.TCP); + builder.fromPort(port); + builder.toPort(port); + securityGroupExtension.addIpPermission(builder.build(), group); } } else { - LOG.warn("Expected security group " + groupName + " does not exist."); + LOG.warn("Cannot find any instance for group, so cannot determine security group."); } } else { - LOG.warn("OpenStack security group extension not available for this cloud."); + LOG.warn("No security group extension present for provider, so cannot set up security group."); } + } catch (Exception e) { + LOG.error("Error setting up security groups: {}", e); } } } http://git-wip-us.apache.org/repos/asf/whirr/blob/ff785da1/core/src/test/java/org/apache/whirr/compute/BootstrapTemplateTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/whirr/compute/BootstrapTemplateTest.java b/core/src/test/java/org/apache/whirr/compute/BootstrapTemplateTest.java index 3a920af..1b73c12 100644 --- a/core/src/test/java/org/apache/whirr/compute/BootstrapTemplateTest.java +++ b/core/src/test/java/org/apache/whirr/compute/BootstrapTemplateTest.java @@ -28,11 +28,13 @@ import static org.mockito.Mockito.when; import java.net.MalformedURLException; import java.util.Map; +import com.google.common.base.Joiner; +import com.google.common.base.Predicate; +import com.google.common.collect.ImmutableMap; import org.apache.commons.configuration.CompositeConfiguration; import org.apache.whirr.ClusterSpec; import org.apache.whirr.InstanceTemplate; import org.apache.whirr.service.jclouds.StatementBuilder; -import org.jclouds.aws.ec2.AWSEC2ApiMetadata; import org.jclouds.aws.ec2.compute.AWSEC2ComputeService; import org.jclouds.aws.ec2.compute.AWSEC2TemplateOptions; import org.jclouds.compute.ComputeService; @@ -45,11 +47,6 @@ import org.jclouds.compute.options.TemplateOptions; import org.junit.Before; import org.junit.Test; -import com.google.common.base.Joiner; -import com.google.common.base.Predicate; -import com.google.common.collect.ImmutableMap; -import com.google.common.reflect.TypeToken; - public class BootstrapTemplateTest { private StatementBuilder statementBuilder; @@ -117,8 +114,7 @@ private void assertSpotPriceIs( ComputeService computeService = mock(AWSEC2ComputeService.class); ComputeServiceContext context = mock(ComputeServiceContext.class); when(computeService.getContext()).thenReturn(context); - - when(context.getBackendType()).thenReturn(TypeToken.class.cast(AWSEC2ApiMetadata.CONTEXT_TOKEN)); + when(context.getComputeService()).thenReturn(computeService); TemplateBuilder templateBuilder = mock(TemplateBuilder.class); when(computeService.templateBuilder()).thenReturn(templateBuilder); http://git-wip-us.apache.org/repos/asf/whirr/blob/ff785da1/core/src/test/java/org/apache/whirr/service/jclouds/integration/FirewallManagerTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/whirr/service/jclouds/integration/FirewallManagerTest.java b/core/src/test/java/org/apache/whirr/service/jclouds/integration/FirewallManagerTest.java index defe820..b250dca 100644 --- a/core/src/test/java/org/apache/whirr/service/jclouds/integration/FirewallManagerTest.java +++ b/core/src/test/java/org/apache/whirr/service/jclouds/integration/FirewallManagerTest.java @@ -21,6 +21,7 @@ package org.apache.whirr.service.jclouds.integration; import java.io.IOException; import java.util.Set; +import com.google.common.collect.Sets; import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.whirr.Cluster; import org.apache.whirr.ClusterSpec; @@ -30,13 +31,11 @@ import org.apache.whirr.service.FirewallManager; import org.apache.whirr.service.FirewallManager.Rule; import org.jclouds.compute.ComputeServiceContext; import org.jclouds.domain.Credentials; -import org.jclouds.ec2.EC2ApiMetadata; -import org.jclouds.ec2.EC2Client; +import org.jclouds.ec2.EC2Api; +import org.jclouds.ec2.compute.EC2ComputeService; import org.junit.Before; import org.junit.Test; -import com.google.common.collect.Sets; - public class FirewallManagerTest { private final String region = "us-east-1"; @@ -72,13 +71,12 @@ public class FirewallManagerTest { @Test(timeout = TestConstants.ITEST_TIMEOUT) public void testFirewallAuthorizationIsIdempotent() throws IOException { - if (EC2ApiMetadata.CONTEXT_TOKEN.isAssignableFrom(context.getBackendType())) { - EC2Client ec2Client = context.unwrap(EC2ApiMetadata.CONTEXT_TOKEN).getApi(); + if (EC2ComputeService.class.isInstance(context.getComputeService())) { + EC2Api api = context.unwrapApi(EC2Api.class); String groupName = "jclouds#" + clusterSpec.getClusterName(); - ec2Client.getSecurityGroupServices() - .createSecurityGroupInRegion(region, groupName, "group description"); + api.getSecurityGroupApi().get().createSecurityGroupInRegion(region, groupName, "group description"); try { manager.addRule( Rule.create().destination(instances).port(23344) @@ -91,7 +89,7 @@ public class FirewallManagerTest { manager.authorizeAllRules(); } finally { - ec2Client.getSecurityGroupServices() + api.getSecurityGroupApi().get() .deleteSecurityGroupInRegion(region, groupName); } } http://git-wip-us.apache.org/repos/asf/whirr/blob/ff785da1/parent/pom.xml ---------------------------------------------------------------------- diff --git a/parent/pom.xml b/parent/pom.xml index 75b2b94..82efa4f 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -44,13 +44,13 @@ <commons.io.version>1.4</commons.io.version> <common-ssl.version>0.3.11</common-ssl.version> <dnsjava.version>2.1.1</dnsjava.version> - <guava.version>14.0.1</guava.version> + <guava.version>15.0</guava.version> <hadoop.version>1.0.4</hadoop.version> <hamcrest.version>1.1</hamcrest.version> <hama.version>0.4.0-incubating</hama.version> <hbase.version>0.94.1</hbase.version> <jackson.version>1.5.2</jackson.version> - <jclouds.version>1.6.2-incubating</jclouds.version> + <jclouds.version>1.7.0</jclouds.version> <jdom.version>1.1</jdom.version> <jopt.simple.version>4.3</jopt.simple.version> <jsch.version>0.1.48</jsch.version>
