You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by na...@apache.org on 2017/01/25 09:54:20 UTC
jclouds-labs git commit: JCLOUDS-1208 Implement the
TemplateOptions.inboundPorts in ProfitBricks REST
Repository: jclouds-labs
Updated Branches:
refs/heads/master f749c88ec -> b083f4c2b
JCLOUDS-1208 Implement the TemplateOptions.inboundPorts in ProfitBricks REST
Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/b083f4c2
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/b083f4c2
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/b083f4c2
Branch: refs/heads/master
Commit: b083f4c2b1aaf005797d2999910745bab8d110a4
Parents: f749c88
Author: Ali Bazlamit <al...@hotmail.com>
Authored: Wed Jan 18 12:08:05 2017 +0200
Committer: Ignasi Barrera <na...@apache.org>
Committed: Wed Jan 25 10:52:44 2017 +0100
----------------------------------------------------------------------
.../ProfitBricksComputeServiceAdapter.java | 76 ++++++++++++--------
.../ProfitBricksComputeServiceLiveTest.java | 34 ++++++++-
2 files changed, 78 insertions(+), 32 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/b083f4c2/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/compute/ProfitBricksComputeServiceAdapter.java
----------------------------------------------------------------------
diff --git a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/compute/ProfitBricksComputeServiceAdapter.java b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/compute/ProfitBricksComputeServiceAdapter.java
index be34f3f..0f15123 100644
--- a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/compute/ProfitBricksComputeServiceAdapter.java
+++ b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/compute/ProfitBricksComputeServiceAdapter.java
@@ -17,33 +17,39 @@
package org.apache.jclouds.profitbricks.rest.compute;
import static com.google.common.base.Preconditions.checkArgument;
+import com.google.common.base.Predicate;
import static com.google.common.base.Strings.isNullOrEmpty;
+import com.google.common.base.Supplier;
+import com.google.common.base.Throwables;
+import com.google.common.collect.FluentIterable;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
import static com.google.common.collect.Iterables.contains;
import static com.google.common.collect.Iterables.filter;
+import com.google.common.collect.Lists;
import static com.google.common.util.concurrent.Futures.getUnchecked;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningExecutorService;
+import com.google.inject.Inject;
import static java.lang.String.format;
-import static org.apache.jclouds.profitbricks.rest.config.ProfitBricksComputeProperties.POLL_PREDICATE_DATACENTER;
-import static org.apache.jclouds.profitbricks.rest.config.ProfitBricksComputeProperties.POLL_PREDICATE_NIC;
-import static org.apache.jclouds.profitbricks.rest.config.ProfitBricksComputeProperties.POLL_PREDICATE_SERVER;
-import static org.jclouds.Constants.PROPERTY_USER_THREADS;
-import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_RUNNING;
-import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_SUSPENDED;
-
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import java.util.concurrent.Callable;
-
import javax.annotation.Resource;
import javax.inject.Named;
import javax.inject.Singleton;
-
import org.apache.jclouds.profitbricks.rest.ProfitBricksApi;
import org.apache.jclouds.profitbricks.rest.compute.concurrent.ProvisioningJob;
import org.apache.jclouds.profitbricks.rest.compute.concurrent.ProvisioningManager;
import org.apache.jclouds.profitbricks.rest.compute.function.ProvisionableToImage;
import org.apache.jclouds.profitbricks.rest.compute.strategy.TemplateWithDataCenter;
+import static org.apache.jclouds.profitbricks.rest.config.ProfitBricksComputeProperties.POLL_PREDICATE_DATACENTER;
+import static org.apache.jclouds.profitbricks.rest.config.ProfitBricksComputeProperties.POLL_PREDICATE_NIC;
+import static org.apache.jclouds.profitbricks.rest.config.ProfitBricksComputeProperties.POLL_PREDICATE_SERVER;
import org.apache.jclouds.profitbricks.rest.domain.DataCenter;
+import org.apache.jclouds.profitbricks.rest.domain.FirewallRule;
import org.apache.jclouds.profitbricks.rest.domain.Image;
import org.apache.jclouds.profitbricks.rest.domain.Lan;
import org.apache.jclouds.profitbricks.rest.domain.Nic;
@@ -60,7 +66,10 @@ import org.apache.jclouds.profitbricks.rest.ids.ServerRef;
import org.apache.jclouds.profitbricks.rest.ids.VolumeRef;
import org.apache.jclouds.profitbricks.rest.util.Passwords;
import org.apache.jclouds.profitbricks.rest.util.Trackables;
+import static org.jclouds.Constants.PROPERTY_USER_THREADS;
import org.jclouds.compute.ComputeServiceAdapter;
+import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_RUNNING;
+import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_SUSPENDED;
import org.jclouds.compute.domain.Hardware;
import org.jclouds.compute.domain.HardwareBuilder;
import org.jclouds.compute.domain.Processor;
@@ -70,23 +79,13 @@ import org.jclouds.compute.domain.internal.VolumeImpl;
import org.jclouds.compute.options.TemplateOptions;
import org.jclouds.compute.reference.ComputeServiceConstants;
import org.jclouds.compute.util.ComputeServiceUtils;
+import static org.jclouds.compute.util.ComputeServiceUtils.getPortRangesFromList;
import org.jclouds.domain.Location;
import org.jclouds.domain.LocationScope;
import org.jclouds.domain.LoginCredentials;
import org.jclouds.logging.Logger;
import org.jclouds.rest.ResourceNotFoundException;
-import com.google.common.base.Predicate;
-import com.google.common.base.Supplier;
-import com.google.common.base.Throwables;
-import com.google.common.collect.FluentIterable;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.ListeningExecutorService;
-import com.google.inject.Inject;
-
@Singleton
public class ProfitBricksComputeServiceAdapter implements ComputeServiceAdapter<ServerInDataCenter, Hardware, Provisionable, Location> {
@@ -149,6 +148,7 @@ public class ProfitBricksComputeServiceAdapter implements ComputeServiceAdapter<
final String loginUser = isNullOrEmpty(options.getLoginUser()) ? "root" : options.getLoginUser();
final String password = options.hasLoginPassword() ? options.getLoginPassword() : Passwords.generate();
final org.jclouds.compute.domain.Image image = template.getImage();
+ final int[] inboundPorts = template.getOptions().getInboundPorts();
// provision all volumes based on hardware
List<? extends Volume> volumes = hardware.getVolumes();
@@ -175,12 +175,12 @@ public class ProfitBricksComputeServiceAdapter implements ComputeServiceAdapter<
type(VolumeType.HDD);
org.apache.jclouds.profitbricks.rest.domain.Volume vol = (org.apache.jclouds.profitbricks.rest.domain.Volume) provisioningManager
- .provision(jobFactory.create(dataCenterId, new Supplier<Object>() {
- @Override
- public Object get() {
- return api.volumeApi().createVolume(request.build());
- }
- }));
+ .provision(jobFactory.create(dataCenterId, new Supplier<Object>() {
+ @Override
+ public Object get() {
+ return api.volumeApi().createVolume(request.build());
+ }
+ }));
volumeIds.add(vol.id());
logger.trace(">> provisioning complete for volume. returned id='%s'", vol.id());
@@ -281,15 +281,33 @@ public class ProfitBricksComputeServiceAdapter implements ComputeServiceAdapter<
.name("jclouds" + name)
.dhcp(Boolean.TRUE)
.lan(lanId)
- .firewallActive(Boolean.FALSE)
+ .firewallActive(inboundPorts.length > 0)
.serverId(server.id()).
build());
-
+
trackables.waitUntilRequestCompleted(nic);
waitNICUntilAvailable.apply(NicRef.create(dataCenterId, server.id(), nic.id()));
waitDcUntilAvailable.apply(dataCenterId);
waitServerUntilAvailable.apply(ServerRef.create(dataCenterId, server.id()));
+ Map<Integer, Integer> portsRange = getPortRangesFromList(inboundPorts);
+
+ for (Map.Entry<Integer, Integer> range : portsRange.entrySet()) {
+ FirewallRule rule = api.firewallApi().create(
+ FirewallRule.Request.creatingBuilder()
+ .dataCenterId(dataCenterId)
+ .serverId(server.id())
+ .nicId(nic.id())
+ .name(server.properties().name() + " jclouds-firewall")
+ .protocol(FirewallRule.Protocol.TCP)
+ .portRangeStart(range.getKey())
+ .portRangeEnd(range.getValue())
+ .build()
+ );
+ trackables.waitUntilRequestCompleted(rule);
+
+ }
+
//connect the rest of volumes to server;delete if fails
final int volumeCount = volumeIds.size();
for (int j = 1; j < volumeCount; j++) { // skip first; already connected
@@ -400,7 +418,7 @@ public class ProfitBricksComputeServiceAdapter implements ComputeServiceAdapter<
ImmutableList.Builder<Provisionable> provisionables = ImmutableList.builder();
provisionables.addAll(getUnchecked(images));
provisionables.addAll(getUnchecked(snapshots));
-
+
return provisionables.build();
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/b083f4c2/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/compute/ProfitBricksComputeServiceLiveTest.java
----------------------------------------------------------------------
diff --git a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/compute/ProfitBricksComputeServiceLiveTest.java b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/compute/ProfitBricksComputeServiceLiveTest.java
index a3a15b3..3f89fe5 100644
--- a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/compute/ProfitBricksComputeServiceLiveTest.java
+++ b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/compute/ProfitBricksComputeServiceLiveTest.java
@@ -18,24 +18,34 @@ package org.apache.jclouds.profitbricks.rest.compute;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
import static com.google.common.collect.Iterables.getOnlyElement;
import com.google.inject.Module;
+import org.apache.jclouds.profitbricks.rest.ProfitBricksApi;
+import org.apache.jclouds.profitbricks.rest.config.ProfitBricksRateLimitModule;
+import org.apache.jclouds.profitbricks.rest.domain.FirewallRule;
+import org.apache.jclouds.profitbricks.rest.domain.Server;
+import org.apache.jclouds.profitbricks.rest.domain.options.DepthOptions;
+import org.apache.jclouds.profitbricks.rest.domain.zonescoped.DataCenterAndId;
import static org.assertj.core.api.Assertions.assertThat;
+import org.jclouds.compute.RunNodesException;
import org.jclouds.compute.domain.ExecResponse;
import org.jclouds.compute.domain.NodeMetadata;
import org.jclouds.compute.domain.Template;
import org.jclouds.compute.internal.BaseComputeServiceLiveTest;
+import org.jclouds.compute.predicates.NodePredicates;
import static org.jclouds.compute.predicates.NodePredicates.inGroup;
-
-import org.apache.jclouds.profitbricks.rest.config.ProfitBricksRateLimitModule;
import org.jclouds.logging.config.LoggingModule;
import org.jclouds.logging.slf4j.config.SLF4JLoggingModule;
import org.jclouds.sshj.config.SshjSshClientModule;
+import org.testng.Assert;
import org.testng.annotations.Test;
@Test(groups = "live", singleThreaded = true, testName = "ProfitBricksComputeServiceLiveTest")
public class ProfitBricksComputeServiceLiveTest extends BaseComputeServiceLiveTest {
+ static ProfitBricksApi pbApi;
+
public ProfitBricksComputeServiceLiveTest() {
provider = "profitbricks-rest";
}
@@ -49,7 +59,7 @@ public class ProfitBricksComputeServiceLiveTest extends BaseComputeServiceLiveTe
protected LoggingModule getLoggingModule() {
return new SLF4JLoggingModule();
}
-
+
@Override
protected Iterable<Module> setupModules() {
ImmutableSet.Builder<Module> modules = ImmutableSet.builder();
@@ -84,6 +94,23 @@ public class ProfitBricksComputeServiceLiveTest extends BaseComputeServiceLiveTe
}
@Override
+ protected void createAndRunAServiceInGroup(String group) throws RunNodesException {
+ super.createAndRunAServiceInGroup(group);
+ pbApi = client.getContext().unwrapApi(ProfitBricksApi.class);
+
+ int matches = 0;
+ NodeMetadata node = Iterables.getOnlyElement(client.listNodesDetailsMatching(NodePredicates.inGroup(group)));
+ DataCenterAndId datacenterAndId = DataCenterAndId.fromSlashEncoded(node.getId());
+ Server server = pbApi.serverApi().getServer(datacenterAndId.getDataCenter(), datacenterAndId.getId(), new DepthOptions().depth(5));
+ for (FirewallRule rule : server.entities().nics().items().get(0).entities().firewallrules().items()) {
+ if (rule.properties().portRangeStart() == 22 || rule.properties().portRangeStart() == 8080) {
+ matches++;
+ }
+ }
+ Assert.assertEquals(2, matches);
+ }
+
+ @Override
@Test
public void testCreateNodeWithCustomHardware() throws Exception {
Template template = buildTemplate(templateBuilder()
@@ -113,4 +140,5 @@ public class ProfitBricksComputeServiceLiveTest extends BaseComputeServiceLiveTe
client.destroyNodesMatching(inGroup(group + "custom"));
}
}
+
}