You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by na...@apache.org on 2016/10/31 13:33:22 UTC

jclouds-labs git commit: Support REST API v3 in ProfitBricks

Repository: jclouds-labs
Updated Branches:
  refs/heads/master bf9ed5b8d -> 61e5651be


Support REST API v3 in ProfitBricks


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

Branch: refs/heads/master
Commit: 61e5651beabcd9f90a14d96eda9ffe64a33007bd
Parents: bf9ed5b
Author: Ali Bazlamit <al...@hotmail.com>
Authored: Mon Oct 31 12:05:03 2016 +0100
Committer: Ignasi Barrera <na...@apache.org>
Committed: Mon Oct 31 14:32:55 2016 +0100

----------------------------------------------------------------------
 profitbricks-rest/pom.xml                       |   2 +-
 .../rest/ProfitBricksApiMetadata.java           |   2 +-
 .../binder/BaseProfitBricksRequestBinder.java   |  27 +--
 .../jclouds/profitbricks/rest/domain/Nic.java   |  64 +++++--
 .../profitbricks/rest/domain/Volume.java        | 187 +++++++++++--------
 .../rest/features/DataCenterApi.java            |  12 +-
 .../profitbricks/rest/features/FirewallApi.java |   2 +-
 .../profitbricks/rest/features/IpBlockApi.java  |   2 +-
 .../profitbricks/rest/features/LanApi.java      |   2 +-
 .../profitbricks/rest/features/NicApi.java      |   2 +-
 .../profitbricks/rest/features/ServerApi.java   |   2 +-
 .../profitbricks/rest/features/SnapshotApi.java |   2 +-
 .../profitbricks/rest/features/VolumeApi.java   |   2 +-
 .../rest/features/DataCenterApiMockTest.java    |   2 +-
 .../rest/features/FirewallApiLiveTest.java      |  16 +-
 .../rest/features/FirewallApiMockTest.java      |   4 +-
 .../rest/features/ImageApiMockTest.java         |   4 +-
 .../rest/features/IpBlockApiMockTest.java       |   2 +-
 .../rest/features/LanApiMockTest.java           |   4 +-
 .../rest/features/NicApiMockTest.java           |   2 +-
 .../rest/features/ServerApiLiveTest.java        | 113 ++++++-----
 .../rest/features/ServerApiMockTest.java        |   4 +-
 .../rest/features/SnapshotApiMockTest.java      |   4 +-
 .../rest/features/VolumeApiMockTest.java        |   2 +-
 .../internal/BaseProfitBricksApiMockTest.java   |   4 +-
 .../rest/internal/BaseProfitBricksLiveTest.java |  29 ++-
 26 files changed, 286 insertions(+), 212 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/61e5651b/profitbricks-rest/pom.xml
----------------------------------------------------------------------
diff --git a/profitbricks-rest/pom.xml b/profitbricks-rest/pom.xml
index 3cb63f0..39fe0f4 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/rest/v2/</test.profitbricks-rest.endpoint>
+        <test.profitbricks-rest.endpoint>https://api.profitbricks.com/cloudapi/v3/</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/61e5651b/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 6bb680c..a39f798 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/rest/v2/")
+                 .defaultEndpoint("https://api.profitbricks.com/cloudapi/v3/")
                  .view(ComputeServiceContext.class)
                  .defaultProperties(ProfitBricksApiMetadata.defaultProperties())
                  .defaultModules(ImmutableSet.<Class<? extends Module>>builder()

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/61e5651b/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 b5bf528..9c44d4b 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,18 +16,18 @@
  */
 package org.apache.jclouds.profitbricks.rest.binder;
 
-import java.util.Map;
-import org.jclouds.http.HttpRequest;
-import org.jclouds.rest.MapBinder;
+import static com.google.common.base.Preconditions.checkNotNull;
 import com.google.common.base.Strings;
+import com.google.common.base.Supplier;
 import com.google.inject.Inject;
+import java.net.URI;
 import java.util.HashMap;
-import org.jclouds.json.Json;
+import java.util.Map;
+import org.jclouds.http.HttpRequest;
 import org.jclouds.io.MutableContentMetadata;
 import org.jclouds.io.payloads.BaseMutableContentMetadata;
-import java.net.URI;
-import com.google.common.base.Supplier;
-import static com.google.common.base.Preconditions.checkNotNull;
+import org.jclouds.json.Json;
+import org.jclouds.rest.MapBinder;
 
 public abstract class BaseProfitBricksRequestBinder<T> implements MapBinder {
 
@@ -69,7 +69,7 @@ public abstract class BaseProfitBricksRequestBinder<T> implements MapBinder {
 
    protected <R extends HttpRequest> R createRequest(R fromRequest, String payload) {
       MutableContentMetadata metadata = new BaseMutableContentMetadata();
-      metadata.setContentType("application/vnd.profitbricks.resource+json");
+      metadata.setContentType("application/json");
       metadata.setContentLength(Long.valueOf(payload.getBytes().length));
 
       fromRequest.setPayload(payload);
@@ -80,14 +80,15 @@ public abstract class BaseProfitBricksRequestBinder<T> implements MapBinder {
    @SuppressWarnings("unchecked")
    protected <R extends HttpRequest> R genRequest(String path, R fromRequest) {          
       R request = (R) fromRequest.toBuilder()
-         .replacePath(endpointSupplier.get().getPath() + path)
-         .build();
-      
+              .replacePath(endpointSupplier.get().getPath() + path)
+              .build();
+
       return request;
    }
-   
+
    protected void putIfPresent(Map<String, Object> list, String key, Object value) {
-      if (value != null)
+      if (value != null) {
          list.put(key, value);
+      }
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/61e5651b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/domain/Nic.java
----------------------------------------------------------------------
diff --git a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/domain/Nic.java b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/domain/Nic.java
index 4071dad..9f8b40a 100644
--- a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/domain/Nic.java
+++ b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/domain/Nic.java
@@ -17,22 +17,22 @@
 package org.apache.jclouds.profitbricks.rest.domain;
 
 import com.google.auto.value.AutoValue;
-import java.util.List;
-import org.jclouds.json.SerializedNames;
 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;
 
 @AutoValue
 public abstract class Nic extends Trackable {
 
    public abstract String id();
-   
+
    @Nullable
    public abstract String dataCenterId();
-   
+
    @Nullable
-   public abstract String serverId();   
+   public abstract String serverId();
 
    public abstract String type();
 
@@ -69,14 +69,17 @@ public abstract class Nic extends Trackable {
       public abstract int lan();
 
       @Nullable
+      public abstract Boolean nat();
+
+      @Nullable
       public abstract Boolean firewallActive();
 
       @Nullable
       public abstract Entities entities();
 
-      @SerializedNames({"name", "mac", "ips", "dhcp", "lan", "firewallActive", "entities"})
-      public static Properties create(String name, String mac, List<String> ips, Boolean dhcp, int lan, Boolean firewallactive, Entities entities) {
-	 return new AutoValue_Nic_Properties(name, mac, ips == null ? ImmutableList.<String>of() : copyOf(ips), dhcp, lan, firewallactive, entities);
+      @SerializedNames({"name", "mac", "ips", "dhcp", "lan", "nat", "firewallActive", "entities"})
+      public static Properties create(String name, String mac, List<String> ips, Boolean dhcp, int lan, Boolean nat, Boolean firewallactive, Entities entities) {
+         return new AutoValue_Nic_Properties(name, mac, ips == null ? ImmutableList.<String>of() : copyOf(ips), dhcp, lan, nat, firewallactive, entities);
       }
    }
 
@@ -87,10 +90,10 @@ public abstract class Nic extends Trackable {
 
       @SerializedNames({"firewallrules"})
       public static Entities create(FirewallRules firewallrules) {
-	 return new AutoValue_Nic_Entities(firewallrules);
+         return new AutoValue_Nic_Entities(firewallrules);
       }
    }
-   
+
    public static final class Request {
 
       public static CreatePayload.Builder creatingBuilder() {
@@ -114,28 +117,41 @@ public abstract class Nic extends Trackable {
          public abstract Boolean dhcp();
 
          public abstract int lan();
-         
+
+         @Nullable
+         public abstract Boolean nat();
+
          @Nullable
          public abstract Boolean firewallActive();
-         
+
          @Nullable
          public abstract List<FirewallRule> firewallrules();
 
          public abstract String dataCenterId();
+
          public abstract String serverId();
 
          @AutoValue.Builder
          public abstract static class Builder {
 
             public abstract Builder name(String name);
+
             public abstract Builder ips(List<String> ips);
+
             public abstract Builder dhcp(Boolean dhcp);
+
             public abstract Builder lan(int lan);
+
+            public abstract Builder nat(Boolean nat);
+
             public abstract Builder firewallActive(Boolean firewallActive);
+
             public abstract Builder firewallrules(List<FirewallRule> firewallrules);
+
             public abstract Builder dataCenterId(String dataCenterId);
+
             public abstract Builder serverId(String serverId);
-           
+
             abstract CreatePayload autoBuild();
 
             public CreatePayload build() {
@@ -158,21 +174,35 @@ public abstract class Nic extends Trackable {
 
          @Nullable
          public abstract Integer lan();
-         
+
+         @Nullable
+         public abstract Boolean nat();
+
          public abstract String dataCenterId();
+
          public abstract String serverId();
+
          public abstract String id();
 
          @AutoValue.Builder
          public abstract static class Builder {
+
             public abstract Builder name(String name);
+
             public abstract Builder ips(List<String> ips);
+
             public abstract Builder dhcp(Boolean dhcp);
+
             public abstract Builder lan(Integer lan);
+            
+            public abstract Builder nat(Boolean nat);
+
             public abstract Builder dataCenterId(String dataCenterId);
+
             public abstract Builder serverId(String serverId);
+
             public abstract Builder id(String id);
-           
+
             abstract UpdatePayload autoBuild();
 
             public UpdatePayload build() {
@@ -180,9 +210,7 @@ public abstract class Nic extends Trackable {
             }
          }
       }
-      
+
    }
-   
 
 }
-

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/61e5651b/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 e0109f0..4e23ab7 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
@@ -18,101 +18,103 @@ package org.apache.jclouds.profitbricks.rest.domain;
 
 import com.google.auto.value.AutoValue;
 import com.google.common.base.Enums;
+import static com.google.common.base.Preconditions.checkArgument;
+import java.util.Set;
 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 extends Trackable {
 
-    public abstract String id();
-    
-    @Nullable
-    public abstract String dataCenterId();
+   public abstract String id();
 
-    public abstract String type();
+   @Nullable
+   public abstract String dataCenterId();
 
-    public abstract String href();
+   public abstract String type();
 
-    @Nullable
-    public abstract Metadata metadata();
+   public abstract String href();
 
-    @Nullable
-    public abstract Properties properties();
+   @Nullable
+   public abstract Metadata metadata();
 
-    @SerializedNames({"id", "dataCenterId", "type", "href", "metadata", "properties"})
-    public static Volume create(String id, String dataCenterId, String type, String href, Metadata metadata, Properties properties) {
-        return new AutoValue_Volume(id, dataCenterId, type, href, metadata, properties);
-    }
+   @Nullable
+   public abstract Properties properties();
 
-    @AutoValue
-    public abstract static class Properties {
+   @SerializedNames({"id", "dataCenterId", "type", "href", "metadata", "properties"})
+   public static Volume create(String id, String dataCenterId, String type, String href, Metadata metadata, Properties properties) {
+      return new AutoValue_Volume(id, dataCenterId, type, href, metadata, properties);
+   }
 
-        public enum BusType {
+   @AutoValue
+   public abstract static class Properties {
 
-            IDE, SCSI, VIRTIO, UNRECOGNIZED;
+      public enum BusType {
 
-            public static BusType fromValue(String value) {
-                return Enums.getIfPresent(BusType.class, value).or(UNRECOGNIZED);
-            }
-        }
+         IDE, SCSI, VIRTIO, UNRECOGNIZED;
+
+         public static BusType fromValue(String value) {
+            return Enums.getIfPresent(BusType.class, value).or(UNRECOGNIZED);
+         }
+      }
 
-        @Nullable
-        public abstract String name();
+      @Nullable
+      public abstract String name();
 
-        @Nullable
-        public abstract VolumeType type();
+      @Nullable
+      public abstract VolumeType type();
 
-        public abstract float size();
+      public abstract float size();
 
-        @Nullable
-        public abstract String image();
+      @Nullable
+      public abstract AvailabilityZone availabilityZone();
 
-        @Nullable
-        public abstract String imagePassword();
-        
-        @Nullable
-        public abstract BusType bus();
+      @Nullable
+      public abstract String image();
 
-        @Nullable
-        public abstract LicenceType licenceType();
+      @Nullable
+      public abstract String imagePassword();
 
-        public abstract boolean cpuHotPlug();
+      @Nullable
+      public abstract BusType bus();
 
-        public abstract boolean cpuHotUnplug();
+      @Nullable
+      public abstract LicenceType licenceType();
 
-        public abstract boolean ramHotPlug();
+      public abstract boolean cpuHotPlug();
 
-        public abstract boolean ramHotUnplug();
+      public abstract boolean cpuHotUnplug();
 
-        public abstract boolean nicHotPlug();
+      public abstract boolean ramHotPlug();
 
-        public abstract boolean nicHotUnplug();
+      public abstract boolean ramHotUnplug();
 
-        public abstract boolean discVirtioHotPlug();
+      public abstract boolean nicHotPlug();
 
-        public abstract boolean discVirtioHotUnplug();
+      public abstract boolean nicHotUnplug();
 
-        public abstract boolean discScsiHotPlug();
+      public abstract boolean discVirtioHotPlug();
 
-        public abstract boolean discScsiHotUnplug();
+      public abstract boolean discVirtioHotUnplug();
 
-        @Nullable
-        public abstract Integer deviceNumber();
+      public abstract boolean discScsiHotPlug();
 
-        @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, 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) {
+      public abstract boolean discScsiHotUnplug();
 
-            return new AutoValue_Volume_Properties(name, type, size, image, imagePassword, bus, licenceType, cpuHotPlug, cpuHotUnplug, ramHotPlug, ramHotUnplug, nicHotPlug, nicHotUnplug, discVirtioHotPlug, discVirtioHotUnplug, discScsiHotPlug, discScsiHotUnplug, deviceNumber);
+      @Nullable
+      public abstract Integer deviceNumber();
 
-        }
-    }
+      @SerializedNames({"name", "type", "size", "availabilityZone", "image", "imagePassword", "bus", "licenceType", "cpuHotPlug", "cpuHotUnplug", "ramHotPlug", "ramHotUnplug", "nicHotPlug", "nicHotUnplug", "discVirtioHotPlug", "discVirtioHotUnplug", "discScsiHotPlug", "discScsiHotUnplug", "deviceNumber"})
+      public static Volume.Properties create(String name, VolumeType type, float size, AvailabilityZone availabilityZone, 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) {
+
+         return new AutoValue_Volume_Properties(name, type, size, availabilityZone, image, imagePassword, bus, licenceType, cpuHotPlug, cpuHotUnplug, ramHotPlug, ramHotUnplug, nicHotPlug, nicHotUnplug, discVirtioHotPlug, discVirtioHotUnplug, discScsiHotPlug, discScsiHotUnplug, deviceNumber);
+
+      }
+   }
 
-   
    public static final class Request {
 
       public static CreatePayload.Builder creatingBuilder() {
@@ -122,15 +124,15 @@ public abstract class Volume extends Trackable {
       public static UpdatePayload.Builder updatingBuilder() {
          return new AutoValue_Volume_Request_UpdatePayload.Builder();
       }
-      
+
       public static CreateSnapshotPayload.Builder createSnapshotBuilder() {
          return new AutoValue_Volume_Request_CreateSnapshotPayload.Builder();
       }
-      
+
       public static RestoreSnapshotPayload.Builder restoreSnapshotBuilder() {
          return new AutoValue_Volume_Request_RestoreSnapshotPayload.Builder();
       }
-      
+
       @AutoValue
       public abstract static class CreatePayload {
 
@@ -138,16 +140,19 @@ public abstract class Volume extends Trackable {
          public abstract String name();
 
          public abstract VolumeType type();
-         
+
          public abstract int size();
 
          @Nullable
          public abstract Set<String> sshKeys();
-         
+
          @Nullable
          public abstract String image();
 
          @Nullable
+         public abstract AvailabilityZone availabilityZone();
+
+         @Nullable
          public abstract String imagePassword();
 
          @Nullable
@@ -155,35 +160,46 @@ public abstract class Volume extends Trackable {
 
          @Nullable
          public abstract LicenceType licenceType();
-         
+
          public abstract String dataCenterId();
 
          @AutoValue.Builder
          public abstract static class Builder {
 
             public abstract Builder name(String name);
+
             public abstract Builder type(VolumeType type);
+
             public abstract Builder sshKeys(Set<String> list);
+
             public abstract Builder size(int size);
+
+            public abstract Builder availabilityZone(AvailabilityZone size);
+
             public abstract Builder image(String image);
+
             public abstract Builder imagePassword(String imagePassword);
+
             public abstract Builder bus(Properties.BusType bus);
+
             public abstract Builder licenceType(LicenceType licenceType);
+
             public abstract Builder dataCenterId(String dataCenterId);
 
             abstract CreatePayload autoBuild();
 
             public CreatePayload build() {
                CreatePayload payload = autoBuild();
-               
-               if (payload.imagePassword() != null)
+
+               if (payload.imagePassword() != null) {
                   checkArgument(Passwords.isValidPassword(payload.imagePassword()), "Password's format is not valid");
-               
+               }
+
                checkArgument(
-                  payload.image() != null || payload.licenceType() != null,
-                  "Either image or licenceType need to be present"
+                       payload.image() != null || payload.licenceType() != null,
+                       "Either image or licenceType need to be present"
                );
-               
+
                return payload;
             }
          }
@@ -201,17 +217,27 @@ public abstract class Volume extends Trackable {
 
          @Nullable
          public abstract Properties.BusType bus();
-         
+
+         @Nullable
+         public abstract AvailabilityZone availabilityZone();
+
          public abstract String dataCenterId();
+
          public abstract String id();
 
          @AutoValue.Builder
          public abstract static class Builder {
 
             public abstract Builder name(String name);
+
             public abstract Builder size(Integer size);
+
             public abstract Builder bus(Properties.BusType bus);
+
+            public abstract Builder availabilityZone(AvailabilityZone size);
+
             public abstract Builder dataCenterId(String dataCenterId);
+
             public abstract Builder id(String id);
 
             abstract UpdatePayload autoBuild();
@@ -221,7 +247,7 @@ public abstract class Volume extends Trackable {
             }
          }
       }
-      
+
       @AutoValue
       public abstract static class CreateSnapshotPayload {
 
@@ -230,16 +256,20 @@ public abstract class Volume extends Trackable {
 
          @Nullable
          public abstract String description();
-         
+
          public abstract String dataCenterId();
+
          public abstract String volumeId();
 
          @AutoValue.Builder
          public abstract static class Builder {
 
             public abstract Builder name(String name);
+
             public abstract Builder description(String description);
+
             public abstract Builder dataCenterId(String dataCenterId);
+
             public abstract Builder volumeId(String volumeId);
 
             abstract CreateSnapshotPayload autoBuild();
@@ -250,19 +280,23 @@ public abstract class Volume extends Trackable {
          }
 
       }
-      
+
       @AutoValue
       public abstract static class RestoreSnapshotPayload {
 
          public abstract String snapshotId();
+
          public abstract String dataCenterId();
+
          public abstract String volumeId();
 
          @AutoValue.Builder
          public abstract static class Builder {
 
             public abstract Builder snapshotId(String snapshotId);
+
             public abstract Builder dataCenterId(String dataCenterId);
+
             public abstract Builder volumeId(String volumeId);
 
             abstract RestoreSnapshotPayload autoBuild();
@@ -273,8 +307,7 @@ public abstract class Volume extends Trackable {
          }
 
       }
-      
+
    }
-   
-    
+
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/61e5651b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/DataCenterApi.java
----------------------------------------------------------------------
diff --git a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/DataCenterApi.java b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/DataCenterApi.java
index 34ce39f..fa1e67c 100644
--- a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/DataCenterApi.java
+++ b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/DataCenterApi.java
@@ -17,13 +17,13 @@
 package org.apache.jclouds.profitbricks.rest.features;
 
 import static com.google.common.base.Preconditions.checkNotNull;
-
+import com.google.inject.Inject;
+import com.google.inject.TypeLiteral;
 import java.io.Closeable;
 import java.net.URI;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-
 import javax.inject.Named;
 import javax.ws.rs.DELETE;
 import javax.ws.rs.GET;
@@ -31,7 +31,6 @@ import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
-
 import org.apache.jclouds.profitbricks.rest.domain.DataCenter;
 import org.apache.jclouds.profitbricks.rest.domain.options.DepthOptions;
 import org.apache.jclouds.profitbricks.rest.functions.ParseRequestStatusURI;
@@ -51,9 +50,6 @@ import org.jclouds.rest.annotations.ResponseParser;
 import org.jclouds.rest.annotations.SelectJson;
 import org.jclouds.rest.binders.BindToJsonPayload;
 
-import com.google.inject.Inject;
-import com.google.inject.TypeLiteral;
-
 @Path("/datacenters")
 @RequestFilters(BasicAuthentication.class)
 public interface DataCenterApi extends Closeable {
@@ -92,7 +88,7 @@ public interface DataCenterApi extends Closeable {
    @Named("datacenter:create")
    @POST
    @ResponseParser(DataCenterParser.class)
-   @Produces("application/vnd.profitbricks.resource+json")
+   @Produces("application/json")
    @MapBinder(DataCenterCreateMapBinder.class)
    DataCenter create(
       @PayloadParam("name") String name, 
@@ -104,7 +100,7 @@ public interface DataCenterApi extends Closeable {
    @PATCH
    @Path("/{id}")
    @ResponseParser(DataCenterParser.class)
-   @Produces("application/vnd.profitbricks.partial-properties+json")
+   @Produces("application/json")
    @MapBinder(BindToJsonPayload.class)
    DataCenter update(
       @PathParam("id") String id, 

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/61e5651b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/FirewallApi.java
----------------------------------------------------------------------
diff --git a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/FirewallApi.java b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/FirewallApi.java
index 82344cd..357fed0 100644
--- a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/FirewallApi.java
+++ b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/FirewallApi.java
@@ -94,7 +94,7 @@ public interface FirewallApi extends Closeable {
    @PATCH
    @MapBinder(UpdateFirewallRuleRequestBinder.class)
    @ResponseParser(FirewallApi.FirewallRuleParser.class)
-   @Produces("application/vnd.profitbricks.partial-properties+json")
+   @Produces("application/json")
    FirewallRule update(@PayloadParam("firewallRule") FirewallRule.Request.UpdatePayload payload);
    
    @Named("firewallRule:delete")

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/61e5651b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/IpBlockApi.java
----------------------------------------------------------------------
diff --git a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/IpBlockApi.java b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/IpBlockApi.java
index 5b0d351..c29c975 100644
--- a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/IpBlockApi.java
+++ b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/IpBlockApi.java
@@ -71,7 +71,7 @@ public interface IpBlockApi extends Closeable {
 
    @Named("IpBlock:create")
    @POST
-   @Produces("application/vnd.profitbricks.resource+json")
+   @Produces("application/json")
    @ResponseParser(IpBlockApi.IpBlockParser.class)
    IpBlock create(@BinderParam(BindToJsonPayload.class) IpBlock.Request.CreatePayload payload);
 

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/61e5651b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/LanApi.java
----------------------------------------------------------------------
diff --git a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/LanApi.java b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/LanApi.java
index 8900475..add95a9 100644
--- a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/LanApi.java
+++ b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/LanApi.java
@@ -95,7 +95,7 @@ public interface LanApi extends Closeable {
    @Path("/{lanId}")
    @MapBinder(UpdateLanRequestBinder.class)
    @ResponseParser(LanApi.LanParser.class)
-   @Produces("application/vnd.profitbricks.partial-properties+json")
+   @Produces("application/json")
    Lan update(@PayloadParam("lan") Lan.Request.UpdatePayload payload);
    
    @Named("lan:delete")

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/61e5651b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/NicApi.java
----------------------------------------------------------------------
diff --git a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/NicApi.java b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/NicApi.java
index 0fc46d8..e3cd7aa 100644
--- a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/NicApi.java
+++ b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/NicApi.java
@@ -95,7 +95,7 @@ public interface NicApi extends Closeable {
    @Path("/{nicId}")
    @MapBinder(UpdateNicRequestBinder.class)
    @ResponseParser(NicApi.NicParser.class)
-   @Produces("application/vnd.profitbricks.partial-properties+json")
+   @Produces("application/json")
    Nic update(@PayloadParam("nic") Nic.Request.UpdatePayload payload);
    
    @Named("nic:delete")

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/61e5651b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/ServerApi.java
----------------------------------------------------------------------
diff --git a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/ServerApi.java b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/ServerApi.java
index 3987e59..8a9ff15 100644
--- a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/ServerApi.java
+++ b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/ServerApi.java
@@ -99,7 +99,7 @@ public interface ServerApi extends Closeable {
    @Path("/{serverId}")
    @MapBinder(UpdateServerRequestBinder.class)
    @ResponseParser(ServerApi.ServerParser.class)
-   @Produces("application/vnd.profitbricks.partial-properties+json")
+   @Produces("application/json")
    Server updateServer(@PayloadParam("server") Server.Request.UpdatePayload payload);
 
    @Named("server:delete")

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/61e5651b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/SnapshotApi.java
----------------------------------------------------------------------
diff --git a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/SnapshotApi.java b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/SnapshotApi.java
index fd134f5..5151006 100644
--- a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/SnapshotApi.java
+++ b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/SnapshotApi.java
@@ -82,7 +82,7 @@ public interface SnapshotApi extends Closeable {
    @Path("/{snapshotId}")
    @MapBinder(UpdateSnapshotRequestBinder.class)
    @ResponseParser(SnapshotApi.SnapshotParser.class)
-   @Produces("application/vnd.profitbricks.partial-properties+json")
+   @Produces("application/json")
    Snapshot update(@PayloadParam("snapshot") Snapshot.Request.UpdatePayload payload);
    
    @Named("snapshot:delete")

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/61e5651b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/VolumeApi.java
----------------------------------------------------------------------
diff --git a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/VolumeApi.java b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/VolumeApi.java
index edb1d6a..c27455a 100644
--- a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/VolumeApi.java
+++ b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/VolumeApi.java
@@ -98,7 +98,7 @@ public interface VolumeApi extends Closeable {
    @Path("/{volumeId}")
    @MapBinder(UpdateVolumeRequestBinder.class)
    @ResponseParser(VolumeApi.VolumeParser.class)
-   @Produces("application/vnd.profitbricks.partial-properties+json")
+   @Produces("application/json")
    Volume updateVolume(@PayloadParam("volume") Volume.Request.UpdatePayload payload);
    
    @Named("volume:delete")

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/61e5651b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/DataCenterApiMockTest.java
----------------------------------------------------------------------
diff --git a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/DataCenterApiMockTest.java b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/DataCenterApiMockTest.java
index d5cf594..5a5777e 100644
--- a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/DataCenterApiMockTest.java
+++ b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/DataCenterApiMockTest.java
@@ -62,7 +62,7 @@ public class DataCenterApiMockTest extends BaseProfitBricksApiMockTest {
    public void testGetDataCenter() throws InterruptedException {
       MockResponse response = new MockResponse();
       response.setBody(stringFromResource("/datacenter/get.json"));
-      response.setHeader("Content-Type", "application/vnd.profitbricks.resource+json");
+      response.setHeader("Content-Type", "application/json");
 
       server.enqueue(response);
 

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/61e5651b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/FirewallApiLiveTest.java
----------------------------------------------------------------------
diff --git a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/FirewallApiLiveTest.java b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/FirewallApiLiveTest.java
index 1063145..d477a30 100644
--- a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/FirewallApiLiveTest.java
+++ b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/FirewallApiLiveTest.java
@@ -18,23 +18,22 @@ package org.apache.jclouds.profitbricks.rest.features;
 
 import com.google.common.base.Predicate;
 import com.google.common.collect.Iterables;
-
 import java.net.URI;
 import java.util.List;
 import org.apache.jclouds.profitbricks.rest.domain.DataCenter;
-import org.apache.jclouds.profitbricks.rest.domain.State;
 import org.apache.jclouds.profitbricks.rest.domain.FirewallRule;
 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.ids.ServerRef;
 import org.apache.jclouds.profitbricks.rest.internal.BaseProfitBricksLiveTest;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
 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;
 
 @Test(groups = "live", testName = "FirewallApiLiveTest")
 public class FirewallApiLiveTest extends BaseProfitBricksLiveTest {
@@ -122,7 +121,7 @@ public class FirewallApiLiveTest extends BaseProfitBricksLiveTest {
    }
    
    @Test(dependsOnMethods = "testCreateFirewallRule")
-   public void testUpdateFirewallRule() {
+   public void testUpdateFirewallRule() throws InterruptedException {
       assertDataCenterAvailable(dataCenter);
       
       FirewallRule updated = firewallApi().update(FirewallRule.Request.updatingBuilder()
@@ -134,7 +133,10 @@ public class FirewallApiLiveTest extends BaseProfitBricksLiveTest {
               .build());
 
       assertFirewallRuleAvailable(updated);
-      
+      assertRequestCompleted(testFirewallRule);
+      //thread sleep added becuase the API would not give back the updated name value unless you wait
+      //
+      Thread.sleep(3000);
       FirewallRule firewallRule = firewallApi().get(dataCenter.id(), testServer.id(), testNic.id(), testFirewallRule.id());
       
       assertEquals(firewallRule.properties().name(), "apache-firewall");

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/61e5651b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/FirewallApiMockTest.java
----------------------------------------------------------------------
diff --git a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/FirewallApiMockTest.java b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/FirewallApiMockTest.java
index 4f80679..ea63604 100644
--- a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/FirewallApiMockTest.java
+++ b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/FirewallApiMockTest.java
@@ -83,7 +83,7 @@ public class FirewallApiMockTest extends BaseProfitBricksApiMockTest {
    public void testGetFirewallRule() throws InterruptedException {
       MockResponse response = new MockResponse();
       response.setBody(stringFromResource("/firewall/get.json"));
-      response.setHeader("Content-Type", "application/vnd.profitbricks.resource+json");
+      response.setHeader("Content-Type", "application/json");
       
       server.enqueue(response);
       
@@ -99,7 +99,7 @@ public class FirewallApiMockTest extends BaseProfitBricksApiMockTest {
    public void testGetFirewallRuleWithDepth() throws InterruptedException {
       MockResponse response = new MockResponse();
       response.setBody(stringFromResource("/firewall/get.json"));
-      response.setHeader("Content-Type", "application/vnd.profitbricks.resource+json");
+      response.setHeader("Content-Type", "application/json");
       
       server.enqueue(response);
       

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/61e5651b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/ImageApiMockTest.java
----------------------------------------------------------------------
diff --git a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/ImageApiMockTest.java b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/ImageApiMockTest.java
index a668dc7..1034425 100644
--- a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/ImageApiMockTest.java
+++ b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/ImageApiMockTest.java
@@ -74,7 +74,7 @@ public class ImageApiMockTest extends BaseProfitBricksApiMockTest {
    public void testGetImage() throws InterruptedException {
       MockResponse response = new MockResponse();
       response.setBody(stringFromResource("/image/get.json"));
-      response.setHeader("Content-Type", "application/vnd.profitbricks.resource+json");
+      response.setHeader("Content-Type", "application/json");
       
       server.enqueue(response);
       
@@ -91,7 +91,7 @@ public class ImageApiMockTest extends BaseProfitBricksApiMockTest {
    public void testGetImageWithDepth() throws InterruptedException {
       MockResponse response = new MockResponse();
       response.setBody(stringFromResource("/image/get-depth-5.json"));
-      response.setHeader("Content-Type", "application/vnd.profitbricks.resource+json");
+      response.setHeader("Content-Type", "application/json");
       
       server.enqueue(response);
       

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/61e5651b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/IpBlockApiMockTest.java
----------------------------------------------------------------------
diff --git a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/IpBlockApiMockTest.java b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/IpBlockApiMockTest.java
index db68b3d..9970bd5 100644
--- a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/IpBlockApiMockTest.java
+++ b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/IpBlockApiMockTest.java
@@ -87,7 +87,7 @@ public class IpBlockApiMockTest extends BaseProfitBricksApiMockTest {
    public void testGetIpBlock() throws InterruptedException {
       MockResponse response = new MockResponse();
       response.setBody(stringFromResource("/ipblock/get.json"));
-      response.setHeader("Content-Type", "application/vnd.profitbricks.resource+json");
+      response.setHeader("Content-Type", "application/json");
 
       server.enqueue(response);
 

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/61e5651b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/LanApiMockTest.java
----------------------------------------------------------------------
diff --git a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/LanApiMockTest.java b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/LanApiMockTest.java
index 9c11d4f..9c69697 100644
--- a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/LanApiMockTest.java
+++ b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/LanApiMockTest.java
@@ -84,7 +84,7 @@ public class LanApiMockTest extends BaseProfitBricksApiMockTest {
    public void testGetLan() throws InterruptedException {
       MockResponse response = new MockResponse();
       response.setBody(stringFromResource("/lan/get.json"));
-      response.setHeader("Content-Type", "application/vnd.profitbricks.resource+json");
+      response.setHeader("Content-Type", "application/json");
       
       server.enqueue(response);
       
@@ -112,7 +112,7 @@ public class LanApiMockTest extends BaseProfitBricksApiMockTest {
    public void testGetLanWithDepth() throws InterruptedException {
       MockResponse response = new MockResponse();
       response.setBody(stringFromResource("/lan/get.json"));
-      response.setHeader("Content-Type", "application/vnd.profitbricks.resource+json");
+      response.setHeader("Content-Type", "application/json");
       
       server.enqueue(response);
       

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/61e5651b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/NicApiMockTest.java
----------------------------------------------------------------------
diff --git a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/NicApiMockTest.java b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/NicApiMockTest.java
index 1827f67..80ae74c 100644
--- a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/NicApiMockTest.java
+++ b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/NicApiMockTest.java
@@ -58,7 +58,7 @@ public class NicApiMockTest extends BaseProfitBricksApiMockTest {
    public void testGetNic() throws InterruptedException {
       MockResponse response = new MockResponse();
       response.setBody(stringFromResource("/nic/get.json"));
-      response.setHeader("Content-Type", "application/vnd.profitbricks.resource+json");
+      response.setHeader("Content-Type", "application/json");
       
       server.enqueue(response);
       

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/61e5651b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/ServerApiLiveTest.java
----------------------------------------------------------------------
diff --git a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/ServerApiLiveTest.java b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/ServerApiLiveTest.java
index 2527547..e4b3075 100644
--- a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/ServerApiLiveTest.java
+++ b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/ServerApiLiveTest.java
@@ -17,15 +17,17 @@
 package org.apache.jclouds.profitbricks.rest.features;
 
 import com.google.common.base.Predicate;
-
 import java.net.URI;
 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.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.Server;
 import org.apache.jclouds.profitbricks.rest.domain.State;
 import org.apache.jclouds.profitbricks.rest.domain.Volume;
+import org.apache.jclouds.profitbricks.rest.domain.options.DepthOptions;
 import org.apache.jclouds.profitbricks.rest.ids.ServerRef;
 import org.apache.jclouds.profitbricks.rest.ids.VolumeRef;
 import org.apache.jclouds.profitbricks.rest.internal.BaseProfitBricksLiveTest;
@@ -39,28 +41,28 @@ import org.testng.annotations.Test;
 
 @Test(groups = "live", testName = "ServerApiLiveTest")
 public class ServerApiLiveTest extends BaseProfitBricksLiveTest {
-   
+
    private DataCenter dataCenter;
    private Server testServer;
    private Image attachedCdrom;
    private Volume attachedVolume;
-   
+
    @BeforeClass
    public void setupTest() {
       dataCenter = createDataCenter();
    }
-   
+
    @AfterClass(alwaysRun = true)
    public void teardownTest() {
       if (dataCenter != null) {
          deleteDataCenter(dataCenter.id());
       }
    }
-   
+
    @Test
    public void testCreateServer() {
       assertNotNull(dataCenter);
-      
+
       testServer = serverApi().createServer(
               Server.Request.creatingBuilder()
               .dataCenterId(dataCenter.id())
@@ -69,30 +71,30 @@ public class ServerApiLiveTest extends BaseProfitBricksLiveTest {
               .cores(1)
               .ram(1024)
               .build());
-      
+
       assertRequestCompleted(testServer);
       assertNotNull(testServer);
       assertEquals(testServer.properties().name(), "jclouds-node");
       assertNodeRunning(ServerRef.create(dataCenter.id(), testServer.id()));
    }
-   
+
    @Test(dependsOnMethods = "testCreateServer")
    public void testGetServer() {
       Server server = serverApi().getServer(dataCenter.id(), testServer.id());
-      
+
       assertNotNull(server);
       assertEquals(server.id(), testServer.id());
    }
-   
+
    @Test(dependsOnMethods = "testCreateServer")
    public void testList() {
       List<Server> servers = serverApi().getList(dataCenter.id());
-      
+
       assertNotNull(servers);
       assertFalse(servers.isEmpty());
       assertEquals(servers.size(), 1);
    }
-   
+
    @Test(dependsOnMethods = "testGetServer")
    public void testUpdateServer() {
       assertDataCenterAvailable(dataCenter);
@@ -105,58 +107,58 @@ public class ServerApiLiveTest extends BaseProfitBricksLiveTest {
               .ram(1024 * 2)
               .cores(2)
               .build());
-      
+
       assertRequestCompleted(updated);
       assertNodeAvailable(ServerRef.create(dataCenter.id(), testServer.id()));
       assertDataCenterAvailable(dataCenter);
       assertNodeRunning(ServerRef.create(dataCenter.id(), testServer.id()));
-      
+
       Server server = serverApi().getServer(dataCenter.id(), testServer.id());
-      
+
       assertEquals(server.properties().name(), "apache-node");
    }
-   
+
    @Test(dependsOnMethods = "testUpdateServer")
    public void testStopServer() {
       URI uri = serverApi().stopServer(testServer.dataCenterId(), testServer.id());
       assertRequestCompleted(uri);
       assertNodeSuspended(ServerRef.create(dataCenter.id(), testServer.id()));
-      
+
       Server server = serverApi().getServer(testServer.dataCenterId(), testServer.id());
       assertEquals(server.properties().vmState(), Server.Status.SHUTOFF);
    }
-   
+
    @Test(dependsOnMethods = "testStopServer")
    public void testStartServer() {
       URI uri = serverApi().startServer(testServer.dataCenterId(), testServer.id());
       assertRequestCompleted(uri);
       assertNodeRunning(ServerRef.create(dataCenter.id(), testServer.id()));
-      
+
       Server server = serverApi().getServer(testServer.dataCenterId(), testServer.id());
       assertEquals(server.properties().vmState(), Server.Status.RUNNING);
    }
-   
+
    @Test(dependsOnMethods = "testStartServer")
    public void testRebootServer() {
       URI uri = serverApi().rebootServer(testServer.dataCenterId(), testServer.id());
       assertRequestCompleted(uri);
       assertNodeRunning(ServerRef.create(dataCenter.id(), testServer.id()));
-      
+
       Server server = serverApi().getServer(testServer.dataCenterId(), testServer.id());
       assertEquals(server.properties().vmState(), Server.Status.RUNNING);
    }
-   
+
    @Test(dependsOnMethods = "testRebootServer")
    public void testListVolumes() {
       List<Volume> volumes = serverApi().listAttachedVolumes(testServer.dataCenterId(), testServer.id());
       assertTrue(volumes.isEmpty());
    }
-   
+
    @Test(dependsOnMethods = "testListVolumes")
    public void testAttachVolume() {
       Volume volume = createVolume(dataCenter);
       assertVolumeAvailable(VolumeRef.create(dataCenter.id(), volume.id()));
-      
+
       attachedVolume = serverApi().attachVolume(
               Server.Request.attachVolumeBuilder()
               .dataCenterId(testServer.dataCenterId())
@@ -164,90 +166,105 @@ public class ServerApiLiveTest extends BaseProfitBricksLiveTest {
               .volumeId(volume.id())
               .build()
       );
-      
+
       assertRequestCompleted(attachedVolume);
       assertVolumeAttached(testServer, volume.id());
-      
+
       List<Volume> volumes = serverApi().listAttachedVolumes(testServer.dataCenterId(), testServer.id());
       assertEquals(volumes.size(), 1);
    }
-   
+
    @Test(dependsOnMethods = "testAttachVolume")
    public void testGetVolume() {
       Volume volume = serverApi().getVolume(testServer.dataCenterId(), testServer.id(), attachedVolume.id());
       assertEquals(volume.id(), attachedVolume.id());
    }
-   
+
    @Test(dependsOnMethods = "testGetVolume")
    public void testDetachVolume() {
       URI uri = serverApi().detachVolume(testServer.dataCenterId(), testServer.id(), attachedVolume.id());
       assertRequestCompleted(uri);
       assertVolumeDetached(testServer, attachedVolume.id());
    }
-   
+
    @Test(dependsOnMethods = "testDetachVolume")
    public void testListCdroms() {
       List<Image> images = serverApi().listAttachedCdroms(testServer.dataCenterId(), testServer.id());
       assertTrue(images.isEmpty());
    }
-   
+
    @Test(dependsOnMethods = "testListCdroms")
    public void testAttachCdrom() {
+
+      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.CDROM
+                 && image.properties().location() == US_LAS
+                 && image.properties().licenceType() == LicenceType.LINUX
+                 && (testImage == null || testImage.properties().size() > image.properties().size())) {
+            testImage = image;
+         }
+      }
       attachedCdrom = serverApi().attachCdrom(
               Server.Request.attachCdromBuilder()
               .dataCenterId(testServer.dataCenterId())
               .serverId(testServer.id())
-              .imageId("7cb4b3a3-50c3-11e5-b789-52540066fee9")
+              .imageId(testImage.id())
               .build()
       );
       assertRequestCompleted(attachedCdrom);
-      assertEquals(attachedCdrom.properties().name(), "ubuntu-14.04.3-server-amd64.iso");
+      assertEquals(attachedCdrom.properties().name(), testImage.properties().name());
       assertCdromAvailable(testServer, attachedCdrom.id());
-      
-      List<Image> images = serverApi().listAttachedCdroms(testServer.dataCenterId(), testServer.id());
-      assertEquals(images.size(), 1);
+
+      List<Image> attachedimages = serverApi().listAttachedCdroms(testServer.dataCenterId(), testServer.id());
+      assertEquals(attachedimages.size(), 1);
    }
-   
+
    @Test(dependsOnMethods = "testAttachCdrom")
    public void testRetrieveAttachedCdrom() {
       Image cdrom = serverApi().getCdrom(testServer.dataCenterId(), testServer.id(), attachedCdrom.id());
       assertEquals(cdrom.id(), attachedCdrom.id());
    }
-   
+
    @Test(dependsOnMethods = "testRetrieveAttachedCdrom")
    public void testDetachCdrom() {
       URI uri = serverApi().detachCdrom(testServer.dataCenterId(), testServer.id(), attachedCdrom.id());
       assertRequestCompleted(uri);
       assertCdromRemoved(testServer, attachedCdrom.id());
    }
-   
+
    @Test(dependsOnMethods = "testDetachCdrom")
    public void testDeleteServer() {
       URI uri = serverApi().deleteServer(testServer.dataCenterId(), testServer.id());
       assertRequestCompleted(uri);
       assertNodeRemoved(ServerRef.create(dataCenter.id(), testServer.id()));
    }
-   
+
    private ServerApi serverApi() {
       return api.serverApi();
    }
-   
+
    private void assertCdromAvailable(Server server, String cdRomId) {
       assertPredicate(new Predicate<String>() {
          @Override
          public boolean apply(String args) {
             String[] params = args.split(",");
             Image cdrom = serverApi().getCdrom(params[0], params[1], params[2]);
-            
+
             if (cdrom == null || cdrom.metadata() == null) {
                return false;
             }
-            
+
             return cdrom.metadata().state() == State.AVAILABLE;
          }
       }, complexId(server.dataCenterId(), server.id(), cdRomId));
    }
-   
+
    private void assertCdromRemoved(Server server, String cdRomId) {
       assertPredicate(new Predicate<String>() {
          @Override
@@ -257,23 +274,23 @@ public class ServerApiLiveTest extends BaseProfitBricksLiveTest {
          }
       }, complexId(server.dataCenterId(), server.id(), cdRomId));
    }
-   
+
    private void assertVolumeAttached(Server server, String volumeId) {
       assertPredicate(new Predicate<String>() {
          @Override
          public boolean apply(String args) {
             String[] params = args.split(",");
             Volume volume = serverApi().getVolume(params[0], params[1], params[2]);
-            
+
             if (volume == null || volume.metadata() == null) {
                return false;
             }
-            
+
             return volume.metadata().state() == State.AVAILABLE;
          }
       }, complexId(server.dataCenterId(), server.id(), volumeId));
    }
-   
+
    private void assertVolumeDetached(Server server, String volumeId) {
       assertPredicate(new Predicate<String>() {
          @Override
@@ -283,5 +300,5 @@ public class ServerApiLiveTest extends BaseProfitBricksLiveTest {
          }
       }, complexId(server.dataCenterId(), server.id(), volumeId));
    }
-   
+
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/61e5651b/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 1b11617..d904340 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
@@ -76,7 +76,7 @@ public class ServerApiMockTest extends BaseProfitBricksApiMockTest {
    public void testGetServer() throws InterruptedException {
       MockResponse response = new MockResponse();
       response.setBody(stringFromResource("/server/get.json"));
-      response.setHeader("Content-Type", "application/vnd.profitbricks.resource+json");
+      response.setHeader("Content-Type", "application/json");
       
       server.enqueue(response);
       
@@ -93,7 +93,7 @@ public class ServerApiMockTest extends BaseProfitBricksApiMockTest {
    public void testGetServerWithDepth() throws InterruptedException {
       MockResponse response = new MockResponse();
       response.setBody(stringFromResource("/server/get-depth-5.json"));
-      response.setHeader("Content-Type", "application/vnd.profitbricks.resource+json");
+      response.setHeader("Content-Type", "application/json");
       
       server.enqueue(response);
       

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/61e5651b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/SnapshotApiMockTest.java
----------------------------------------------------------------------
diff --git a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/SnapshotApiMockTest.java b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/SnapshotApiMockTest.java
index 034b438..c6cd99b 100644
--- a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/SnapshotApiMockTest.java
+++ b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/SnapshotApiMockTest.java
@@ -83,7 +83,7 @@ public class SnapshotApiMockTest extends BaseProfitBricksApiMockTest {
    public void testGetSnapshot() throws InterruptedException {
       MockResponse response = new MockResponse();
       response.setBody(stringFromResource("/snapshot/get.json"));
-      response.setHeader("Content-Type", "application/vnd.profitbricks.resource+json");
+      response.setHeader("Content-Type", "application/json");
 
       server.enqueue(response);
 
@@ -100,7 +100,7 @@ public class SnapshotApiMockTest extends BaseProfitBricksApiMockTest {
    public void testGetSnapshotWithDepth() throws InterruptedException {
       MockResponse response = new MockResponse();
       response.setBody(stringFromResource("/snapshot/get-depth-5.json"));
-      response.setHeader("Content-Type", "application/vnd.profitbricks.resource+json");
+      response.setHeader("Content-Type", "application/json");
 
       server.enqueue(response);
 

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/61e5651b/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 52d40de..36c22cf 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
@@ -61,7 +61,7 @@ public class VolumeApiMockTest extends BaseProfitBricksApiMockTest {
    public void testGetVolume() throws InterruptedException {
       MockResponse response = new MockResponse();
       response.setBody(stringFromResource("/volume/get.json"));
-      response.setHeader("Content-Type", "application/vnd.profitbricks.resource+json");
+      response.setHeader("Content-Type", "application/json");
       
       server.enqueue(response);
       

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/61e5651b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/internal/BaseProfitBricksApiMockTest.java
----------------------------------------------------------------------
diff --git a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/internal/BaseProfitBricksApiMockTest.java b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/internal/BaseProfitBricksApiMockTest.java
index bc36ef4..1258828 100644
--- a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/internal/BaseProfitBricksApiMockTest.java
+++ b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/internal/BaseProfitBricksApiMockTest.java
@@ -113,10 +113,10 @@ public class BaseProfitBricksApiMockTest {
 	   throws InterruptedException {
       RecordedRequest request = assertSent(server, method, path);
       
-      String expectedContentType = "application/vnd.profitbricks.resource+json";
+      String expectedContentType = "application/json";
       
       if (request.getMethod().equals("PATCH"))
-         expectedContentType = "application/vnd.profitbricks.partial-properties+json";
+         expectedContentType = "application/json";
       
       assertEquals(request.getHeader("Content-Type"), expectedContentType);
       assertEquals(parser.parse(new String(request.getBody(), Charsets.UTF_8)), parser.parse(json));

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/61e5651b/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 2766d48..3cacf09 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
@@ -16,22 +16,25 @@
  */
 package org.apache.jclouds.profitbricks.rest.internal;
 
-import static org.apache.jclouds.profitbricks.rest.config.ProfitBricksComputeProperties.POLL_PREDICATE_DATACENTER;
-import static org.apache.jclouds.profitbricks.rest.domain.Location.US_LAS;
-import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_RUNNING;
-import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_SUSPENDED;
-import static org.testng.Assert.assertTrue;
-
+import com.google.common.base.Joiner;
+import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableSet;
+import com.google.inject.Injector;
+import com.google.inject.Key;
+import com.google.inject.Module;
+import com.google.inject.TypeLiteral;
+import com.google.inject.name.Names;
 import java.net.URI;
 import java.util.Properties;
 import java.util.concurrent.TimeUnit;
-
 import org.apache.jclouds.profitbricks.rest.ProfitBricksApi;
 import org.apache.jclouds.profitbricks.rest.compute.config.ProfitBricksComputeServiceContextModule.ComputeConstants;
+import static org.apache.jclouds.profitbricks.rest.config.ProfitBricksComputeProperties.POLL_PREDICATE_DATACENTER;
 import org.apache.jclouds.profitbricks.rest.config.ProfitBricksRateLimitModule;
 import org.apache.jclouds.profitbricks.rest.domain.DataCenter;
 import org.apache.jclouds.profitbricks.rest.domain.LicenceType;
 import org.apache.jclouds.profitbricks.rest.domain.Location;
+import static org.apache.jclouds.profitbricks.rest.domain.Location.US_LAS;
 import org.apache.jclouds.profitbricks.rest.domain.Nic;
 import org.apache.jclouds.profitbricks.rest.domain.Server;
 import org.apache.jclouds.profitbricks.rest.domain.State;
@@ -42,16 +45,10 @@ import org.apache.jclouds.profitbricks.rest.ids.ServerRef;
 import org.apache.jclouds.profitbricks.rest.ids.VolumeRef;
 import org.apache.jclouds.profitbricks.rest.util.Trackables;
 import org.jclouds.apis.BaseApiLiveTest;
+import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_RUNNING;
+import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_SUSPENDED;
 import org.jclouds.util.Predicates2;
-
-import com.google.common.base.Joiner;
-import com.google.common.base.Predicate;
-import com.google.common.collect.ImmutableSet;
-import com.google.inject.Injector;
-import com.google.inject.Key;
-import com.google.inject.Module;
-import com.google.inject.TypeLiteral;
-import com.google.inject.name.Names;
+import static org.testng.Assert.assertTrue;
 
 public class BaseProfitBricksLiveTest extends BaseApiLiveTest<ProfitBricksApi> {