Repository: jclouds-labs
Updated Branches:
  refs/heads/2.0.x f2cc5fc6e -> 71511bb8e


JCLOUDS-1328: Update ProfitBricks to the latest API version


Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/71511bb8
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/71511bb8
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/71511bb8

Branch: refs/heads/2.0.x
Commit: 71511bb8ef495842df7506cd28ac67b173e2db14
Parents: f2cc5fc
Author: Ali Bazlamit <[email protected]>
Authored: Thu Sep 7 21:16:49 2017 +0300
Committer: Ignasi Barrera <[email protected]>
Committed: Fri Sep 8 08:18:59 2017 +0200

----------------------------------------------------------------------
 profitbricks-rest/pom.xml                       |   2 +-
 .../rest/ProfitBricksApiMetadata.java           |   2 +-
 .../rest/ProfitBricksProviderMetadata.java      |   4 +-
 .../rest/binder/lan/UpdateLanRequestBinder.java |  18 +--
 .../volume/CreateVolumeRequestBinder.java       |   9 +-
 .../ProfitBricksComputeServiceAdapter.java      |  10 +-
 .../jclouds/profitbricks/rest/domain/Lan.java   |  55 +++++++--
 .../profitbricks/rest/domain/Volume.java        |  11 +-
 .../CreateFirewallRuleRequestBinderTest.java    |   2 +-
 .../UpdateFirewallRuleRequestBinderTest.java    |   2 +-
 .../image/UpdateImageRequestBinderTest.java     |   2 +-
 .../binder/lan/CreateLanRequestBinderTest.java  |   2 +-
 .../binder/lan/UpdateLanRequestBinderTest.java  |   2 +-
 .../binder/nic/CreateNicRequestBinderTest.java  |   2 +-
 .../binder/nic/UpdateNicRequestBinderTest.java  |   2 +-
 .../server/AttachCdromRequestBinderTest.java    |   2 +-
 .../server/AttachVolumeRequestBinderTest.java   |   2 +-
 .../server/CreateServerRequestBinderTest.java   |   2 +-
 .../server/UpdateServerRequestBinderTest.java   |   2 +-
 .../volume/CreateSnapshotRequestBinderTest.java |   2 +-
 .../volume/CreateVolumeRequestBinderTest.java   |   2 +-
 .../RestoreSnapshotRequestBinderTest.java       |   2 +-
 .../volume/UpdateVolumeRequestBinderTest.java   |   2 +-
 .../ProfitBricksComputeServiceLiveTest.java     |  14 ++-
 .../rest/features/LanApiLiveTest.java           | 123 +++++++++++++------
 .../rest/features/VolumeApiLiveTest.java        |  24 +---
 .../src/test/resources/ipblock/get.json         |   2 +-
 .../test/resources/ipblock/list.depth-5.json    |   6 +-
 .../src/test/resources/ipblock/list.json        |   6 +-
 29 files changed, 205 insertions(+), 111 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/71511bb8/profitbricks-rest/pom.xml
----------------------------------------------------------------------
diff --git a/profitbricks-rest/pom.xml b/profitbricks-rest/pom.xml
index a49f59c..273d8b7 100644
--- a/profitbricks-rest/pom.xml
+++ b/profitbricks-rest/pom.xml
@@ -32,7 +32,7 @@
     <packaging>bundle</packaging>
 
     <properties>
-        
<test.profitbricks-rest.endpoint>https://api.profitbricks.com/cloudapi/v3/</test.profitbricks-rest.endpoint>
+        
<test.profitbricks-rest.endpoint>https://api.profitbricks.com/cloudapi/v4/</test.profitbricks-rest.endpoint>
         
<test.profitbricks-rest.identity>FIXME</test.profitbricks-rest.identity>
         
<test.profitbricks-rest.credential>FIXME</test.profitbricks-rest.credential>
         
<test.profitbricks-rest.api-version>1.3</test.profitbricks-rest.api-version>

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/71511bb8/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/ProfitBricksApiMetadata.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/ProfitBricksApiMetadata.java
 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/ProfitBricksApiMetadata.java
index a39f798..c3078a0 100644
--- 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/ProfitBricksApiMetadata.java
+++ 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/ProfitBricksApiMetadata.java
@@ -54,7 +54,7 @@ public class ProfitBricksApiMetadata extends 
BaseHttpApiMetadata<ProfitBricksApi
                  .identityName("API Username")
                  .credentialName("API Password")
                  
.documentation(URI.create("https://devops.profitbricks.com/api/rest/";))
-                 .defaultEndpoint("https://api.profitbricks.com/cloudapi/v3/";)
+                 .defaultEndpoint("https://api.profitbricks.com/cloudapi/v4/";)
                  .view(ComputeServiceContext.class)
                  
.defaultProperties(ProfitBricksApiMetadata.defaultProperties())
                  .defaultModules(ImmutableSet.<Class<? extends 
Module>>builder()

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/71511bb8/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/ProfitBricksProviderMetadata.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/ProfitBricksProviderMetadata.java
 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/ProfitBricksProviderMetadata.java
index 4953db3..2542be0 100644
--- 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/ProfitBricksProviderMetadata.java
+++ 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/ProfitBricksProviderMetadata.java
@@ -25,6 +25,7 @@ import static 
org.apache.jclouds.profitbricks.rest.config.ProfitBricksComputePro
 import static org.jclouds.Constants.PROPERTY_CONNECTION_TIMEOUT;
 import static org.jclouds.Constants.PROPERTY_ISO3166_CODES;
 import static org.jclouds.Constants.PROPERTY_SO_TIMEOUT;
+import static org.jclouds.compute.config.ComputeServiceProperties.TEMPLATE;
 import static org.jclouds.location.reference.LocationConstants.ISO3166_CODES;
 import static org.jclouds.location.reference.LocationConstants.PROPERTY_REGION;
 import static 
org.jclouds.location.reference.LocationConstants.PROPERTY_REGIONS;
@@ -68,6 +69,7 @@ public class ProfitBricksProviderMetadata extends 
BaseProviderMetadata {
       properties.setProperty(PROPERTY_ZONE + ".us/ewr." + ISO3166_CODES, 
"US-NJ");
       properties.setProperty(PROPERTY_ZONE + ".us/las." + ISO3166_CODES, 
"US-NV");
       properties.setProperty(PROPERTY_ZONE + ".us/lasdev." + ISO3166_CODES, 
"US-NV");
+      properties.put(TEMPLATE, 
"imageNameMatches=Ubuntu,osVersionMatches=1[467]\\.04");
 
       properties.put("jclouds.ssh.max-retries", "7");
       properties.put("jclouds.ssh.retry-auth", "true");
@@ -92,7 +94,7 @@ public class ProfitBricksProviderMetadata extends 
BaseProviderMetadata {
                  .homepage(URI.create("https://www.profitbricks.com/";))
                  
.console(URI.create("https://my.profitbricks.com/dashboard/dcdr2";))
                  .iso3166Codes("DE-BW", "DE-HE", "US-NJ", "US-NV")
-                 .endpoint("https://api.profitbricks.com/cloudapi/v3/";)
+                 .endpoint("https://api.profitbricks.com/cloudapi/v4/";)
                  
.defaultProperties(ProfitBricksProviderMetadata.defaultProperties());
       }
 

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/71511bb8/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/lan/UpdateLanRequestBinder.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/lan/UpdateLanRequestBinder.java
 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/lan/UpdateLanRequestBinder.java
index 8298852..534eed9 100644
--- 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/lan/UpdateLanRequestBinder.java
+++ 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/lan/UpdateLanRequestBinder.java
@@ -32,7 +32,7 @@ public class UpdateLanRequestBinder extends 
BaseProfitBricksRequestBinder<Lan.Re
    private String lanId;
 
    @Inject
-   UpdateLanRequestBinder(Json jsonBinder,  @Provider Supplier<URI> 
endpointSupplier) {
+   UpdateLanRequestBinder(Json jsonBinder, @Provider Supplier<URI> 
endpointSupplier) {
       super("lan", jsonBinder, endpointSupplier);
    }
 
@@ -42,18 +42,22 @@ public class UpdateLanRequestBinder extends 
BaseProfitBricksRequestBinder<Lan.Re
       checkNotNull(payload, "payload");
       checkNotNull(payload.dataCenterId(), "dataCenterId");
       checkNotNull(payload.id(), "id");
-      
+
       dataCenterId = payload.dataCenterId();
       lanId = payload.id();
-      
-      if (payload.isPublic() != null)
-         requestBuilder.put("public",  payload.isPublic());
-            
+
+      if (payload.isPublic() != null) {
+         requestBuilder.put("public", payload.isPublic());
+      }
+      if (payload.ipFailover() != null) {
+         requestBuilder.put("ipFailover", payload.ipFailover());
+      }
+
       return jsonBinder.toJson(requestBuilder);
    }
 
    @Override
-   protected <R extends HttpRequest> R createRequest(R fromRequest, String 
payload) {              
+   protected <R extends HttpRequest> R createRequest(R fromRequest, String 
payload) {
       return 
super.createRequest(genRequest(String.format("datacenters/%s/lans/%s", 
dataCenterId, lanId), fromRequest), payload);
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/71511bb8/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/CreateVolumeRequestBinder.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/CreateVolumeRequestBinder.java
 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/CreateVolumeRequestBinder.java
index a642c2f..8e81d1f 100644
--- 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/CreateVolumeRequestBinder.java
+++ 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/CreateVolumeRequestBinder.java
@@ -16,17 +16,17 @@
  */
 package org.apache.jclouds.profitbricks.rest.binder.volume;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+import com.google.common.base.Supplier;
 import com.google.inject.Inject;
+import java.net.URI;
 import java.util.HashMap;
 import java.util.Map;
 import 
org.apache.jclouds.profitbricks.rest.binder.BaseProfitBricksRequestBinder;
 import org.apache.jclouds.profitbricks.rest.domain.Volume;
 import org.jclouds.http.HttpRequest;
 import org.jclouds.json.Json;
-import com.google.common.base.Supplier;
-import java.net.URI;
 import org.jclouds.location.Provider;
-import static com.google.common.base.Preconditions.checkNotNull;
 
 public class CreateVolumeRequestBinder extends 
BaseProfitBricksRequestBinder<Volume.Request.CreatePayload> {
 
@@ -63,6 +63,9 @@ public class CreateVolumeRequestBinder extends 
BaseProfitBricksRequestBinder<Vol
       if (payload.imagePassword() != null)
          properties.put("imagePassword", payload.imagePassword());
       
+      if (payload.imageAlias() != null)
+         properties.put("imageAlias", payload.imageAlias());
+      
       if (payload.image() != null)
          properties.put("image", payload.image());
       else if (payload.licenceType() != null)

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/71511bb8/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 4c79640..90f76fc 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
@@ -34,6 +34,8 @@ import com.google.inject.Inject;
 import static java.lang.String.format;
 import java.net.URI;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.Callable;
@@ -146,6 +148,7 @@ public class ProfitBricksComputeServiceAdapter implements 
ComputeServiceAdapter<
       Hardware hardware = template.getHardware();
       TemplateOptions options = template.getOptions();
       final String loginUser = isNullOrEmpty(options.getLoginUser()) ? "root" 
: options.getLoginUser();
+      final String pubKey = options.getPublicKey();
       final String password = options.hasLoginPassword() ? 
options.getLoginPassword() : Passwords.generate();
       final org.jclouds.compute.domain.Image image = template.getImage();
       final int[] inboundPorts = template.getOptions().getInboundPorts();
@@ -165,7 +168,11 @@ public class ProfitBricksComputeServiceAdapter implements 
ComputeServiceAdapter<
                Provisionable.Type provisionableType = 
Provisionable.Type.fromValue(
                        
image.getUserMetadata().get(ProvisionableToImage.KEY_PROVISIONABLE_TYPE));
                if (provisionableType == Provisionable.Type.IMAGE) {
-                  request.imagePassword(password);
+                  if (pubKey != null) {
+                     request.sshKeys(new 
HashSet<String>(Arrays.asList(pubKey)));
+                  } else {
+                     request.imagePassword(password);
+                  }
                }
 
             }
@@ -347,6 +354,7 @@ public class ProfitBricksComputeServiceAdapter implements 
ComputeServiceAdapter<
 
       LoginCredentials serverCredentials = LoginCredentials.builder()
               .user(loginUser)
+              .privateKey(pubKey)
               .password(password)
               .build();
 

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/71511bb8/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/domain/Lan.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/domain/Lan.java
 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/domain/Lan.java
index 2aeb60f..37d082f 100644
--- 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/domain/Lan.java
+++ 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/domain/Lan.java
@@ -17,6 +17,8 @@
 package org.apache.jclouds.profitbricks.rest.domain;
 
 import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableList;
+import static com.google.common.collect.ImmutableList.copyOf;
 import java.util.List;
 import org.jclouds.javax.annotation.Nullable;
 import org.jclouds.json.SerializedNames;
@@ -25,7 +27,7 @@ import org.jclouds.json.SerializedNames;
 public abstract class Lan extends Trackable {
 
    public abstract String id();
-   
+
    @Nullable
    public abstract String dataCenterId();
 
@@ -49,14 +51,32 @@ public abstract class Lan extends Trackable {
 
    @AutoValue
    public abstract static class Properties {
+
       @Nullable
       public abstract String name();
-      
+
       public abstract boolean isPublic();
-      
-      @SerializedNames({"name", "public"})
-      public static Properties create(String name, boolean isPublic) {
-         return new AutoValue_Lan_Properties(name, isPublic);
+
+      @Nullable
+      public abstract List<IpFailover> ipFailover();
+
+      @SerializedNames({"name", "public", "ipFailover"})
+      public static Properties create(String name, boolean isPublic, 
List<IpFailover> ipFailover) {
+         return new AutoValue_Lan_Properties(name, isPublic, ipFailover == 
null ? ImmutableList.<IpFailover>of() : copyOf(ipFailover));
+      }
+   }
+
+   @AutoValue
+   public abstract static class IpFailover {
+
+      @Nullable
+      public abstract String ip();
+
+      public abstract String nicUuid();
+
+      @SerializedNames({"ip", "nicUuid"})
+      public static IpFailover create(String ip, String nicUuid) {
+         return new AutoValue_Lan_IpFailover(ip, nicUuid);
       }
    }
 
@@ -71,8 +91,7 @@ public abstract class Lan extends Trackable {
       }
 
    }
-   
-   
+
    public static final class Request {
 
       public static CreatePayload.Builder creatingBuilder() {
@@ -82,7 +101,7 @@ public abstract class Lan extends Trackable {
       public static UpdatePayload.Builder updatingBuilder() {
          return new AutoValue_Lan_Request_UpdatePayload.Builder();
       }
-            
+
       @AutoValue
       public abstract static class CreatePayload {
 
@@ -94,15 +113,18 @@ public abstract class Lan extends Trackable {
 
          @Nullable
          public abstract List<Nic> nics();
-         
+
          public abstract String dataCenterId();
 
          @AutoValue.Builder
          public abstract static class Builder {
 
             public abstract Builder name(String name);
+
             public abstract Builder isPublic(Boolean isPublic);
+
             public abstract Builder nics(List<Nic> nics);
+
             public abstract Builder dataCenterId(String dataCenterId);
 
             abstract CreatePayload autoBuild();
@@ -118,16 +140,25 @@ public abstract class Lan extends Trackable {
       public abstract static class UpdatePayload {
 
          public abstract Boolean isPublic();
+
          public abstract String dataCenterId();
+
          public abstract String id();
 
+         @Nullable
+         public abstract List<IpFailover> ipFailover();
+
          @AutoValue.Builder
          public abstract static class Builder {
 
             public abstract Builder isPublic(Boolean isPublic);
+
             public abstract Builder dataCenterId(String dataCenterId);
+
             public abstract Builder id(String id);
 
+            public abstract Builder ipFailover(List<IpFailover> ipFailover);
+
             abstract UpdatePayload autoBuild();
 
             public UpdatePayload build() {
@@ -135,7 +166,7 @@ public abstract class Lan extends Trackable {
             }
          }
       }
-      
+
    }
-  
+
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/71511bb8/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/domain/Volume.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/domain/Volume.java
 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/domain/Volume.java
index 4e23ab7..75186cd 100644
--- 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/domain/Volume.java
+++ 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/domain/Volume.java
@@ -148,6 +148,9 @@ public abstract class Volume extends Trackable {
 
          @Nullable
          public abstract String image();
+         
+         @Nullable
+         public abstract String imageAlias();
 
          @Nullable
          public abstract AvailabilityZone availabilityZone();
@@ -177,7 +180,9 @@ public abstract class Volume extends Trackable {
             public abstract Builder availabilityZone(AvailabilityZone size);
 
             public abstract Builder image(String image);
-
+            
+            public abstract Builder imageAlias(String imageAlias);
+            
             public abstract Builder imagePassword(String imagePassword);
 
             public abstract Builder bus(Properties.BusType bus);
@@ -196,8 +201,8 @@ public abstract class Volume extends Trackable {
                }
 
                checkArgument(
-                       payload.image() != null || payload.licenceType() != 
null,
-                       "Either image or licenceType need to be present"
+                       payload.image() != null || payload.licenceType() != 
null || payload.imageAlias() != null,
+                       "Either image, imageAlias or licenceType need to be 
present"
                );
 
                return payload;

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/71511bb8/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/firewall/CreateFirewallRuleRequestBinderTest.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/firewall/CreateFirewallRuleRequestBinderTest.java
 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/firewall/CreateFirewallRuleRequestBinderTest.java
index c6eaeae..10ce82b 100644
--- 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/firewall/CreateFirewallRuleRequestBinderTest.java
+++ 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/firewall/CreateFirewallRuleRequestBinderTest.java
@@ -51,7 +51,7 @@ public class CreateFirewallRuleRequestBinderTest extends 
BinderTestBase {
          actual
       );
       
-      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v3/datacenters/datacenter-id/servers/server-id/nics/nic-id/firewallrules");
+      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v4/datacenters/datacenter-id/servers/server-id/nics/nic-id/firewallrules");
       assertNotNull(actual, "Binder returned null payload");
       
       Json json = injector.getInstance(Json.class);

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/71511bb8/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/firewall/UpdateFirewallRuleRequestBinderTest.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/firewall/UpdateFirewallRuleRequestBinderTest.java
 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/firewall/UpdateFirewallRuleRequestBinderTest.java
index 97afb24..9e0a8eb 100644
--- 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/firewall/UpdateFirewallRuleRequestBinderTest.java
+++ 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/firewall/UpdateFirewallRuleRequestBinderTest.java
@@ -48,7 +48,7 @@ public class UpdateFirewallRuleRequestBinderTest extends 
BinderTestBase {
          actual
       );
       
-      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v3/datacenters/datacenter-id/servers/server-id/nics/nic-id/firewallrules/id");
+      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v4/datacenters/datacenter-id/servers/server-id/nics/nic-id/firewallrules/id");
       assertNotNull(actual, "Binder returned null payload");
       
       Json json = injector.getInstance(Json.class);

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/71511bb8/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/image/UpdateImageRequestBinderTest.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/image/UpdateImageRequestBinderTest.java
 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/image/UpdateImageRequestBinderTest.java
index a631bcf..3d18751 100644
--- 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/image/UpdateImageRequestBinderTest.java
+++ 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/image/UpdateImageRequestBinderTest.java
@@ -46,7 +46,7 @@ public class UpdateImageRequestBinderTest extends 
BinderTestBase {
               actual
       );
       
-      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v3/images/some-id");
+      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v4/images/some-id");
       assertNotNull(actual, "Binder returned null payload");
       
       Json json = injector.getInstance(Json.class);

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/71511bb8/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/lan/CreateLanRequestBinderTest.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/lan/CreateLanRequestBinderTest.java
 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/lan/CreateLanRequestBinderTest.java
index a8e4db7..0d2c7f4 100644
--- 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/lan/CreateLanRequestBinderTest.java
+++ 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/lan/CreateLanRequestBinderTest.java
@@ -46,7 +46,7 @@ public class CreateLanRequestBinderTest extends 
BinderTestBase {
               actual
       );
       
-      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v3/datacenters/datacenter-id/lans");
+      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v4/datacenters/datacenter-id/lans");
       assertNotNull(actual, "Binder returned null payload");
       
       Json json = injector.getInstance(Json.class);

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/71511bb8/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/lan/UpdateLanRequestBinderTest.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/lan/UpdateLanRequestBinderTest.java
 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/lan/UpdateLanRequestBinderTest.java
index ed670cc..74a59b1 100644
--- 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/lan/UpdateLanRequestBinderTest.java
+++ 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/lan/UpdateLanRequestBinderTest.java
@@ -46,7 +46,7 @@ public class UpdateLanRequestBinderTest extends 
BinderTestBase {
               actual
       );
       
-      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v3/datacenters/datacenter-id/lans/lan-id");
+      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v4/datacenters/datacenter-id/lans/lan-id");
       assertNotNull(actual, "Binder returned null payload");
       
       Json json = injector.getInstance(Json.class);

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/71511bb8/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/nic/CreateNicRequestBinderTest.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/nic/CreateNicRequestBinderTest.java
 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/nic/CreateNicRequestBinderTest.java
index 5532f55..1067b66 100644
--- 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/nic/CreateNicRequestBinderTest.java
+++ 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/nic/CreateNicRequestBinderTest.java
@@ -48,7 +48,7 @@ public class CreateNicRequestBinderTest extends 
BinderTestBase {
               actual
       );
       
-      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v3/datacenters/datacenter-id/servers/server-id/nics");
+      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v4/datacenters/datacenter-id/servers/server-id/nics");
       assertNotNull(actual, "Binder returned null payload");
       
       Json json = injector.getInstance(Json.class);

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/71511bb8/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/nic/UpdateNicRequestBinderTest.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/nic/UpdateNicRequestBinderTest.java
 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/nic/UpdateNicRequestBinderTest.java
index cea37b1..96cbc38 100644
--- 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/nic/UpdateNicRequestBinderTest.java
+++ 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/nic/UpdateNicRequestBinderTest.java
@@ -47,7 +47,7 @@ public class UpdateNicRequestBinderTest extends 
BinderTestBase {
               actual
       );
       
-      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v3/datacenters/datacenter-id/servers/server-id/nics/nic-id");
+      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v4/datacenters/datacenter-id/servers/server-id/nics/nic-id");
       assertNotNull(actual, "Binder returned null payload");
       
       Json json = injector.getInstance(Json.class);

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/71511bb8/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachCdromRequestBinderTest.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachCdromRequestBinderTest.java
 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachCdromRequestBinderTest.java
index 90854e1..be65745 100644
--- 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachCdromRequestBinderTest.java
+++ 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachCdromRequestBinderTest.java
@@ -48,7 +48,7 @@ public class AttachCdromRequestBinderTest extends 
BinderTestBase {
               actual
       );
       
-      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v3/datacenters/datacenter-id/servers/server-id/cdroms");
+      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v4/datacenters/datacenter-id/servers/server-id/cdroms");
       assertNotNull(actual, "Binder returned null payload");
       
       Json json = injector.getInstance(Json.class);

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/71511bb8/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachVolumeRequestBinderTest.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachVolumeRequestBinderTest.java
 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachVolumeRequestBinderTest.java
index baabfc4..d697ef2 100644
--- 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachVolumeRequestBinderTest.java
+++ 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachVolumeRequestBinderTest.java
@@ -48,7 +48,7 @@ public class AttachVolumeRequestBinderTest  extends 
BinderTestBase {
               actual
       );
       
-      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v3/datacenters/datacenter-id/servers/server-id/volumes");
+      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v4/datacenters/datacenter-id/servers/server-id/volumes");
       assertNotNull(actual, "Binder returned null payload");
       
       Json json = injector.getInstance(Json.class);

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/71511bb8/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/server/CreateServerRequestBinderTest.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/server/CreateServerRequestBinderTest.java
 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/server/CreateServerRequestBinderTest.java
index 4346ad1..2e3de27 100644
--- 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/server/CreateServerRequestBinderTest.java
+++ 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/server/CreateServerRequestBinderTest.java
@@ -48,7 +48,7 @@ public class CreateServerRequestBinderTest extends 
BinderTestBase {
               actual
       );
       
-      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v3/datacenters/datacenter-id/servers");
+      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v4/datacenters/datacenter-id/servers");
       assertNotNull(actual, "Binder returned null payload");
       
       Json json = injector.getInstance(Json.class);

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/71511bb8/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/server/UpdateServerRequestBinderTest.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/server/UpdateServerRequestBinderTest.java
 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/server/UpdateServerRequestBinderTest.java
index 62cea6b..0ca8eb7 100644
--- 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/server/UpdateServerRequestBinderTest.java
+++ 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/server/UpdateServerRequestBinderTest.java
@@ -48,7 +48,7 @@ public class UpdateServerRequestBinderTest extends 
BinderTestBase {
               actual
       );
       
-      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v3/datacenters/datacenter-id/servers/server-id");
+      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v4/datacenters/datacenter-id/servers/server-id");
       assertNotNull(actual, "Binder returned null payload");
 
       Json json = injector.getInstance(Json.class);

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/71511bb8/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/volume/CreateSnapshotRequestBinderTest.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/volume/CreateSnapshotRequestBinderTest.java
 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/volume/CreateSnapshotRequestBinderTest.java
index a81bf3f..9353992 100644
--- 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/volume/CreateSnapshotRequestBinderTest.java
+++ 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/volume/CreateSnapshotRequestBinderTest.java
@@ -52,7 +52,7 @@ public class CreateSnapshotRequestBinderTest extends 
BinderTestBase {
       expectedPayload.put("name", "test-snapshot");
       expectedPayload.put("description", "snapshot desc...");
             
-      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v3/datacenters/datacenter-id/volumes/volume-id/create-snapshot");
+      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v4/datacenters/datacenter-id/volumes/volume-id/create-snapshot");
       assertEquals(request.getPayload().getContentMetadata().getContentType(), 
MediaType.APPLICATION_FORM_URLENCODED);
       assertEquals(request.getPayload().getRawContent(), "&" + (new 
UrlEncodedFormPayload(expectedPayload)).getRawContent());
 

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/71511bb8/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/volume/CreateVolumeRequestBinderTest.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/volume/CreateVolumeRequestBinderTest.java
 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/volume/CreateVolumeRequestBinderTest.java
index 66bf79f..5266151 100644
--- 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/volume/CreateVolumeRequestBinderTest.java
+++ 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/volume/CreateVolumeRequestBinderTest.java
@@ -51,7 +51,7 @@ public class CreateVolumeRequestBinderTest extends 
BinderTestBase {
               actual
       );
       
-      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v3/datacenters/datacenter-id/volumes");
+      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v4/datacenters/datacenter-id/volumes");
       assertNotNull(actual, "Binder returned null payload");
 
       Json json = injector.getInstance(Json.class);

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/71511bb8/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/volume/RestoreSnapshotRequestBinderTest.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/volume/RestoreSnapshotRequestBinderTest.java
 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/volume/RestoreSnapshotRequestBinderTest.java
index 1462a83..1ecf543 100644
--- 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/volume/RestoreSnapshotRequestBinderTest.java
+++ 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/volume/RestoreSnapshotRequestBinderTest.java
@@ -42,7 +42,7 @@ public class RestoreSnapshotRequestBinderTest extends 
BinderTestBase {
               binder.createPayload(payload)
       );
       
-      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v3/datacenters/datacenter-id/volumes/volume-id/restore-snapshot");
+      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v4/datacenters/datacenter-id/volumes/volume-id/restore-snapshot");
       assertEquals(request.getPayload().getContentMetadata().getContentType(), 
MediaType.APPLICATION_FORM_URLENCODED);
       assertEquals(request.getPayload().getRawContent(), 
"&snapshotId=snapshot-id");
 

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/71511bb8/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/volume/UpdateVolumeRequestBinderTest.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/volume/UpdateVolumeRequestBinderTest.java
 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/volume/UpdateVolumeRequestBinderTest.java
index 9ae54f5..92b1025 100644
--- 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/volume/UpdateVolumeRequestBinderTest.java
+++ 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/volume/UpdateVolumeRequestBinderTest.java
@@ -48,7 +48,7 @@ public class UpdateVolumeRequestBinderTest extends 
BinderTestBase {
               actual
       );
       
-      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v3/datacenters/datacenter-id/volumes/volume-id");
+      assertEquals(request.getEndpoint().getPath(), 
"/cloudapi/v4/datacenters/datacenter-id/volumes/volume-id");
       assertNotNull(actual, "Binder returned null payload");
 
       Json json = injector.getInstance(Json.class);

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/71511bb8/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 3f89fe5..895c56e 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
@@ -32,7 +32,9 @@ 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.domain.TemplateBuilder;
 import org.jclouds.compute.internal.BaseComputeServiceLiveTest;
+import org.jclouds.compute.options.TemplateOptions;
 import org.jclouds.compute.predicates.NodePredicates;
 import static org.jclouds.compute.predicates.NodePredicates.inGroup;
 import org.jclouds.logging.config.LoggingModule;
@@ -51,6 +53,14 @@ public class ProfitBricksComputeServiceLiveTest extends 
BaseComputeServiceLiveTe
    }
 
    @Override
+   protected TemplateBuilder templateBuilder() {
+      TemplateOptions authOptions = TemplateOptions.Builder
+              .authorizePublicKey(keyPair.get("public"))
+              .overrideLoginPrivateKey(keyPair.get("private"));
+      return super.templateBuilder().options(authOptions);
+   }
+
+   @Override
    protected Module getSshModule() {
       return new SshjSshClientModule();
    }
@@ -113,7 +123,7 @@ public class ProfitBricksComputeServiceLiveTest extends 
BaseComputeServiceLiveTe
    @Override
    @Test
    public void testCreateNodeWithCustomHardware() throws Exception {
-      Template template = buildTemplate(templateBuilder()
+      Template template = 
buildTemplate(templateBuilder().imageNameMatches("Ubuntu").osVersionMatches("1[467]\\.04")
               .hardwareId("automatic:cores=2;ram=2048;disk=20"));
       try {
          NodeMetadata node = getOnlyElement(client.createNodesInGroup(group + 
"custom", 1, template));
@@ -128,7 +138,7 @@ public class ProfitBricksComputeServiceLiveTest extends 
BaseComputeServiceLiveTe
 
    @Test
    public void testCreateNodeWithCustomHardwareUsingMins() throws Exception {
-      Template template = buildTemplate(templateBuilder()
+      Template template = 
buildTemplate(templateBuilder().imageNameMatches("Ubuntu").osVersionMatches("1[467]\\.04")
               .minCores(2).minRam(2048).minDisk(20));
       try {
          NodeMetadata node = getOnlyElement(client.createNodesInGroup(group + 
"custom", 1, template));

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/71511bb8/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/LanApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/LanApiLiveTest.java
 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/LanApiLiveTest.java
index d49b8e0..beee473 100644
--- 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/LanApiLiveTest.java
+++ 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/LanApiLiveTest.java
@@ -16,46 +16,55 @@
  */
 package org.apache.jclouds.profitbricks.rest.features;
 
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
-
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
 import java.net.URI;
+import java.util.ArrayList;
 import java.util.List;
-
+import org.apache.jclouds.profitbricks.rest.domain.CpuFamily;
 import org.apache.jclouds.profitbricks.rest.domain.DataCenter;
+import org.apache.jclouds.profitbricks.rest.domain.IpBlock;
 import org.apache.jclouds.profitbricks.rest.domain.Lan;
+import org.apache.jclouds.profitbricks.rest.domain.Lan.IpFailover;
+import org.apache.jclouds.profitbricks.rest.domain.Location;
+import org.apache.jclouds.profitbricks.rest.domain.Nic;
+import org.apache.jclouds.profitbricks.rest.domain.Server;
 import org.apache.jclouds.profitbricks.rest.domain.State;
 import org.apache.jclouds.profitbricks.rest.internal.BaseProfitBricksLiveTest;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Predicate;
-import com.google.common.collect.Iterables;
-
 @Test(groups = "live", testName = "LanApiLiveTest")
 public class LanApiLiveTest extends BaseProfitBricksLiveTest {
-   
+
    private DataCenter dataCenter;
    private Lan testLan;
-  
+   private Server testServer;
+   private IpBlock testIpBlock;
+   private Nic testNic;
+
    @BeforeClass
    public void setupTest() {
       dataCenter = createDataCenter();
    }
-   
+
    @AfterClass(alwaysRun = true)
    public void teardownTest() {
-      if (dataCenter != null)
+      if (dataCenter != null) {
          deleteDataCenter(dataCenter.id());
+         api.ipBlockApi().delete(testIpBlock.id());
+      }
    }
-     
+
    @Test
    public void testCreateLan() {
       assertNotNull(dataCenter);
-            
+
       testLan = lanApi().create(
               Lan.Request.creatingBuilder()
               .dataCenterId(dataCenter.id())
@@ -65,9 +74,7 @@ public class LanApiLiveTest extends BaseProfitBricksLiveTest {
       assertRequestCompleted(testLan);
       assertNotNull(testLan);
       assertEquals(testLan.properties().name(), "jclouds-lan");
-      assertLanAvailable(testLan);
    }
-   
 
    @Test(dependsOnMethods = "testCreateLan")
    public void testGetLan() {
@@ -84,52 +91,98 @@ public class LanApiLiveTest extends 
BaseProfitBricksLiveTest {
       assertNotNull(lans);
       assertFalse(lans.isEmpty());
       assertTrue(Iterables.any(lans, new Predicate<Lan>() {
-         @Override public boolean apply(Lan input) {
+         @Override
+         public boolean apply(Lan input) {
             return input.id().equals(testLan.id());
          }
       }));
    }
-   
+
    @Test(dependsOnMethods = "testCreateLan")
    public void testUpdateLan() {
       assertDataCenterAvailable(dataCenter);
-      
+
+      //reserve an ip for the failover group
+      testIpBlock = api.ipBlockApi().create(IpBlock.Request.creatingBuilder()
+              .properties(IpBlock.PropertiesRequest.create("jclouds ipBlock", 
Location.US_LAS.getId(), 1)).build());
+      assertRequestCompleted(testIpBlock);
+
+      //create the failover lan
+      Lan failoverLan = lanApi().create(
+              Lan.Request.creatingBuilder()
+              .dataCenterId(dataCenter.id())
+              .name("failover-lan")
+              .build());
+      //creating the server
+      testServer = api.serverApi().createServer(
+              Server.Request.creatingBuilder()
+              .dataCenterId(dataCenter.id())
+              .name("jclouds-node")
+              .cpuFamily(CpuFamily.INTEL_XEON)
+              .cores(1)
+              .ram(1024)
+              .build());
+
+      assertRequestCompleted(testServer);
+
+      List<String> ips = new ArrayList<String>();
+      ips.add(testIpBlock.properties().ips().get(0));
+
+      //creating the NIC
+      testNic = api.nicApi().create(
+              Nic.Request.creatingBuilder()
+              .dataCenterId(dataCenter.id())
+              .serverId(testServer.id())
+              .name("failover-nic")
+              .ips(ips)
+              .lan(Integer.parseInt(failoverLan.id()))
+              .build());
+
+      assertRequestCompleted(testNic);
+
+      List<IpFailover> failovers = new ArrayList<IpFailover>();
+      failovers.add(IpFailover.create(testIpBlock.properties().ips().get(0), 
testNic.id()));
+
+      //update lan with failover group
       Lan updated = api.lanApi().update(
               Lan.Request.updatingBuilder()
-              .dataCenterId(testLan.dataCenterId())
-              .id(testLan.id())
-              .isPublic(false)
+              .dataCenterId(failoverLan.dataCenterId())
+              .id(failoverLan.id())
+              .isPublic(true)
+              .ipFailover(failovers)
               .build());
 
       assertRequestCompleted(updated);
       assertLanAvailable(updated);
-      
-      Lan lan = lanApi().get(dataCenter.id(), testLan.id());
-      
-      assertEquals(lan.properties().isPublic(), false);
+
+      Lan lan = lanApi().get(dataCenter.id(), failoverLan.id());
+
+      assertTrue(lan.properties().isPublic());
+      assertNotNull(lan.properties().ipFailover());
    }
-   
+
    @Test(dependsOnMethods = "testUpdateLan")
    public void testDeleteLan() {
       URI uri = lanApi().delete(testLan.dataCenterId(), testLan.id());
       assertRequestCompleted(uri);
       assertLanRemoved(testLan);
    }
-   
+
    private void assertLanAvailable(Lan lan) {
       assertPredicate(new Predicate<Lan>() {
          @Override
          public boolean apply(Lan testLan) {
             Lan lan = lanApi().get(testLan.dataCenterId(), testLan.id());
-            
-            if (lan == null || lan.metadata() == null)
+
+            if (lan == null || lan.metadata() == null) {
                return false;
-            
+            }
+
             return lan.metadata().state() == State.AVAILABLE;
          }
       }, lan);
    }
-   
+
    private void assertLanRemoved(Lan lan) {
       assertPredicate(new Predicate<Lan>() {
          @Override
@@ -138,9 +191,9 @@ public class LanApiLiveTest extends 
BaseProfitBricksLiveTest {
          }
       }, lan);
    }
-     
+
    private LanApi lanApi() {
       return api.lanApi();
    }
-   
+
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/71511bb8/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/VolumeApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/VolumeApiLiveTest.java
 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/VolumeApiLiveTest.java
index e6f244a..3843172 100644
--- 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/VolumeApiLiveTest.java
+++ 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/VolumeApiLiveTest.java
@@ -17,20 +17,15 @@
 package org.apache.jclouds.profitbricks.rest.features;
 
 import com.google.common.base.Predicate;
-
 import java.net.URI;
 import java.util.HashSet;
 import java.util.List;
 import org.apache.jclouds.profitbricks.rest.domain.DataCenter;
-import org.apache.jclouds.profitbricks.rest.domain.Image;
-import org.apache.jclouds.profitbricks.rest.domain.LicenceType;
-import static org.apache.jclouds.profitbricks.rest.domain.Location.US_LAS;
 import org.apache.jclouds.profitbricks.rest.domain.ProvisioningState;
 import org.apache.jclouds.profitbricks.rest.domain.Snapshot;
 import org.apache.jclouds.profitbricks.rest.domain.State;
 import org.apache.jclouds.profitbricks.rest.domain.Volume;
 import org.apache.jclouds.profitbricks.rest.domain.VolumeType;
-import org.apache.jclouds.profitbricks.rest.domain.options.DepthOptions;
 import org.apache.jclouds.profitbricks.rest.ids.VolumeRef;
 import org.apache.jclouds.profitbricks.rest.internal.BaseProfitBricksLiveTest;
 import static org.testng.Assert.assertEquals;
@@ -62,22 +57,6 @@ public class VolumeApiLiveTest extends 
BaseProfitBricksLiveTest {
    @Test
    public void testCreateVolume() {
       assertNotNull(dataCenter);
-
-      List<Image> images = api.imageApi().getList(new DepthOptions().depth(5));
-
-      Image testImage = null;
-
-      for (Image image : images) {
-         if (image.metadata().state() == State.AVAILABLE
-                 && image.properties().isPublic()
-                 && image.properties().imageType() == Image.Type.HDD
-                 && image.properties().location() == US_LAS
-                 && image.properties().licenceType() == LicenceType.LINUX
-                 && (testImage == null || testImage.properties().size() > 
image.properties().size())) {
-            testImage = image;
-         }
-      }
-
       HashSet<String> sshKeys = new HashSet<String>();
       sshKeys.add("hQGOEJeFL91EG3+l9TtRbWNjzhDVHeLuL3NWee6bekA=");
 
@@ -86,9 +65,8 @@ public class VolumeApiLiveTest extends 
BaseProfitBricksLiveTest {
               .dataCenterId(dataCenter.id())
               .name("jclouds-volume")
               .size(4)
-              .licenceType(LicenceType.LINUX)
+              .imageAlias("ubuntu:latest")
               .type(VolumeType.SSD)
-              .image(testImage.id())
               .sshKeys(sshKeys)
               .build());
 

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/71511bb8/profitbricks-rest/src/test/resources/ipblock/get.json
----------------------------------------------------------------------
diff --git a/profitbricks-rest/src/test/resources/ipblock/get.json 
b/profitbricks-rest/src/test/resources/ipblock/get.json
index 4893b25..d57fa65 100644
--- a/profitbricks-rest/src/test/resources/ipblock/get.json
+++ b/profitbricks-rest/src/test/resources/ipblock/get.json
@@ -1,7 +1,7 @@
 {
     "id": "6c53515b-8557-44a8-9339-ea34e7e5baa2",
     "type": "ipblock",
-    "href": 
"https://api.profitbricks.com/cloudapi/v3/ipblocks/6c53515b-8557-44a8-9339-ea34e7e5baa2";,
+    "href": 
"https://api.profitbricks.com/cloudapi/v4/ipblocks/6c53515b-8557-44a8-9339-ea34e7e5baa2";,
     "metadata": {
         "createdDate": "2016-06-18T21:38:20Z",
         "createdBy": "[email protected]",

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/71511bb8/profitbricks-rest/src/test/resources/ipblock/list.depth-5.json
----------------------------------------------------------------------
diff --git a/profitbricks-rest/src/test/resources/ipblock/list.depth-5.json 
b/profitbricks-rest/src/test/resources/ipblock/list.depth-5.json
index 70b96f3..37d0060 100644
--- a/profitbricks-rest/src/test/resources/ipblock/list.depth-5.json
+++ b/profitbricks-rest/src/test/resources/ipblock/list.depth-5.json
@@ -1,11 +1,11 @@
 {
     "id": "ipblocks",
     "type": "collection",
-    "href": "https://api.profitbricks.com/cloudapi/v3/ipblocks";,
+    "href": "https://api.profitbricks.com/cloudapi/v4/ipblocks";,
     "items": [{
             "id": "6c53515b-8557-44a8-9339-ea34e7e5baa2",
             "type": "ipblock",
-            "href": 
"https://api.profitbricks.com/cloudapi/v3/ipblocks/6c53515b-8557-44a8-9339-ea34e7e5baa2";,
+            "href": 
"https://api.profitbricks.com/cloudapi/v4/ipblocks/6c53515b-8557-44a8-9339-ea34e7e5baa2";,
             "metadata": {
                 "createdDate": "2016-06-18T21:38:20Z",
                 "createdBy": "[email protected]",
@@ -23,7 +23,7 @@
         }, {
             "id": "b6f3be55-d7e1-4a62-835a-0c4a64dda433",
             "type": "ipblock",
-            "href": 
"https://api.profitbricks.com/cloudapi/v3/ipblocks/b6f3be55-d7e1-4a62-835a-0c4a64dda433";,
+            "href": 
"https://api.profitbricks.com/cloudapi/v4/ipblocks/b6f3be55-d7e1-4a62-835a-0c4a64dda433";,
             "metadata": {
                 "createdDate": "2016-06-09T21:27:26Z",
                 "createdBy": "[email protected]",

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/71511bb8/profitbricks-rest/src/test/resources/ipblock/list.json
----------------------------------------------------------------------
diff --git a/profitbricks-rest/src/test/resources/ipblock/list.json 
b/profitbricks-rest/src/test/resources/ipblock/list.json
index 7c0a71e..6e1c64c 100644
--- a/profitbricks-rest/src/test/resources/ipblock/list.json
+++ b/profitbricks-rest/src/test/resources/ipblock/list.json
@@ -1,14 +1,14 @@
 {
     "id": "ipblocks",
     "type": "collection",
-    "href": "https://api.profitbricks.com/cloudapi/v3/ipblocks";,
+    "href": "https://api.profitbricks.com/cloudapi/v4/ipblocks";,
     "items": [{
             "id": "6c53515b-8557-44a8-9339-ea34e7e5baa2",
             "type": "ipblock",
-            "href": 
"https://api.profitbricks.com/cloudapi/v3/ipblocks/6c53515b-8557-44a8-9339-ea34e7e5baa2";
+            "href": 
"https://api.profitbricks.com/cloudapi/v4/ipblocks/6c53515b-8557-44a8-9339-ea34e7e5baa2";
         }, {
             "id": "b6f3be55-d7e1-4a62-835a-0c4a64dda433",
             "type": "ipblock",
-            "href": 
"https://api.profitbricks.com/cloudapi/v3/ipblocks/b6f3be55-d7e1-4a62-835a-0c4a64dda433";
+            "href": 
"https://api.profitbricks.com/cloudapi/v4/ipblocks/b6f3be55-d7e1-4a62-835a-0c4a64dda433";
         }]
 }
\ No newline at end of file

Reply via email to