Repository: jclouds-labs
Updated Branches:
  refs/heads/master 05a5eee84 -> bb9dfbafb


SSH Keys for create-volume request


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

Branch: refs/heads/master
Commit: bb9dfbafb5b1d527ce0e7cd2b5ef9341731d1a69
Parents: 05a5eee
Author: mirza-spc <[email protected]>
Authored: Mon Mar 7 16:12:16 2016 +0100
Committer: Ignasi Barrera <[email protected]>
Committed: Tue Mar 22 12:33:41 2016 +0100

----------------------------------------------------------------------
 .../rest/ProfitBricksApiMetadata.java           |  2 +-
 .../rest/ProfitBricksProviderMetadata.java      |  2 +-
 .../binder/BaseProfitBricksRequestBinder.java   | 26 +++++++----
 .../binder/image/UpdateImageRequestBinder.java  | 42 ++++++++++--------
 .../binder/server/AttachCdromRequestBinder.java | 16 ++++---
 .../server/AttachVolumeRequestBinder.java       | 16 ++++---
 .../server/CreateServerRequestBinder.java       | 20 +++++----
 .../server/UpdateServerRequestBinder.java       | 28 ++++++------
 .../snapshot/UpdateSnapshotRequestBinder.java   | 37 ++++++++--------
 .../volume/CreateSnapshotRequestBinder.java     | 21 +++++----
 .../volume/CreateVolumeRequestBinder.java       | 23 ++++++----
 .../volume/RestoreSnapshotRequestBinder.java    | 21 +++++----
 .../volume/UpdateVolumeRequestBinder.java       | 20 +++++----
 .../profitbricks/rest/domain/Location.java      |  6 +--
 .../profitbricks/rest/domain/Volume.java        | 17 +++++---
 .../profitbricks/rest/domain/VolumeType.java    | 28 ++++++++++++
 .../rest/binder/BinderTestBase.java             | 46 ++++++++++++++++++++
 .../image/UpdateImageRequestBinderTest.java     | 13 +++---
 .../server/AttachCdromRequestBinderTest.java    | 11 ++---
 .../server/AttachVolumeRequestBinderTest.java   |  9 ++--
 .../server/CreateServerRequestBinderTest.java   | 11 ++---
 .../server/UpdateServerRequestBinderTest.java   | 10 ++---
 .../UpdateSnapshotRequestBinderTest.java        |  7 +--
 .../volume/CreateSnapshotRequestBinderTest.java | 11 ++---
 .../volume/CreateVolumeRequestBinderTest.java   | 12 ++---
 .../RestoreSnapshotRequestBinderTest.java       | 11 ++---
 .../volume/UpdateVolumeRequestBinderTest.java   |  9 ++--
 .../rest/features/ServerApiMockTest.java        |  8 ++--
 .../rest/features/VolumeApiLiveTest.java        | 29 +++++++++++-
 .../rest/features/VolumeApiMockTest.java        | 41 ++++++++++++++---
 .../rest/internal/BaseProfitBricksLiveTest.java |  2 +
 31 files changed, 346 insertions(+), 209 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/bb9dfbaf/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 e55d944..f5ac5e1 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
@@ -53,7 +53,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/rest/";)
+            .defaultEndpoint("https://api.profitbricks.com/rest/v2/";)
             .defaultProperties(ProfitBricksApiMetadata.defaultProperties())
             .defaultModules(ImmutableSet.<Class<? extends Module>>builder()
                .add(OkHttpCommandExecutorServiceModule.class)

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/bb9dfbaf/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 feb31c9..133e7f6 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
@@ -88,7 +88,7 @@ public class ProfitBricksProviderMetadata extends 
BaseProviderMetadata {
             .homepage(URI.create("https://www.profitbricks.com/";))
             .console(URI.create("https://my.profitbricks.com/dashboard/dcdr2";))
             .iso3166Codes("DE-FKB", "DE-FRA", "US-LAS", "US-LASDEV")
-            .endpoint("https://api.profitbricks.com/rest";)
+            .endpoint("https://api.profitbricks.com/rest/v2/";)
             
.defaultProperties(ProfitBricksProviderMetadata.defaultProperties());
       }
 

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/bb9dfbaf/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/BaseProfitBricksRequestBinder.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/BaseProfitBricksRequestBinder.java
 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/BaseProfitBricksRequestBinder.java
index 1d15bd9..dae21b9 100644
--- 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/BaseProfitBricksRequestBinder.java
+++ 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/BaseProfitBricksRequestBinder.java
@@ -16,32 +16,32 @@
  */
 package org.apache.jclouds.profitbricks.rest.binder;
 
-import static com.google.common.base.Preconditions.checkNotNull;
-
 import java.util.Map;
-
 import org.jclouds.http.HttpRequest;
 import org.jclouds.rest.MapBinder;
-
 import com.google.common.base.Strings;
 import com.google.inject.Inject;
 import java.util.HashMap;
-
+import org.jclouds.json.Json;
 import org.jclouds.io.MutableContentMetadata;
 import org.jclouds.io.payloads.BaseMutableContentMetadata;
-import org.jclouds.json.Json;
+import java.net.URI;
+import com.google.common.base.Supplier;
+import static com.google.common.base.Preconditions.checkNotNull;
 
 public abstract class BaseProfitBricksRequestBinder<T> implements MapBinder {
 
+   protected final Supplier<URI> endpointSupplier;
    protected final String paramName;
-   protected final Map<String, Object> requestBuilder;
+   protected final Map<String, Object> formMap;
    protected final Json jsonBinder;
 
    @Inject
-   protected BaseProfitBricksRequestBinder(String paramName, Json jsonBinder) {
+   protected BaseProfitBricksRequestBinder(String paramName, Json jsonBinder, 
Supplier<URI> endpointSupplier) {
       this.paramName = checkNotNull(paramName, "Initialize 'paramName' in 
constructor");
       this.jsonBinder = jsonBinder;
-      this.requestBuilder = new HashMap<String, Object>();
+      this.formMap = new HashMap<String, Object>();
+      this.endpointSupplier = endpointSupplier;
    }
 
    @Override
@@ -78,4 +78,12 @@ public abstract class BaseProfitBricksRequestBinder<T> 
implements MapBinder {
       fromRequest.getPayload().setContentMetadata(metadata);
       return fromRequest;
    }
+   
+   protected <R extends HttpRequest> R genRequest(String path, R fromRequest) 
{          
+      R request = (R) fromRequest.toBuilder()
+         .replacePath(endpointSupplier.get().getPath() + path)
+         .build();
+      
+      return request;
+   }
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/bb9dfbaf/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/image/UpdateImageRequestBinder.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/image/UpdateImageRequestBinder.java
 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/image/UpdateImageRequestBinder.java
index 9a5e73e..7fa4998 100644
--- 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/image/UpdateImageRequestBinder.java
+++ 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/image/UpdateImageRequestBinder.java
@@ -16,20 +16,23 @@
  */
 package org.apache.jclouds.profitbricks.rest.binder.image;
 
-import static com.google.common.base.Preconditions.checkNotNull;
 import com.google.inject.Inject;
 import 
org.apache.jclouds.profitbricks.rest.binder.BaseProfitBricksRequestBinder;
 import org.apache.jclouds.profitbricks.rest.domain.Image;
 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 UpdateImageRequestBinder extends 
BaseProfitBricksRequestBinder<Image.Request.UpdatePayload> {
 
    private String imageId;
 
    @Inject
-   UpdateImageRequestBinder(Json jsonBinder) {
-      super("image", jsonBinder);
+   UpdateImageRequestBinder(Json jsonBinder,  @Provider Supplier<URI> 
endpointSupplier) {
+      super("image", jsonBinder, endpointSupplier);
    }
 
    @Override
@@ -41,51 +44,52 @@ public class UpdateImageRequestBinder extends 
BaseProfitBricksRequestBinder<Imag
       imageId = payload.id();
 
       if (payload.name() != null)
-        requestBuilder.put("name", payload.name());
+        formMap.put("name", payload.name());
 
       if (payload.description() != null)
-        requestBuilder.put("description", payload.description());
+        formMap.put("description", payload.description());
 
       if (payload.licenceType() != null)
-        requestBuilder.put("licenceType", payload.licenceType());
+        formMap.put("licenceType", payload.licenceType());
 
       if (payload.cpuHotPlug() != null)
-        requestBuilder.put("cpuHotPlug", payload.cpuHotPlug());
+        formMap.put("cpuHotPlug", payload.cpuHotPlug());
 
       if (payload.cpuHotUnplug() != null)
-        requestBuilder.put("cpuHotUnplug", payload.cpuHotUnplug());
+        formMap.put("cpuHotUnplug", payload.cpuHotUnplug());
 
       if (payload.ramHotPlug() != null)
-        requestBuilder.put("ramHotPlug", payload.ramHotPlug());
+        formMap.put("ramHotPlug", payload.ramHotPlug());
 
       if (payload.ramHotUnplug() != null)
-        requestBuilder.put("ramHotUnplug", payload.ramHotUnplug());
+        formMap.put("ramHotUnplug", payload.ramHotUnplug());
 
       if (payload.nicHotPlug() != null)
-        requestBuilder.put("nicHotPlug", payload.nicHotPlug());
+        formMap.put("nicHotPlug", payload.nicHotPlug());
 
       if (payload.nicHotUnplug() != null)
-        requestBuilder.put("nicHotUnplug", payload.nicHotUnplug());
+        formMap.put("nicHotUnplug", payload.nicHotUnplug());
 
       if (payload.discVirtioHotPlug() != null)
-        requestBuilder.put("discVirtioHotPlug", payload.discVirtioHotPlug());
+        formMap.put("discVirtioHotPlug", payload.discVirtioHotPlug());
 
       if (payload.discVirtioHotUnplug() != null)
-        requestBuilder.put("discVirtioHotUnplug", 
payload.discVirtioHotUnplug());
+        formMap.put("discVirtioHotUnplug", payload.discVirtioHotUnplug());
 
       if (payload.discScsiHotPlug() != null)
-        requestBuilder.put("discScsiHotPlug", payload.discScsiHotPlug());
+        formMap.put("discScsiHotPlug", payload.discScsiHotPlug());
 
       if (payload.discScsiHotUnplug() != null)
-        requestBuilder.put("discScsiHotUnplug", payload.discScsiHotUnplug());
+        formMap.put("discScsiHotUnplug", payload.discScsiHotUnplug());
       
-      return jsonBinder.toJson(requestBuilder);
+      return jsonBinder.toJson(formMap);
    }
 
    @Override
    protected <R extends HttpRequest> R createRequest(R fromRequest, String 
payload) {              
-      R request = (R) 
fromRequest.toBuilder().replacePath(String.format("/rest/images/%s", 
imageId)).build();
-      return super.createRequest(request, payload);
+      return super.createRequest(genRequest(String.format("images/%s", 
imageId), fromRequest), payload);
    }
+   
+   
 
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/bb9dfbaf/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachCdromRequestBinder.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachCdromRequestBinder.java
 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachCdromRequestBinder.java
index 9cf2132..8315cce 100644
--- 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachCdromRequestBinder.java
+++ 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachCdromRequestBinder.java
@@ -21,6 +21,9 @@ import 
org.apache.jclouds.profitbricks.rest.binder.BaseProfitBricksRequestBinder
 import org.apache.jclouds.profitbricks.rest.domain.Server;
 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 AttachCdromRequestBinder extends 
BaseProfitBricksRequestBinder<Server.Request.AttachCdromPayload> {
@@ -29,8 +32,8 @@ public class AttachCdromRequestBinder extends 
BaseProfitBricksRequestBinder<Serv
    String serverId;
 
    @Inject
-   AttachCdromRequestBinder(Json jsonBinder) {
-      super("cdrom", jsonBinder);
+   AttachCdromRequestBinder(Json jsonBinder, @Provider Supplier<URI> 
endpointSupplier) {
+      super("cdrom", jsonBinder, endpointSupplier);
    }
 
    @Override
@@ -45,14 +48,13 @@ public class AttachCdromRequestBinder extends 
BaseProfitBricksRequestBinder<Serv
       dataCenterId = payload.dataCenterId();
       serverId = payload.serverId();
       
-      requestBuilder.put("id", payload.imageId());
-      return jsonBinder.toJson(requestBuilder);
+      formMap.put("id", payload.imageId());
+      return jsonBinder.toJson(formMap);
    }
-
+   
    @Override
    protected <R extends HttpRequest> R createRequest(R fromRequest, String 
payload) {              
-      R request = (R) 
fromRequest.toBuilder().replacePath(String.format("/rest/datacenters/%s/servers/%s/cdroms",
 dataCenterId, serverId)).build();
-      return super.createRequest(request, payload);
+      return 
super.createRequest(genRequest(String.format("datacenters/%s/servers/%s/cdroms",
 dataCenterId, serverId), fromRequest), payload);
    }
 
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/bb9dfbaf/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachVolumeRequestBinder.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachVolumeRequestBinder.java
 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachVolumeRequestBinder.java
index 37516f4..b4178f4 100644
--- 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachVolumeRequestBinder.java
+++ 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachVolumeRequestBinder.java
@@ -21,6 +21,9 @@ import 
org.apache.jclouds.profitbricks.rest.binder.BaseProfitBricksRequestBinder
 import org.apache.jclouds.profitbricks.rest.domain.Server;
 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 AttachVolumeRequestBinder extends 
BaseProfitBricksRequestBinder<Server.Request.AttachVolumePayload> {
@@ -29,8 +32,8 @@ public class AttachVolumeRequestBinder extends 
BaseProfitBricksRequestBinder<Ser
    String serverId;
 
    @Inject
-   AttachVolumeRequestBinder(Json jsonBinder) {
-      super("volume", jsonBinder);
+   AttachVolumeRequestBinder(Json jsonBinder, @Provider Supplier<URI> 
endpointSupplier) {
+      super("volume", jsonBinder, endpointSupplier);
    }
 
    @Override
@@ -45,14 +48,13 @@ public class AttachVolumeRequestBinder extends 
BaseProfitBricksRequestBinder<Ser
       dataCenterId = payload.dataCenterId();
       serverId = payload.serverId();
       
-      requestBuilder.put("id", payload.volumeId());
-      return jsonBinder.toJson(requestBuilder);
+      formMap.put("id", payload.volumeId());
+      return jsonBinder.toJson(formMap);
    }
-
+   
    @Override
    protected <R extends HttpRequest> R createRequest(R fromRequest, String 
payload) {              
-      R request = (R) 
fromRequest.toBuilder().replacePath(String.format("/rest/datacenters/%s/servers/%s/volumes",
 dataCenterId, serverId)).build();
-      return super.createRequest(request, payload);
+      return 
super.createRequest(genRequest(String.format("datacenters/%s/servers/%s/volumes",
 dataCenterId, serverId), fromRequest), payload);
    }
 
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/bb9dfbaf/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/CreateServerRequestBinder.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/CreateServerRequestBinder.java
 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/CreateServerRequestBinder.java
index 9ff4448..d7a2a97 100644
--- 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/CreateServerRequestBinder.java
+++ 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/CreateServerRequestBinder.java
@@ -16,7 +16,6 @@
  */
 package org.apache.jclouds.profitbricks.rest.binder.server;
 
-import static com.google.common.base.Preconditions.checkNotNull;
 import com.google.inject.Inject;
 import java.util.HashMap;
 import java.util.Map;
@@ -24,14 +23,18 @@ import 
org.apache.jclouds.profitbricks.rest.binder.BaseProfitBricksRequestBinder
 import org.apache.jclouds.profitbricks.rest.domain.Server;
 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 CreateServerRequestBinder extends 
BaseProfitBricksRequestBinder<Server.Request.CreatePayload> {
 
    String dataCenterId;
 
    @Inject
-   CreateServerRequestBinder(Json jsonBinder) {
-      super("server", jsonBinder);
+   CreateServerRequestBinder(Json jsonBinder, @Provider Supplier<URI> 
endpointSupplier) {
+      super("server", jsonBinder, endpointSupplier);
    }
 
    @Override
@@ -58,7 +61,7 @@ public class CreateServerRequestBinder extends 
BaseProfitBricksRequestBinder<Ser
       else if (payload.bootCdrom() != null)
          properties.put("bootCdrom", payload.bootCdrom());
       
-      requestBuilder.put("properties", properties);
+      formMap.put("properties", properties);
       
       Server.Entities entities = payload.entities();
       
@@ -72,16 +75,15 @@ public class CreateServerRequestBinder extends 
BaseProfitBricksRequestBinder<Ser
          if (entities.nics() != null)
             entitiesParams.put("nics", entities.nics());
          
-         requestBuilder.put("entities", entitiesParams);
+         formMap.put("entities", entitiesParams);
       }
 
-      return jsonBinder.toJson(requestBuilder);
+      return jsonBinder.toJson(formMap);
    }
-
+  
    @Override
    protected <R extends HttpRequest> R createRequest(R fromRequest, String 
payload) {              
-      R request = (R) 
fromRequest.toBuilder().replacePath(String.format("/rest/datacenters/%s/servers",
 dataCenterId)).build();
-      return super.createRequest(request, payload);
+      return 
super.createRequest(genRequest(String.format("datacenters/%s/servers", 
dataCenterId), fromRequest), payload);
    }
 
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/bb9dfbaf/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/UpdateServerRequestBinder.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/UpdateServerRequestBinder.java
 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/UpdateServerRequestBinder.java
index ca1f2f0..61ebf81 100644
--- 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/UpdateServerRequestBinder.java
+++ 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/UpdateServerRequestBinder.java
@@ -16,12 +16,15 @@
  */
 package org.apache.jclouds.profitbricks.rest.binder.server;
 
-import static com.google.common.base.Preconditions.checkNotNull;
 import com.google.inject.Inject;
 import 
org.apache.jclouds.profitbricks.rest.binder.BaseProfitBricksRequestBinder;
 import org.apache.jclouds.profitbricks.rest.domain.Server;
 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 UpdateServerRequestBinder extends 
BaseProfitBricksRequestBinder<Server.Request.UpdatePayload> {
 
@@ -29,8 +32,8 @@ public class UpdateServerRequestBinder extends 
BaseProfitBricksRequestBinder<Ser
    String serverId;
 
    @Inject
-   UpdateServerRequestBinder(Json jsonBinder) {
-      super("server", jsonBinder);
+   UpdateServerRequestBinder(Json jsonBinder, @Provider Supplier<URI> 
endpointSupplier) {
+      super("server", jsonBinder, endpointSupplier);
    }
 
    @Override
@@ -42,28 +45,27 @@ public class UpdateServerRequestBinder extends 
BaseProfitBricksRequestBinder<Ser
       dataCenterId = payload.dataCenterId();
       serverId = payload.id();
       
-      requestBuilder.put("name",  payload.name());
-      requestBuilder.put("ram",   payload.ram());
-      requestBuilder.put("cores", payload.cores());
+      formMap.put("name",  payload.name());
+      formMap.put("ram",   payload.ram());
+      formMap.put("cores", payload.cores());
       
       if (payload.availabilityZone() != null)
-         requestBuilder.put("availabilityzone", payload.availabilityZone());
+         formMap.put("availabilityzone", payload.availabilityZone());
       
       if (payload.licenceType() != null)
-         requestBuilder.put("licencetype", payload.licenceType());
+         formMap.put("licencetype", payload.licenceType());
       
       if (payload.bootVolume() != null)
-         requestBuilder.put("bootVolume", payload.bootVolume());
+         formMap.put("bootVolume", payload.bootVolume());
       else if (payload.bootCdrom() != null)
-         requestBuilder.put("bootCdrom", payload.bootCdrom());
+         formMap.put("bootCdrom", payload.bootCdrom());
       
-      return jsonBinder.toJson(requestBuilder);
+      return jsonBinder.toJson(formMap);
    }
 
    @Override
    protected <R extends HttpRequest> R createRequest(R fromRequest, String 
payload) {              
-      R request = (R) 
fromRequest.toBuilder().replacePath(String.format("/rest/datacenters/%s/servers/%s",
 dataCenterId, serverId)).build();
-      return super.createRequest(request, payload);
+      return 
super.createRequest(genRequest(String.format("datacenters/%s/servers/%s", 
dataCenterId, serverId), fromRequest), payload);
    }
 
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/bb9dfbaf/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/snapshot/UpdateSnapshotRequestBinder.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/snapshot/UpdateSnapshotRequestBinder.java
 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/snapshot/UpdateSnapshotRequestBinder.java
index 089a237..5b9f984 100644
--- 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/snapshot/UpdateSnapshotRequestBinder.java
+++ 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/snapshot/UpdateSnapshotRequestBinder.java
@@ -16,20 +16,23 @@
  */
 package org.apache.jclouds.profitbricks.rest.binder.snapshot;
 
-import static com.google.common.base.Preconditions.checkNotNull;
 import com.google.inject.Inject;
 import 
org.apache.jclouds.profitbricks.rest.binder.BaseProfitBricksRequestBinder;
 import org.apache.jclouds.profitbricks.rest.domain.Snapshot;
 import org.jclouds.http.HttpRequest;
 import org.jclouds.json.Json;
+import static com.google.common.base.Preconditions.checkNotNull;
+import com.google.common.base.Supplier;
+import java.net.URI;
+import org.jclouds.location.Provider;
 
 public class UpdateSnapshotRequestBinder extends 
BaseProfitBricksRequestBinder<Snapshot.Request.UpdatePayload> {
 
    private String snapshotId;
 
    @Inject
-   UpdateSnapshotRequestBinder(Json jsonBinder) {
-      super("snapshot", jsonBinder);
+   UpdateSnapshotRequestBinder(Json jsonBinder, @Provider Supplier<URI> 
endpointSupplier) {
+      super("snapshot", jsonBinder, endpointSupplier);
    }
 
    @Override
@@ -40,45 +43,45 @@ public class UpdateSnapshotRequestBinder extends 
BaseProfitBricksRequestBinder<S
       snapshotId = payload.id();
 
       if (payload.name() != null)
-        requestBuilder.put("name", payload.name());
+        formMap.put("name", payload.name());
 
       if (payload.description() != null)
-        requestBuilder.put("description", payload.description());
+        formMap.put("description", payload.description());
 
       if (payload.licenceType() != null)
-        requestBuilder.put("licenceType", payload.licenceType());
+        formMap.put("licenceType", payload.licenceType());
 
       if (payload.cpuHotPlug() != null)
-        requestBuilder.put("cpuHotPlug", payload.cpuHotPlug());
+        formMap.put("cpuHotPlug", payload.cpuHotPlug());
 
       if (payload.cpuHotUnplug() != null)
-        requestBuilder.put("cpuHotUnplug", payload.cpuHotUnplug());
+        formMap.put("cpuHotUnplug", payload.cpuHotUnplug());
 
       if (payload.ramHotPlug() != null)
-        requestBuilder.put("ramHotPlug", payload.ramHotPlug());
+        formMap.put("ramHotPlug", payload.ramHotPlug());
 
       if (payload.ramHotUnplug() != null)
-        requestBuilder.put("ramHotUnplug", payload.ramHotUnplug());
+        formMap.put("ramHotUnplug", payload.ramHotUnplug());
 
       if (payload.nicHotPlug() != null)
-        requestBuilder.put("nicHotPlug", payload.nicHotPlug());
+        formMap.put("nicHotPlug", payload.nicHotPlug());
 
       if (payload.nicHotUnplug() != null)
-        requestBuilder.put("nicHotUnplug", payload.nicHotUnplug());
+        formMap.put("nicHotUnplug", payload.nicHotUnplug());
 
       if (payload.discVirtioHotPlug() != null)
-        requestBuilder.put("discVirtioHotPlug", payload.discVirtioHotPlug());
+        formMap.put("discVirtioHotPlug", payload.discVirtioHotPlug());
 
       if (payload.discVirtioHotUnplug() != null)
-        requestBuilder.put("discVirtioHotUnplug", 
payload.discVirtioHotUnplug());
+        formMap.put("discVirtioHotUnplug", payload.discVirtioHotUnplug());
 
       if (payload.discScsiHotPlug() != null)
-        requestBuilder.put("discScsiHotPlug", payload.discScsiHotPlug());
+        formMap.put("discScsiHotPlug", payload.discScsiHotPlug());
 
       if (payload.discScsiHotUnplug() != null)
-        requestBuilder.put("discScsiHotUnplug", payload.discScsiHotUnplug());
+        formMap.put("discScsiHotUnplug", payload.discScsiHotUnplug());
       
-      return jsonBinder.toJson(requestBuilder);
+      return jsonBinder.toJson(formMap);
    }
 
    @Override

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/bb9dfbaf/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/CreateSnapshotRequestBinder.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/CreateSnapshotRequestBinder.java
 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/CreateSnapshotRequestBinder.java
index c2b8869..bd47ed9 100644
--- 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/CreateSnapshotRequestBinder.java
+++ 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/CreateSnapshotRequestBinder.java
@@ -22,8 +22,11 @@ import javax.ws.rs.core.MediaType;
 import 
org.apache.jclouds.profitbricks.rest.binder.BaseProfitBricksRequestBinder;
 import org.apache.jclouds.profitbricks.rest.domain.Volume;
 import org.jclouds.http.HttpRequest;
-import org.jclouds.http.HttpRequest.Builder;
 import static com.google.common.base.Preconditions.checkNotNull;
+import com.google.common.base.Supplier;
+import com.google.inject.Inject;
+import java.net.URI;
+import org.jclouds.location.Provider;
 
 public class CreateSnapshotRequestBinder extends 
BaseProfitBricksRequestBinder<Volume.Request.CreateSnapshotPayload> {
 
@@ -31,8 +34,9 @@ public class CreateSnapshotRequestBinder extends 
BaseProfitBricksRequestBinder<V
    private String dataCenterId;
    private String volumeId;
 
-   CreateSnapshotRequestBinder() {
-      super("snapshot", null);
+   @Inject
+   CreateSnapshotRequestBinder(@Provider Supplier<URI> endpointSupplier) {
+      super("snapshot", null, endpointSupplier);
       this.formMap = HashMultimap.create();
    }
 
@@ -56,18 +60,13 @@ public class CreateSnapshotRequestBinder extends 
BaseProfitBricksRequestBinder<V
 
    @Override
    protected <R extends HttpRequest> R createRequest(R fromRequest, String 
payload) {
-      
       fromRequest = super.createRequest(fromRequest, payload);
       
-      Builder<?> reqBuilder = fromRequest.toBuilder();
-                  
-      reqBuilder.addFormParams(formMap);
-      
reqBuilder.replacePath(String.format("/rest/datacenters/%s/volumes/%s/create-snapshot",
 dataCenterId, volumeId));
-      
-      R req = (R) reqBuilder.build();
+      R req = (R) fromRequest.toBuilder().addFormParams(formMap).build();
       
req.getPayload().getContentMetadata().setContentType(MediaType.APPLICATION_FORM_URLENCODED);
       
-      return req;
+      return 
genRequest(String.format("datacenters/%s/volumes/%s/create-snapshot", 
dataCenterId, volumeId), req);
    }
 
+
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/bb9dfbaf/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 8cbf1a7..661499e 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,7 +16,6 @@
  */
 package org.apache.jclouds.profitbricks.rest.binder.volume;
 
-import static com.google.common.base.Preconditions.checkNotNull;
 import com.google.inject.Inject;
 import java.util.HashMap;
 import java.util.Map;
@@ -24,25 +23,32 @@ 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> {
 
    private String dataCenterId;
 
    @Inject
-   CreateVolumeRequestBinder(Json jsonBinder) {
-      super("volume", jsonBinder);
+   CreateVolumeRequestBinder(Json jsonBinder, @Provider Supplier<URI> 
endpointSupplier) {
+      super("volume", jsonBinder, endpointSupplier);
    }
 
    @Override
    protected String createPayload(Volume.Request.CreatePayload payload) {
       
       checkNotNull(payload.dataCenterId(), "dataCenterId");
+      checkNotNull(payload.type(), "type");
 
       dataCenterId = payload.dataCenterId();
       
       Map<String, Object> properties = new HashMap<String, Object>();
       
+      properties.put("type", payload.type());
+      
       properties.put("size",  payload.size());
       
       if (payload.name() != null)
@@ -51,8 +57,8 @@ public class CreateVolumeRequestBinder extends 
BaseProfitBricksRequestBinder<Vol
       if (payload.bus() != null)
          properties.put("bus", payload.bus());
       
-      if (payload.type() != null)
-         properties.put("type", payload.type());
+      if (payload.sshKeys() != null)
+         properties.put("sshKeys", payload.sshKeys());
       
       if (payload.imagePassword() != null)
          properties.put("imagePassword", payload.imagePassword());
@@ -62,15 +68,14 @@ public class CreateVolumeRequestBinder extends 
BaseProfitBricksRequestBinder<Vol
       else if (payload.licenceType() != null)
          properties.put("licenceType", payload.licenceType());
       
-      requestBuilder.put("properties", properties);
+      formMap.put("properties", properties);
       
-      return jsonBinder.toJson(requestBuilder);
+      return jsonBinder.toJson(formMap);
    }
 
    @Override
    protected <R extends HttpRequest> R createRequest(R fromRequest, String 
payload) {              
-      R request = (R) 
fromRequest.toBuilder().replacePath(String.format("/rest/datacenters/%s/volumes",
 dataCenterId)).build();
-      return super.createRequest(request, payload);
+      return 
super.createRequest(genRequest(String.format("datacenters/%s/volumes", 
dataCenterId), fromRequest), payload);
    }
 
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/bb9dfbaf/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/RestoreSnapshotRequestBinder.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/RestoreSnapshotRequestBinder.java
 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/RestoreSnapshotRequestBinder.java
index 8fb5ab7..999aec8 100644
--- 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/RestoreSnapshotRequestBinder.java
+++ 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/RestoreSnapshotRequestBinder.java
@@ -23,6 +23,10 @@ import 
org.apache.jclouds.profitbricks.rest.binder.BaseProfitBricksRequestBinder
 import org.apache.jclouds.profitbricks.rest.domain.Volume;
 import org.jclouds.http.HttpRequest;
 import static com.google.common.base.Preconditions.checkNotNull;
+import com.google.common.base.Supplier;
+import com.google.inject.Inject;
+import java.net.URI;
+import org.jclouds.location.Provider;
 
 public class RestoreSnapshotRequestBinder extends 
BaseProfitBricksRequestBinder<Volume.Request.RestoreSnapshotPayload> {
 
@@ -31,8 +35,9 @@ public class RestoreSnapshotRequestBinder extends 
BaseProfitBricksRequestBinder<
    private String dataCenterId;
    private String volumeId;
 
-   RestoreSnapshotRequestBinder() {
-      super("snapshot", null);
+   @Inject
+   RestoreSnapshotRequestBinder(@Provider Supplier<URI> endpointSupplier) {
+      super("snapshot", null, endpointSupplier);
       this.formMap = HashMultimap.create();
    }
 
@@ -50,21 +55,15 @@ public class RestoreSnapshotRequestBinder extends 
BaseProfitBricksRequestBinder<
       
       return "";
    }
-
+   
    @Override
    protected <R extends HttpRequest> R createRequest(R fromRequest, String 
payload) {
-      
       fromRequest = super.createRequest(fromRequest, payload);
       
-      HttpRequest.Builder<?> reqBuilder = fromRequest.toBuilder();
-      
-      reqBuilder.addFormParams(formMap);
-      
reqBuilder.replacePath(String.format("/rest/datacenters/%s/volumes/%s/restore-snapshot",
 dataCenterId, volumeId));
-      
-      R req = (R) reqBuilder.build();
+      R req = (R) fromRequest.toBuilder().addFormParams(formMap).build();
       
req.getPayload().getContentMetadata().setContentType(MediaType.APPLICATION_FORM_URLENCODED);
       
-      return req;
+      return 
genRequest(String.format("datacenters/%s/volumes/%s/restore-snapshot", 
dataCenterId, volumeId), req);
    }
 
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/bb9dfbaf/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/UpdateVolumeRequestBinder.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/UpdateVolumeRequestBinder.java
 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/UpdateVolumeRequestBinder.java
index 188d28d..e300f73 100644
--- 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/UpdateVolumeRequestBinder.java
+++ 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/UpdateVolumeRequestBinder.java
@@ -16,12 +16,15 @@
  */
 package org.apache.jclouds.profitbricks.rest.binder.volume;
 
-import static com.google.common.base.Preconditions.checkNotNull;
 import com.google.inject.Inject;
 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 UpdateVolumeRequestBinder extends 
BaseProfitBricksRequestBinder<Volume.Request.UpdatePayload> {
 
@@ -29,8 +32,8 @@ public class UpdateVolumeRequestBinder extends 
BaseProfitBricksRequestBinder<Vol
    private String volumeId;
 
    @Inject
-   UpdateVolumeRequestBinder(Json jsonBinder) {
-      super("volume", jsonBinder);
+   UpdateVolumeRequestBinder(Json jsonBinder, @Provider Supplier<URI> 
endpointSupplier) {
+      super("volume", jsonBinder, endpointSupplier);
    }
 
    @Override
@@ -43,21 +46,20 @@ public class UpdateVolumeRequestBinder extends 
BaseProfitBricksRequestBinder<Vol
       volumeId = payload.id();
       
       if (payload.name() != null)
-         requestBuilder.put("name",  payload.name());
+         formMap.put("name",  payload.name());
       
       if (payload.size() != null)
-         requestBuilder.put("size",  payload.size());
+         formMap.put("size",  payload.size());
       
       if (payload.bus() != null)
-         requestBuilder.put("bus",  payload.bus());
+         formMap.put("bus",  payload.bus());
       
-      return jsonBinder.toJson(requestBuilder);
+      return jsonBinder.toJson(formMap);
    }
 
    @Override
    protected <R extends HttpRequest> R createRequest(R fromRequest, String 
payload) {              
-      R request = (R) 
fromRequest.toBuilder().replacePath(String.format("/rest/datacenters/%s/volumes/%s",
 dataCenterId, volumeId)).build();
-      return super.createRequest(request, payload);
+      return 
super.createRequest(genRequest(String.format("datacenters/%s/volumes/%s", 
dataCenterId, volumeId), fromRequest), payload);
    }
 
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/bb9dfbaf/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/domain/Location.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/domain/Location.java
 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/domain/Location.java
index 48536ca..79ac418 100644
--- 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/domain/Location.java
+++ 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/domain/Location.java
@@ -16,8 +16,6 @@
  */
 package org.apache.jclouds.profitbricks.rest.domain;
 
-import com.google.common.base.Enums;
-
 public enum Location {
    
    DE_FKB("de/fkb", "Germany, Karlsruhe"),
@@ -47,9 +45,7 @@ public enum Location {
    }
 
    public static Location fromValue(String v) {
-      return Enums
-              .getIfPresent(Location.class, v)
-              .or(UNRECOGNIZED);
+      return Location.fromId(v);
    }
 
    public static Location fromId(String id) {

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/bb9dfbaf/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 0608f3d..bab0909 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
@@ -22,6 +22,7 @@ import org.apache.jclouds.profitbricks.rest.util.Passwords;
 import org.jclouds.javax.annotation.Nullable;
 import org.jclouds.json.SerializedNames;
 import static com.google.common.base.Preconditions.checkArgument;
+import java.util.Set;
 
 @AutoValue
 public abstract class Volume {
@@ -62,7 +63,7 @@ public abstract class Volume {
         public abstract String name();
 
         @Nullable
-        public abstract String type();
+        public abstract VolumeType type();
 
         public abstract float size();
 
@@ -75,6 +76,7 @@ public abstract class Volume {
         @Nullable
         public abstract BusType bus();
 
+        @Nullable
         public abstract LicenceType licenceType();
 
         public abstract boolean cpuHotPlug();
@@ -101,7 +103,7 @@ public abstract class Volume {
         public abstract Integer deviceNumber();
 
         @SerializedNames({"name", "type", "size", "image", "imagePassword", 
"bus", "licenceType", "cpuHotPlug", "cpuHotUnplug", "ramHotPlug", 
"ramHotUnplug", "nicHotPlug", "nicHotUnplug", "discVirtioHotPlug", 
"discVirtioHotUnplug", "discScsiHotPlug", "discScsiHotUnplug", "deviceNumber"})
-        public static Volume.Properties create(String name, String type, float 
size, String image, String imagePassword, BusType bus, LicenceType licenceType,
+        public static Volume.Properties create(String name, VolumeType type, 
float size, String image, String imagePassword, BusType bus, LicenceType 
licenceType,
                 boolean cpuHotPlug, boolean cpuHotUnplug, boolean ramHotPlug, 
boolean ramHotUnplug, boolean nicHotPlug, boolean nicHotUnplug, boolean 
discVirtioHotPlug,
                 boolean discVirtioHotUnplug, boolean discScsiHotPlug, boolean 
discScsiHotUnplug, int deviceNumber) {
 
@@ -135,12 +137,14 @@ public abstract class Volume {
          @Nullable
          public abstract String name();
 
-         @Nullable
-         public abstract String type();
-
+         public abstract VolumeType type();
+         
          public abstract int size();
 
          @Nullable
+         public abstract Set<String> sshKeys();
+         
+         @Nullable
          public abstract String image();
 
          @Nullable
@@ -158,7 +162,8 @@ public abstract class Volume {
          public abstract static class Builder {
 
             public abstract Builder name(String name);
-            public abstract Builder type(String type);
+            public abstract Builder type(VolumeType type);
+            public abstract Builder sshKeys(Set<String> list);
             public abstract Builder size(int size);
             public abstract Builder image(String image);
             public abstract Builder imagePassword(String imagePassword);

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/bb9dfbaf/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/domain/VolumeType.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/domain/VolumeType.java
 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/domain/VolumeType.java
new file mode 100644
index 0000000..c4503cd
--- /dev/null
+++ 
b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/domain/VolumeType.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jclouds.profitbricks.rest.domain;
+
+import com.google.common.base.Enums;
+
+public enum VolumeType {
+
+   HDD, UNRECOGNIZED;
+
+   public static VolumeType fromValue(String v) {
+      return Enums.getIfPresent(VolumeType.class, v).or(UNRECOGNIZED);
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/bb9dfbaf/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/BinderTestBase.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/BinderTestBase.java
 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/BinderTestBase.java
new file mode 100644
index 0000000..42b0841
--- /dev/null
+++ 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/BinderTestBase.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jclouds.profitbricks.rest.binder;
+
+import com.google.common.base.Supplier;
+import com.google.common.base.Suppliers;
+import com.google.inject.AbstractModule;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.TypeLiteral;
+import java.net.URI;
+import org.apache.jclouds.profitbricks.rest.ProfitBricksProviderMetadata;
+import org.jclouds.json.config.GsonModule;
+import org.jclouds.location.Provider;
+import org.testng.annotations.BeforeClass;
+
+public class BinderTestBase {
+   
+   protected Injector injector;
+   
+   @BeforeClass
+   public void setup() {
+      this.injector = Guice.createInjector(new GsonModule(), new 
AbstractModule() {
+      @Override protected void configure() {
+         bind(new TypeLiteral<Supplier<URI>>() {
+         }).annotatedWith(Provider.class).toInstance(
+            Suppliers.ofInstance(URI.create(new 
ProfitBricksProviderMetadata().getEndpoint())));
+         }
+      });      
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/bb9dfbaf/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 51f15e1..f2d417c 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
@@ -16,24 +16,21 @@
  */
 package org.apache.jclouds.profitbricks.rest.binder.image;
 
-import com.google.inject.Guice;
-import com.google.inject.Injector;
 import java.util.HashMap;
+import org.apache.jclouds.profitbricks.rest.binder.BinderTestBase;
 import org.apache.jclouds.profitbricks.rest.domain.Image;
 import org.jclouds.http.HttpRequest;
 import org.jclouds.json.Json;
-import org.jclouds.json.config.GsonModule;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 import org.testng.annotations.Test;
 
 @Test(groups = "unit", testName = "UpdateImageRequestBinderTest")
-public class UpdateImageRequestBinderTest {
-
+public class UpdateImageRequestBinderTest extends BinderTestBase {
+   
    @Test
    public void testUpdatePayload() {
-      
-      Injector injector = Guice.createInjector(new GsonModule());
+            
       UpdateImageRequestBinder binder = 
injector.getInstance(UpdateImageRequestBinder.class);
       
       Image.Request.UpdatePayload payload = Image.Request.updatingBuilder()
@@ -49,7 +46,7 @@ public class UpdateImageRequestBinderTest {
               actual
       );
       
-      assertEquals(request.getEndpoint().getPath(), "/rest/images/some-id");
+      assertEquals(request.getEndpoint().getPath(), "/rest/v2/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/bb9dfbaf/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 b0af74f..77124b0 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
@@ -17,24 +17,21 @@
 package org.apache.jclouds.profitbricks.rest.binder.server;
 
 import com.google.common.reflect.TypeToken;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
 import java.util.Map;
+import org.apache.jclouds.profitbricks.rest.binder.BinderTestBase;
 import org.apache.jclouds.profitbricks.rest.domain.Server;
 import org.jclouds.http.HttpRequest;
 import org.jclouds.json.Json;
-import org.jclouds.json.config.GsonModule;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 import org.testng.annotations.Test;
 
 @Test(groups = "unit", testName = "AttachCdromRequestBinderTest")
-public class AttachCdromRequestBinderTest {
+public class AttachCdromRequestBinderTest extends BinderTestBase {
 
    @Test
    public void testCreatePayload() {
-      
-      Injector injector = Guice.createInjector(new GsonModule());
+
       AttachCdromRequestBinder binder = 
injector.getInstance(AttachCdromRequestBinder.class);
             
       Server.Request.AttachCdromPayload payload = 
Server.Request.attachCdromBuilder()
@@ -50,7 +47,7 @@ public class AttachCdromRequestBinderTest {
               actual
       );
       
-      assertEquals(request.getEndpoint().getPath(), 
"/rest/datacenters/datacenter-id/servers/server-id/cdroms");
+      assertEquals(request.getEndpoint().getPath(), 
"/rest/v2/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/bb9dfbaf/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 590da6d..6d6c52c 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
@@ -17,24 +17,21 @@
 package org.apache.jclouds.profitbricks.rest.binder.server;
 
 import com.google.common.reflect.TypeToken;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
 import java.util.Map;
+import org.apache.jclouds.profitbricks.rest.binder.BinderTestBase;
 import org.apache.jclouds.profitbricks.rest.domain.Server;
 import org.jclouds.http.HttpRequest;
 import org.jclouds.json.Json;
-import org.jclouds.json.config.GsonModule;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 import org.testng.annotations.Test;
 
 @Test(groups = "unit", testName = "AttachVolumeRequestBinderTest")
-public class AttachVolumeRequestBinderTest {
+public class AttachVolumeRequestBinderTest  extends BinderTestBase {
 
    @Test
    public void testCreatePayload() {
       
-      Injector injector = Guice.createInjector(new GsonModule());
       AttachVolumeRequestBinder binder = 
injector.getInstance(AttachVolumeRequestBinder.class);
             
       Server.Request.AttachVolumePayload payload = 
Server.Request.attachVolumeBuilder()
@@ -50,7 +47,7 @@ public class AttachVolumeRequestBinderTest {
               actual
       );
       
-      assertEquals(request.getEndpoint().getPath(), 
"/rest/datacenters/datacenter-id/servers/server-id/volumes");
+      assertEquals(request.getEndpoint().getPath(), 
"/rest/v2/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/bb9dfbaf/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 da0ee30..7993416 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
@@ -16,25 +16,22 @@
  */
 package org.apache.jclouds.profitbricks.rest.binder.server;
 
-import com.google.inject.Guice;
-import com.google.inject.Injector;
 import java.util.HashMap;
 import java.util.Map;
+import org.apache.jclouds.profitbricks.rest.binder.BinderTestBase;
 import org.apache.jclouds.profitbricks.rest.domain.Server;
 import org.jclouds.http.HttpRequest;
 import org.jclouds.json.Json;
-import org.jclouds.json.config.GsonModule;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 import org.testng.annotations.Test;
 
 @Test(groups = "unit", testName = "CreateServerRequestBinderTest")
-public class CreateServerRequestBinderTest {
+public class CreateServerRequestBinderTest extends BinderTestBase {
 
    @Test
    public void testCreatePayload() {
-      
-      Injector injector = Guice.createInjector(new GsonModule());
+            
       CreateServerRequestBinder binder = 
injector.getInstance(CreateServerRequestBinder.class);
             
       Server.Request.CreatePayload payload = Server.Request.creatingBuilder()
@@ -51,7 +48,7 @@ public class CreateServerRequestBinderTest {
               actual
       );
       
-      assertEquals(request.getEndpoint().getPath(), 
"/rest/datacenters/datacenter-id/servers");
+      assertEquals(request.getEndpoint().getPath(), 
"/rest/v2/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/bb9dfbaf/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 e1c8102..1c61d85 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
@@ -16,23 +16,21 @@
  */
 package org.apache.jclouds.profitbricks.rest.binder.server;
 
-import com.google.inject.Guice;
-import com.google.inject.Injector;
 import java.util.HashMap;
+import org.apache.jclouds.profitbricks.rest.binder.BinderTestBase;
 import org.apache.jclouds.profitbricks.rest.domain.Server;
 import org.jclouds.http.HttpRequest;
 import org.jclouds.json.Json;
-import org.jclouds.json.config.GsonModule;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 import org.testng.annotations.Test;
 
 @Test(groups = "unit", testName = "UpdateServerRequestBinderTest")
-public class UpdateServerRequestBinderTest {
+public class UpdateServerRequestBinderTest extends BinderTestBase {
 
    @Test
    public void testCreatePayload() {
-      Injector injector = Guice.createInjector(new GsonModule());
+      
       UpdateServerRequestBinder binder = 
injector.getInstance(UpdateServerRequestBinder.class);
  
       Server.Request.UpdatePayload payload = Server.Request.updatingBuilder()
@@ -50,7 +48,7 @@ public class UpdateServerRequestBinderTest {
               actual
       );
       
-      assertEquals(request.getEndpoint().getPath(), 
"/rest/datacenters/datacenter-id/servers/server-id");
+      assertEquals(request.getEndpoint().getPath(), 
"/rest/v2/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/bb9dfbaf/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/snapshot/UpdateSnapshotRequestBinderTest.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/snapshot/UpdateSnapshotRequestBinderTest.java
 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/snapshot/UpdateSnapshotRequestBinderTest.java
index 0ad5673..22196b0 100644
--- 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/snapshot/UpdateSnapshotRequestBinderTest.java
+++ 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/binder/snapshot/UpdateSnapshotRequestBinderTest.java
@@ -16,24 +16,21 @@
  */
 package org.apache.jclouds.profitbricks.rest.binder.snapshot;
 
-import com.google.inject.Guice;
-import com.google.inject.Injector;
 import java.util.HashMap;
+import org.apache.jclouds.profitbricks.rest.binder.BinderTestBase;
 import org.apache.jclouds.profitbricks.rest.domain.Snapshot;
 import org.jclouds.http.HttpRequest;
 import org.jclouds.json.Json;
-import org.jclouds.json.config.GsonModule;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 import org.testng.annotations.Test;
 
 @Test(groups = "unit", testName = "UpdateSnapshotRequestBinderTest")
-public class UpdateSnapshotRequestBinderTest {
+public class UpdateSnapshotRequestBinderTest extends BinderTestBase {
 
    @Test
    public void testUpdatePayload() {
       
-      Injector injector = Guice.createInjector(new GsonModule());
       UpdateSnapshotRequestBinder binder = 
injector.getInstance(UpdateSnapshotRequestBinder.class);
       
       Snapshot.Request.UpdatePayload payload = 
Snapshot.Request.updatingBuilder()

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/bb9dfbaf/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 2c1566f..f0e543a 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
@@ -18,23 +18,20 @@ package org.apache.jclouds.profitbricks.rest.binder.volume;
 
 import com.google.common.collect.HashMultimap;
 import com.google.common.collect.Multimap;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
 import javax.ws.rs.core.MediaType;
+import org.apache.jclouds.profitbricks.rest.binder.BinderTestBase;
 import org.apache.jclouds.profitbricks.rest.domain.Volume;
 import org.jclouds.http.HttpRequest;
 import org.jclouds.io.payloads.UrlEncodedFormPayload;
-import org.jclouds.json.config.GsonModule;
 import static org.testng.Assert.assertEquals;
 import org.testng.annotations.Test;
 
 @Test(groups = "unit", testName = "CreateSnapshotRequestBinderTest")
-public class CreateSnapshotRequestBinderTest {
+public class CreateSnapshotRequestBinderTest extends BinderTestBase {
 
    @Test
    public void testCreatePayload() {
-      
-      Injector injector = Guice.createInjector(new GsonModule());
+            
       CreateSnapshotRequestBinder binder = 
injector.getInstance(CreateSnapshotRequestBinder.class);
             
       Volume.Request.CreateSnapshotPayload payload = 
Volume.Request.createSnapshotBuilder()
@@ -54,7 +51,7 @@ public class CreateSnapshotRequestBinderTest {
       expectedPayload.put("name", "test-snapshot");
       expectedPayload.put("description", "snapshot desc...");
             
-      assertEquals(request.getEndpoint().getPath(), 
"/rest/datacenters/datacenter-id/volumes/volume-id/create-snapshot");
+      assertEquals(request.getEndpoint().getPath(), 
"/rest/v2/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/bb9dfbaf/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 f49ab75..9371cdc 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
@@ -16,32 +16,31 @@
  */
 package org.apache.jclouds.profitbricks.rest.binder.volume;
 
-import com.google.inject.Guice;
-import com.google.inject.Injector;
 import java.util.HashMap;
 import java.util.Map;
+import org.apache.jclouds.profitbricks.rest.binder.BinderTestBase;
 import org.apache.jclouds.profitbricks.rest.domain.LicenceType;
 import org.apache.jclouds.profitbricks.rest.domain.Volume;
+import org.apache.jclouds.profitbricks.rest.domain.VolumeType;
 import org.jclouds.http.HttpRequest;
 import org.jclouds.json.Json;
-import org.jclouds.json.config.GsonModule;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 import org.testng.annotations.Test;
 
 @Test(groups = "unit", testName = "CreateVolumeRequestBinderTest")
-public class CreateVolumeRequestBinderTest {
+public class CreateVolumeRequestBinderTest extends BinderTestBase {
 
    @Test
    public void testCreatePayload() {
       
-      Injector injector = Guice.createInjector(new GsonModule());
       CreateVolumeRequestBinder binder = 
injector.getInstance(CreateVolumeRequestBinder.class);
             
       Volume.Request.CreatePayload payload = Volume.Request.creatingBuilder()
               .dataCenterId("datacenter-id")
               .name("jclouds-volume")
               .size(3)
+              .type(VolumeType.HDD)
               .licenceType(LicenceType.LINUX)
               .build();
 
@@ -52,7 +51,7 @@ public class CreateVolumeRequestBinderTest {
               actual
       );
       
-      assertEquals(request.getEndpoint().getPath(), 
"/rest/datacenters/datacenter-id/volumes");
+      assertEquals(request.getEndpoint().getPath(), 
"/rest/v2/datacenters/datacenter-id/volumes");
       assertNotNull(actual, "Binder returned null payload");
 
       Json json = injector.getInstance(Json.class);
@@ -61,6 +60,7 @@ public class CreateVolumeRequestBinderTest {
       
       properties.put("size", 3);
       properties.put("licenceType", "LINUX");
+      properties.put("type", "HDD");
       properties.put("name", "jclouds-volume");
       
       HashMap<String, Object> expectedPayload = new HashMap<String, Object>();

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/bb9dfbaf/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 f19daa4..5952ca9 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
@@ -16,22 +16,19 @@
  */
 package org.apache.jclouds.profitbricks.rest.binder.volume;
 
-import com.google.inject.Guice;
-import com.google.inject.Injector;
 import javax.ws.rs.core.MediaType;
+import org.apache.jclouds.profitbricks.rest.binder.BinderTestBase;
 import org.apache.jclouds.profitbricks.rest.domain.Volume;
 import org.jclouds.http.HttpRequest;
-import org.jclouds.json.config.GsonModule;
 import static org.testng.Assert.assertEquals;
 import org.testng.annotations.Test;
 
 @Test(groups = "unit", testName = "RestoreSnapshotRequestBinderTest")
-public class RestoreSnapshotRequestBinderTest {
+public class RestoreSnapshotRequestBinderTest extends BinderTestBase {
 
    @Test
    public void testRestorePayload() {
-      
-      Injector injector = Guice.createInjector(new GsonModule());
+                  
       RestoreSnapshotRequestBinder binder = 
injector.getInstance(RestoreSnapshotRequestBinder.class);
             
       Volume.Request.RestoreSnapshotPayload payload = 
Volume.Request.restoreSnapshotBuilder()
@@ -45,7 +42,7 @@ public class RestoreSnapshotRequestBinderTest {
               binder.createPayload(payload)
       );
       
-      assertEquals(request.getEndpoint().getPath(), 
"/rest/datacenters/datacenter-id/volumes/volume-id/restore-snapshot");
+      assertEquals(request.getEndpoint().getPath(), 
"/rest/v2/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/bb9dfbaf/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 f0e6694..6627b71 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
@@ -17,24 +17,21 @@
 package org.apache.jclouds.profitbricks.rest.binder.volume;
 
 import com.google.common.reflect.TypeToken;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
 import java.util.Map;
+import org.apache.jclouds.profitbricks.rest.binder.BinderTestBase;
 import org.apache.jclouds.profitbricks.rest.domain.Volume;
 import org.jclouds.http.HttpRequest;
 import org.jclouds.json.Json;
-import org.jclouds.json.config.GsonModule;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 import org.testng.annotations.Test;
 
 @Test(groups = "unit", testName = "UpdateVolumeRequestBinderTest")
-public class UpdateVolumeRequestBinderTest {
+public class UpdateVolumeRequestBinderTest extends BinderTestBase {
 
    @Test
    public void testCreatePayload() {
       
-      Injector injector = Guice.createInjector(new GsonModule());
       UpdateVolumeRequestBinder binder = 
injector.getInstance(UpdateVolumeRequestBinder.class);
             
       Volume.Request.UpdatePayload payload = Volume.Request.updatingBuilder()
@@ -50,7 +47,7 @@ public class UpdateVolumeRequestBinderTest {
               actual
       );
       
-      assertEquals(request.getEndpoint().getPath(), 
"/rest/datacenters/datacenter-id/volumes/volume-id");
+      assertEquals(request.getEndpoint().getPath(), 
"/rest/v2/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/bb9dfbaf/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/ServerApiMockTest.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/ServerApiMockTest.java
 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/ServerApiMockTest.java
index d08441e..1b11617 100644
--- 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/ServerApiMockTest.java
+++ 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/ServerApiMockTest.java
@@ -135,7 +135,7 @@ public class ServerApiMockTest extends 
BaseProfitBricksApiMockTest {
       assertNotNull(server.id());
       
       assertEquals(this.server.getRequestCount(), 1);
-      assertSent(this.server, "POST", 
"/rest/datacenters/datacenter-id/servers", 
+      assertSent(this.server, "POST", "/datacenters/datacenter-id/servers", 
               "{\"properties\": {\"name\": \"jclouds-node\", \"cores\": 1, 
\"ram\": 1024}}"
       );
    }
@@ -156,7 +156,7 @@ public class ServerApiMockTest extends 
BaseProfitBricksApiMockTest {
               .build());
             
       assertEquals(server.getRequestCount(), 1);
-      assertSent(server, "PATCH", 
"/rest/datacenters/datacenter-id/servers/some-id", "{\"name\": \"apache-node\", 
\"ram\": 2048, \"cores\": 2}");
+      assertSent(server, "PATCH", 
"/datacenters/datacenter-id/servers/some-id", "{\"name\": \"apache-node\", 
\"ram\": 2048, \"cores\": 2}");
    }
    
    @Test
@@ -224,7 +224,7 @@ public class ServerApiMockTest extends 
BaseProfitBricksApiMockTest {
       assertEquals(volume.properties().name(), "Storage");
       
       assertEquals(server.getRequestCount(), 1);
-      assertSent(server, "POST", 
"/rest/datacenters/datacenter-id/servers/server-id/volumes", "{\"id\": 
\"volume-id\"}");
+      assertSent(server, "POST", 
"/datacenters/datacenter-id/servers/server-id/volumes", "{\"id\": 
\"volume-id\"}");
    }
    
    @Test
@@ -277,7 +277,7 @@ public class ServerApiMockTest extends 
BaseProfitBricksApiMockTest {
       );
       
       assertEquals(server.getRequestCount(), 1);
-      assertSent(server, "POST", 
"/rest/datacenters/datacenter-id/servers/server-id/cdroms", "{\"id\": 
\"image-id\"}");
+      assertSent(server, "POST", 
"/datacenters/datacenter-id/servers/server-id/cdroms", "{\"id\": 
\"image-id\"}");
    }
    
    @Test

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/bb9dfbaf/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 6829fc1..ec6532a 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,12 +17,16 @@
 package org.apache.jclouds.profitbricks.rest.features;
 
 import com.google.common.base.Predicate;
+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 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 org.testng.annotations.AfterClass;
@@ -53,13 +57,36 @@ 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() == TestLocation &&
+               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=");
 
       testVolume = volumeApi().createVolume(
               Volume.Request.creatingBuilder()
               .dataCenterId(dataCenter.id())
               .name("jclouds-volume")
-              .size(3)
+              .size(4)
               .licenceType(LicenceType.LINUX)
+              .type(VolumeType.HDD)
+              .image(testImage.id())
+              .sshKeys(sshKeys)
               .build());
 
       assertNotNull(testVolume);

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/bb9dfbaf/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/VolumeApiMockTest.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/VolumeApiMockTest.java
 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/VolumeApiMockTest.java
index e91f6ef..52d40de 100644
--- 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/VolumeApiMockTest.java
+++ 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/VolumeApiMockTest.java
@@ -17,9 +17,11 @@
 package org.apache.jclouds.profitbricks.rest.features;
 
 import com.squareup.okhttp.mockwebserver.MockResponse;
+import java.util.HashSet;
 import java.util.List;
 import org.apache.jclouds.profitbricks.rest.domain.LicenceType;
 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.internal.BaseProfitBricksApiMockTest;
 import static org.testng.Assert.assertEquals;
@@ -94,6 +96,7 @@ public class VolumeApiMockTest extends 
BaseProfitBricksApiMockTest {
               .dataCenterId("datacenter-id")
               .name("jclouds-volume")
               .size(3)
+              .type(VolumeType.HDD)
               .licenceType(LicenceType.LINUX)
               .build());
 
@@ -101,8 +104,36 @@ public class VolumeApiMockTest extends 
BaseProfitBricksApiMockTest {
       assertNotNull(volume.id());
       
       assertEquals(server.getRequestCount(), 1);
-      assertSent(server, "POST", "/rest/datacenters/datacenter-id/volumes", 
-              "{\"properties\": {\"name\": \"jclouds-volume\", \"size\": 3, 
\"licenceType\": \"LINUX\"}}"
+      assertSent(server, "POST", "/datacenters/datacenter-id/volumes", 
+              "{\"properties\": {\"name\": \"jclouds-volume\", \"size\": 3, 
\"licenceType\": \"LINUX\", \"type\":\"HDD\"}}"
+      );
+   }
+   
+   @Test
+   public void testCreateWithSsh() throws InterruptedException {
+      server.enqueue(
+         new MockResponse().setBody(stringFromResource("/volume/get.json"))
+      );
+      
+      HashSet<String> sshKeys = new HashSet<String>();
+      sshKeys.add("hQGOEJeFL91EG3+l9TtRbWNjzhDVHeLuL3NWee6bekA=");
+      
+      Volume volume = volumeApi().createVolume(
+              Volume.Request.creatingBuilder()
+              .dataCenterId("datacenter-id")
+              .name("jclouds-volume")
+              .size(3)
+              .type(VolumeType.HDD)
+              .licenceType(LicenceType.LINUX)
+              .sshKeys(sshKeys)
+              .build());
+
+      assertNotNull(volume);
+      assertNotNull(volume.id());
+      
+      assertEquals(server.getRequestCount(), 1);
+      assertSent(server, "POST", "/datacenters/datacenter-id/volumes", 
+              "{\"properties\": {\"name\": \"jclouds-volume\", \"size\": 3, 
\"licenceType\": \"LINUX\", 
\"sshKeys\":[\"hQGOEJeFL91EG3+l9TtRbWNjzhDVHeLuL3NWee6bekA=\"], 
\"type\":\"HDD\"}}"
       );
    }
    
@@ -120,7 +151,7 @@ public class VolumeApiMockTest extends 
BaseProfitBricksApiMockTest {
               .build());
             
       assertEquals(server.getRequestCount(), 1);
-      assertSent(server, "PATCH", 
"/rest/datacenters/datacenter-id/volumes/some-id", "{\"name\": 
\"apache-volume\"}");
+      assertSent(server, "PATCH", 
"/datacenters/datacenter-id/volumes/some-id", "{\"name\": \"apache-volume\"}");
    }
    
    @Test
@@ -149,7 +180,7 @@ public class VolumeApiMockTest extends 
BaseProfitBricksApiMockTest {
       );
       
       assertEquals(server.getRequestCount(), 1);
-      assertSent(server, "POST", 
"/rest/datacenters/datacenter-id/volumes/volume-id/create-snapshot");
+      assertSent(server, "POST", 
"/datacenters/datacenter-id/volumes/volume-id/create-snapshot");
    }
    
    @Test
@@ -166,7 +197,7 @@ public class VolumeApiMockTest extends 
BaseProfitBricksApiMockTest {
       );
       
       assertEquals(server.getRequestCount(), 1);
-      assertSent(server, "POST", 
"/rest/datacenters/datacenter-id/volumes/volume-id/restore-snapshot");
+      assertSent(server, "POST", 
"/datacenters/datacenter-id/volumes/volume-id/restore-snapshot");
    }
         
    private VolumeApi volumeApi() {

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/bb9dfbaf/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/internal/BaseProfitBricksLiveTest.java
----------------------------------------------------------------------
diff --git 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/internal/BaseProfitBricksLiveTest.java
 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/internal/BaseProfitBricksLiveTest.java
index 0a42a4b..79b7f92 100644
--- 
a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/internal/BaseProfitBricksLiveTest.java
+++ 
b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/internal/BaseProfitBricksLiveTest.java
@@ -36,6 +36,7 @@ import org.apache.jclouds.profitbricks.rest.domain.Location;
 import org.apache.jclouds.profitbricks.rest.domain.Server;
 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.ids.ServerRef;
 import org.apache.jclouds.profitbricks.rest.ids.VolumeRef;
 import org.jclouds.apis.BaseApiLiveTest;
@@ -170,6 +171,7 @@ public class BaseProfitBricksLiveTest extends 
BaseApiLiveTest<ProfitBricksApi> {
               .dataCenterId(dataCenter.id())
               .name("jclouds-volume")
               .size(3)
+              .type(VolumeType.HDD)
               .licenceType(LicenceType.LINUX)
               .build());
    }

Reply via email to