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 2015/06/30 15:01:31 UTC
[1/4] jclouds-labs git commit: JCLOUDS-702: JClouds ProfitBricks
provider - ComputeServiceAdapter
Repository: jclouds-labs
Updated Branches:
refs/heads/1.9.x dcd1dc157 -> d07fcb17d
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/server/ServerInfoResponseHandlerTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/server/ServerInfoResponseHandlerTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/server/ServerInfoResponseHandlerTest.java
index 88124e7..5e629b9 100644
--- a/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/server/ServerInfoResponseHandlerTest.java
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/server/ServerInfoResponseHandlerTest.java
@@ -19,10 +19,10 @@ package org.jclouds.profitbricks.http.parser.server;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
-import org.jclouds.date.DateCodec;
-import org.jclouds.date.DateCodecFactory;
+import org.jclouds.date.DateService;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.profitbricks.domain.AvailabilityZone;
+import org.jclouds.profitbricks.domain.DataCenter;
import org.jclouds.profitbricks.domain.Firewall;
import org.jclouds.profitbricks.domain.Nic;
import org.jclouds.profitbricks.domain.OsType;
@@ -43,8 +43,8 @@ public class ServerInfoResponseHandlerTest extends BaseResponseHandlerTest<Serve
return factory.create(injector.getInstance(ServerInfoResponseHandler.class));
}
- protected DateCodecFactory createDateParser() {
- return injector.getInstance(DateCodecFactory.class);
+ protected DateService createDateParser() {
+ return injector.getInstance(DateService.class);
}
@Test
@@ -54,18 +54,22 @@ public class ServerInfoResponseHandlerTest extends BaseResponseHandlerTest<Serve
Server actual = parser.parse(payloadFromResource("/server/server.xml"));
assertNotNull(actual, "Parsed content returned null");
- DateCodec dateParser = createDateParser().iso8601();
+ DateService dateParser = createDateParser();
Server expected = Server.builder()
.id("qwertyui-qwer-qwer-qwer-qwertyyuiiop")
+ .dataCenter(DataCenter.builder()
+ .id("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee")
+ .version(10)
+ .build())
.name("facebook-node")
.cores(4)
.ram(4096)
.hasInternetAccess(true)
.state(ProvisioningState.AVAILABLE)
.status(Server.Status.RUNNING)
- .creationTime(dateParser.toDate("2014-12-04T07:09:23.138Z"))
- .lastModificationTime(dateParser.toDate("2014-12-12T03:08:35.629Z"))
+ .creationTime(dateParser.iso8601DateOrSecondsDateParse("2014-12-04T07:09:23.138Z"))
+ .lastModificationTime(dateParser.iso8601DateOrSecondsDateParse("2014-12-12T03:08:35.629Z"))
.osType(OsType.LINUX)
.availabilityZone(AvailabilityZone.AUTO)
.isCpuHotPlug(true)
@@ -74,7 +78,7 @@ public class ServerInfoResponseHandlerTest extends BaseResponseHandlerTest<Serve
.isNicHotUnPlug(true)
.isDiscVirtioHotPlug(true)
.isDiscVirtioHotUnPlug(true)
- .activate(true)
+ .loadBalanced(true)
.balancedNicId("qswdefrg-qaws-qaws-defe-rgrgdsvcxbrh")
.storages(ImmutableList.<Storage>of(
Storage.builder()
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/server/ServerListResponseHandlerTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/server/ServerListResponseHandlerTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/server/ServerListResponseHandlerTest.java
index 1442ba9..ea5d46d 100644
--- a/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/server/ServerListResponseHandlerTest.java
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/server/ServerListResponseHandlerTest.java
@@ -20,8 +20,6 @@ import com.google.common.collect.ImmutableList;
import java.util.List;
-import org.jclouds.date.DateCodec;
-import org.jclouds.date.DateCodecFactory;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.profitbricks.domain.AvailabilityZone;
import org.jclouds.profitbricks.domain.OsType;
@@ -32,6 +30,8 @@ import org.jclouds.profitbricks.http.parser.BaseResponseHandlerTest;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
+import org.jclouds.date.DateService;
+import org.jclouds.profitbricks.domain.DataCenter;
import org.jclouds.profitbricks.domain.Firewall;
import org.jclouds.profitbricks.domain.Nic;
import org.jclouds.profitbricks.domain.Storage;
@@ -45,8 +45,8 @@ public class ServerListResponseHandlerTest extends BaseResponseHandlerTest<List<
return factory.create(injector.getInstance(ServerListResponseHandler.class));
}
- protected DateCodecFactory createDateParser() {
- return injector.getInstance(DateCodecFactory.class);
+ protected DateService createDateParser() {
+ return injector.getInstance(DateService.class);
}
@Test
@@ -56,10 +56,15 @@ public class ServerListResponseHandlerTest extends BaseResponseHandlerTest<List<
List<Server> actual = parser.parse(payloadFromResource("/server/servers.xml"));
assertNotNull(actual, "Parsed content returned null");
- DateCodec dateParser = createDateParser().iso8601();
+ DateService dateParser = createDateParser();
List<Server> expected = ImmutableList.<Server>of(
Server.builder()
+ .dataCenter(DataCenter.builder()
+ .id("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee")
+ .version(10)
+ .build()
+ )
.id("qwertyui-qwer-qwer-qwer-qwertyyuiiop")
.name("facebook-node")
.cores(4)
@@ -67,8 +72,8 @@ public class ServerListResponseHandlerTest extends BaseResponseHandlerTest<List<
.hasInternetAccess(true)
.state(ProvisioningState.AVAILABLE)
.status(Server.Status.RUNNING)
- .creationTime(dateParser.toDate("2014-12-04T07:09:23.138Z"))
- .lastModificationTime(dateParser.toDate("2014-12-12T03:08:35.629Z"))
+ .creationTime(dateParser.iso8601DateOrSecondsDateParse("2014-12-04T07:09:23.138Z"))
+ .lastModificationTime(dateParser.iso8601DateOrSecondsDateParse("2014-12-12T03:08:35.629Z"))
.osType(OsType.LINUX)
.availabilityZone(AvailabilityZone.AUTO)
.isCpuHotPlug(true)
@@ -77,7 +82,7 @@ public class ServerListResponseHandlerTest extends BaseResponseHandlerTest<List<
.isNicHotUnPlug(true)
.isDiscVirtioHotPlug(true)
.isDiscVirtioHotUnPlug(true)
- .activate(true)
+ .loadBalanced(true)
.balancedNicId("qswdefrg-qaws-qaws-defe-rgrgdsvcxbrh")
.storages(ImmutableList.<Storage>of(
Storage.builder()
@@ -113,6 +118,11 @@ public class ServerListResponseHandlerTest extends BaseResponseHandlerTest<List<
)
.build(),
Server.builder()
+ .dataCenter(DataCenter.builder()
+ .id("qqqqqqqq-wwww-rrrr-tttt-yyyyyyyyyyyy")
+ .version(238)
+ .build()
+ )
.id("asdfghjk-asdf-asdf-asdf-asdfghjklkjl")
.name("google-node")
.cores(1)
@@ -120,8 +130,8 @@ public class ServerListResponseHandlerTest extends BaseResponseHandlerTest<List<
.hasInternetAccess(false)
.state(ProvisioningState.AVAILABLE)
.status(Server.Status.RUNNING)
- .creationTime(dateParser.toDate("2014-11-12T07:01:00.441Z"))
- .lastModificationTime(dateParser.toDate("2014-11-12T07:01:00.441Z"))
+ .creationTime(dateParser.iso8601DateOrSecondsDateParse("2014-11-12T07:01:00.441Z"))
+ .lastModificationTime(dateParser.iso8601DateOrSecondsDateParse("2014-11-12T07:01:00.441Z"))
.osType(OsType.LINUX)
.availabilityZone(AvailabilityZone.AUTO)
.isCpuHotPlug(true)
@@ -130,7 +140,7 @@ public class ServerListResponseHandlerTest extends BaseResponseHandlerTest<List<
.isNicHotUnPlug(true)
.isDiscVirtioHotPlug(true)
.isDiscVirtioHotUnPlug(true)
- .activate(true)
+ .loadBalanced(true)
.balancedNicId("qswdefrg-qaws-qaws-defe-rgrgdsvcxbrh")
.storages(ImmutableList.<Storage>of(
Storage.builder()
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/snapshot/SnapshotListResponseHandlerTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/snapshot/SnapshotListResponseHandlerTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/snapshot/SnapshotListResponseHandlerTest.java
index 38dfa1e..f9f93d0 100644
--- a/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/snapshot/SnapshotListResponseHandlerTest.java
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/snapshot/SnapshotListResponseHandlerTest.java
@@ -17,17 +17,20 @@
package org.jclouds.profitbricks.http.parser.snapshot;
import com.google.common.collect.Lists;
+
import java.util.List;
-import org.jclouds.date.DateCodec;
-import org.jclouds.date.DateCodecFactory;
+
import org.jclouds.http.functions.ParseSax;
import org.jclouds.profitbricks.domain.Location;
import org.jclouds.profitbricks.domain.OsType;
import org.jclouds.profitbricks.domain.ProvisioningState;
import org.jclouds.profitbricks.domain.Snapshot;
import org.jclouds.profitbricks.http.parser.BaseResponseHandlerTest;
+
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
+
+import org.jclouds.date.DateService;
import org.testng.annotations.Test;
@Test(groups = "unit", testName = "SnapshotListResponseHandlerTest")
@@ -38,8 +41,8 @@ public class SnapshotListResponseHandlerTest extends BaseResponseHandlerTest<Lis
return factory.create(injector.getInstance(SnapshotListResponseHandler.class));
}
- protected DateCodecFactory createDateParser() {
- return injector.getInstance(DateCodecFactory.class);
+ protected DateService createDateParser() {
+ return injector.getInstance(DateService.class);
}
@Test
@@ -49,51 +52,51 @@ public class SnapshotListResponseHandlerTest extends BaseResponseHandlerTest<Lis
List<Snapshot> actual = parser.parse(payloadFromResource("/snapshot/snapshots.xml"));
assertNotNull(actual);
- DateCodec dateParser = createDateParser().iso8601();
+ DateService dateParser = createDateParser();
List<Snapshot> expected = Lists.newArrayList();
expected.add(Snapshot.builder()
- .id("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee")
- .description("description")
- .size(1024)
- .name("snapshot01")
- .state(ProvisioningState.AVAILABLE)
- .bootable(true)
- .osType(OsType.LINUX)
- .cpuHotPlug(true)
- .cpuHotUnPlug(true)
- .discVirtioHotPlug(true)
- .discVirtioHotUnPlug(true)
- .ramHotPlug(true)
- .ramHotUnPlug(true)
- .nicHotPlug(true)
- .nicHotUnPlug(true)
- .location(Location.US_LAS)
- .creationTime(dateParser.toDate("2015-01-26T07:09:23.138Z"))
- .lastModificationTime(dateParser.toDate("2015-01-26T07:09:23.138Z"))
- .build());
+ .id("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee")
+ .description("description")
+ .size(1024)
+ .name("snapshot01")
+ .state(ProvisioningState.AVAILABLE)
+ .isBootable(true)
+ .osType(OsType.LINUX)
+ .isCpuHotPlug(true)
+ .isCpuHotUnPlug(true)
+ .isDiscVirtioHotPlug(true)
+ .isDiscVirtioHotUnPlug(true)
+ .isRamHotPlug(true)
+ .isRamHotUnPlug(true)
+ .isNicHotPlug(true)
+ .isNicHotUnPlug(true)
+ .location(Location.US_LAS)
+ .creationTime(dateParser.iso8601DateOrSecondsDateParse("2015-01-26T07:09:23.138Z"))
+ .lastModificationTime(dateParser.iso8601DateOrSecondsDateParse("2015-01-26T07:09:23.138Z"))
+ .build());
expected.add(Snapshot.builder()
- .id("qqqqqqqq-wwww-rrrr-tttt-yyyyyyyyyyyy")
- .description("description")
- .size(1024)
- .name("snapshot02")
- .state(ProvisioningState.AVAILABLE)
- .bootable(true)
- .osType(OsType.LINUX)
- .cpuHotPlug(true)
- .cpuHotUnPlug(true)
- .discVirtioHotPlug(true)
- .discVirtioHotUnPlug(true)
- .ramHotPlug(true)
- .ramHotUnPlug(true)
- .nicHotPlug(true)
- .nicHotUnPlug(true)
- .location(Location.US_LAS)
- .creationTime(dateParser.toDate("2015-01-26T07:09:23.138Z"))
- .lastModificationTime(dateParser.toDate("2015-01-26T07:09:23.138Z"))
- .build());
+ .id("qqqqqqqq-wwww-rrrr-tttt-yyyyyyyyyyyy")
+ .description("description")
+ .size(1024)
+ .name("snapshot02")
+ .state(ProvisioningState.AVAILABLE)
+ .isBootable(true)
+ .osType(OsType.LINUX)
+ .isCpuHotPlug(true)
+ .isCpuHotUnPlug(true)
+ .isDiscVirtioHotPlug(true)
+ .isDiscVirtioHotUnPlug(true)
+ .isRamHotPlug(true)
+ .isRamHotUnPlug(true)
+ .isNicHotPlug(true)
+ .isNicHotUnPlug(true)
+ .location(Location.US_LAS)
+ .creationTime(dateParser.iso8601DateOrSecondsDateParse("2015-01-26T07:09:23.138Z"))
+ .lastModificationTime(dateParser.iso8601DateOrSecondsDateParse("2015-01-26T07:09:23.138Z"))
+ .build());
assertEquals(actual, expected);
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/snapshot/SnapshotResponseHandlerTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/snapshot/SnapshotResponseHandlerTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/snapshot/SnapshotResponseHandlerTest.java
index 9928e92..ced1814 100644
--- a/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/snapshot/SnapshotResponseHandlerTest.java
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/snapshot/SnapshotResponseHandlerTest.java
@@ -16,16 +16,17 @@
*/
package org.jclouds.profitbricks.http.parser.snapshot;
-import org.jclouds.date.DateCodec;
-import org.jclouds.date.DateCodecFactory;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.profitbricks.domain.Location;
import org.jclouds.profitbricks.domain.OsType;
import org.jclouds.profitbricks.domain.ProvisioningState;
import org.jclouds.profitbricks.domain.Snapshot;
import org.jclouds.profitbricks.http.parser.BaseResponseHandlerTest;
+
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
+
+import org.jclouds.date.DateService;
import org.testng.annotations.Test;
@Test(groups = "unit", testName = "ServerResponseHandlerTest")
@@ -36,8 +37,8 @@ public class SnapshotResponseHandlerTest extends BaseResponseHandlerTest<Snapsho
return factory.create(injector.getInstance(SnapshotResponseHandler.class));
}
- protected DateCodecFactory createDateParser() {
- return injector.getInstance(DateCodecFactory.class);
+ protected DateService createDateParser() {
+ return injector.getInstance(DateService.class);
}
@Test
@@ -47,28 +48,28 @@ public class SnapshotResponseHandlerTest extends BaseResponseHandlerTest<Snapsho
Snapshot actual = parser.parse(payloadFromResource("/snapshot/snapshot.xml"));
assertNotNull(actual, "Parsed content returned null");
- DateCodec dateParser = createDateParser().iso8601();
+ DateService dateParser = createDateParser();
Snapshot expected = Snapshot.builder()
- .id("qswdefrg-qaws-qaws-defe-rgrgdsvcxbrh")
- .description("description")
- .size(1024)
- .name("snapshot01")
- .state(ProvisioningState.AVAILABLE)
- .bootable(true)
- .osType(OsType.LINUX)
- .cpuHotPlug(true)
- .cpuHotUnPlug(true)
- .discVirtioHotPlug(true)
- .discVirtioHotUnPlug(true)
- .ramHotPlug(true)
- .ramHotUnPlug(true)
- .nicHotPlug(true)
- .nicHotUnPlug(true)
- .location(Location.US_LAS)
- .creationTime(dateParser.toDate("2015-01-26T07:09:23.138Z"))
- .lastModificationTime(dateParser.toDate("2015-01-26T07:09:23.138Z"))
- .build();
+ .id("qswdefrg-qaws-qaws-defe-rgrgdsvcxbrh")
+ .description("description")
+ .size(1024)
+ .name("snapshot01")
+ .state(ProvisioningState.AVAILABLE)
+ .isBootable(true)
+ .osType(OsType.LINUX)
+ .isCpuHotPlug(true)
+ .isCpuHotUnPlug(true)
+ .isDiscVirtioHotPlug(true)
+ .isDiscVirtioHotUnPlug(true)
+ .isRamHotPlug(true)
+ .isRamHotUnPlug(true)
+ .isNicHotPlug(true)
+ .isNicHotUnPlug(true)
+ .location(Location.US_LAS)
+ .creationTime(dateParser.iso8601DateOrSecondsDateParse("2015-01-26T07:09:23.138Z"))
+ .lastModificationTime(dateParser.iso8601DateOrSecondsDateParse("2015-01-26T07:09:23.138Z"))
+ .build();
assertEquals(actual, expected);
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/storage/StorageInfoResponseHandlerTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/storage/StorageInfoResponseHandlerTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/storage/StorageInfoResponseHandlerTest.java
index 338b02b..411865f 100644
--- a/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/storage/StorageInfoResponseHandlerTest.java
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/storage/StorageInfoResponseHandlerTest.java
@@ -19,8 +19,7 @@ package org.jclouds.profitbricks.http.parser.storage;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
-import org.jclouds.date.DateCodec;
-import org.jclouds.date.DateCodecFactory;
+import org.jclouds.date.DateService;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.profitbricks.domain.ProvisioningState;
import org.jclouds.profitbricks.domain.Storage;
@@ -37,8 +36,8 @@ public class StorageInfoResponseHandlerTest extends BaseResponseHandlerTest<Stor
return factory.create(injector.getInstance(StorageInfoResponseHandler.class));
}
- protected DateCodecFactory createDateParser() {
- return injector.getInstance(DateCodecFactory.class);
+ protected DateService createDateParser() {
+ return injector.getInstance(DateService.class);
}
@Test
@@ -48,7 +47,7 @@ public class StorageInfoResponseHandlerTest extends BaseResponseHandlerTest<Stor
Storage actual = parser.parse(payloadFromResource("/storage/storage.xml"));
assertNotNull(actual, "Parsed content returned null");
- DateCodec dateParser = createDateParser().iso8601();
+ DateService dateParser = createDateParser();
Storage expected = Storage.builder()
.id("qswdefrg-qaws-qaws-defe-rgrgdsvcxbrh")
@@ -56,8 +55,8 @@ public class StorageInfoResponseHandlerTest extends BaseResponseHandlerTest<Stor
.name("hdd-1")
.state(ProvisioningState.AVAILABLE)
.serverIds(ImmutableList.<String>of("qwertyui-qwer-qwer-qwer-qwertyyuiiop"))
- .creationTime(dateParser.toDate("2014-12-04T07:09:23.138Z"))
- .lastModificationTime(dateParser.toDate("2014-12-12T03:14:48.316Z"))
+ .creationTime(dateParser.iso8601DateOrSecondsDateParse("2014-12-04T07:09:23.138Z"))
+ .lastModificationTime(dateParser.iso8601DateOrSecondsDateParse("2014-12-12T03:14:48.316Z"))
.build();
assertEquals(actual, expected);
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/storage/StorageListResponseHandlerTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/storage/StorageListResponseHandlerTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/storage/StorageListResponseHandlerTest.java
index 62e43fc..9ac696d 100644
--- a/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/storage/StorageListResponseHandlerTest.java
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/storage/StorageListResponseHandlerTest.java
@@ -23,8 +23,7 @@ import com.google.common.collect.ImmutableList;
import java.util.List;
-import org.jclouds.date.DateCodec;
-import org.jclouds.date.DateCodecFactory;
+import org.jclouds.date.DateService;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.profitbricks.domain.ProvisioningState;
import org.jclouds.profitbricks.domain.Storage;
@@ -40,8 +39,8 @@ public class StorageListResponseHandlerTest extends BaseResponseHandlerTest<List
return factory.create(injector.getInstance(StorageListResponseHandler.class));
}
- protected DateCodecFactory createDateParser() {
- return injector.getInstance(DateCodecFactory.class);
+ protected DateService createDateParser() {
+ return injector.getInstance(DateService.class);
}
@Test
@@ -51,7 +50,7 @@ public class StorageListResponseHandlerTest extends BaseResponseHandlerTest<List
List<Storage> actual = parser.parse(payloadFromResource("/storage/storages.xml"));
assertNotNull(actual, "Parsed content returned null");
- DateCodec dateParser = createDateParser().iso8601();
+ DateService dateParser = createDateParser();
List<Storage> expected = ImmutableList.<Storage>of(
Storage.builder()
@@ -60,8 +59,8 @@ public class StorageListResponseHandlerTest extends BaseResponseHandlerTest<List
.name("hdd-1")
.state(ProvisioningState.AVAILABLE)
.serverIds(ImmutableList.<String>of("qwertyui-qwer-qwer-qwer-qwertyyuiiop"))
- .creationTime(dateParser.toDate("2014-12-04T07:09:23.138Z"))
- .lastModificationTime(dateParser.toDate("2014-12-12T03:14:48.316Z"))
+ .creationTime(dateParser.iso8601DateOrSecondsDateParse("2014-12-04T07:09:23.138Z"))
+ .lastModificationTime(dateParser.iso8601DateOrSecondsDateParse("2014-12-12T03:14:48.316Z"))
.build(),
Storage.builder()
.id("asfasfle-f23n-cu89-klfr-njkdsvwllkfa")
@@ -69,8 +68,8 @@ public class StorageListResponseHandlerTest extends BaseResponseHandlerTest<List
.name("hdd-2")
.state(ProvisioningState.INPROCESS)
.serverIds(ImmutableList.<String>of("asdfghjk-asdf-asdf-asdf-asdfghjklkjl"))
- .creationTime(dateParser.toDate("2014-11-04T07:09:23.138Z"))
- .lastModificationTime(dateParser.toDate("2014-11-12T03:14:48.316Z"))
+ .creationTime(dateParser.iso8601DateOrSecondsDateParse("2014-11-04T07:09:23.138Z"))
+ .lastModificationTime(dateParser.iso8601DateOrSecondsDateParse("2014-11-12T03:14:48.316Z"))
.build()
);
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/util/PasswordsTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/util/PasswordsTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/util/PasswordsTest.java
new file mode 100644
index 0000000..fc7be1f
--- /dev/null
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/util/PasswordsTest.java
@@ -0,0 +1,53 @@
+/*
+ * 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.jclouds.profitbricks.util;
+
+import com.google.common.collect.ImmutableList;
+import java.util.List;
+import static org.jclouds.profitbricks.util.Passwords.isValidPassword;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+import org.testng.annotations.Test;
+
+@Test(groups = "unit", testName = "PasswordsTest")
+public class PasswordsTest {
+
+ private final List<String> validPasswords = ImmutableList.of(
+ "fKVasTnNm", "84625894", "QQQQQQQQ", "qqqqqqqq", "asdfghjk"
+ );
+ private final List<String> invalidPasswords = ImmutableList.of(
+ "", "apachejclouds", "s0merand0mpassw0rd"
+ );
+
+ @Test
+ public void testPasswordValidation() {
+ for (String pwd : validPasswords)
+ assertTrue(isValidPassword(pwd), "Should've been valid: " + pwd);
+
+ for (String pwd : invalidPasswords)
+ assertFalse(isValidPassword(pwd), "Should've been invalid: " + pwd);
+ }
+
+ @Test
+ public void testGeneratorGeneratesValidPassword() {
+ final int times = 50;
+ for (int i = 0; i < times; i++) {
+ String pwd = Passwords.generate();
+ assertTrue(isValidPassword(pwd), "Failed with: " + pwd);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/resources/datacenter/datacenter-deleted.xml
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/resources/datacenter/datacenter-deleted.xml b/profitbricks/src/test/resources/datacenter/datacenter-deleted.xml
index c09858e..531ed53 100644
--- a/profitbricks/src/test/resources/datacenter/datacenter-deleted.xml
+++ b/profitbricks/src/test/resources/datacenter/datacenter-deleted.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
- <S:Body>
- <ns2:deleteDataCenterResponse xmlns:ns2="http://ws.api.profitbricks.com/">
- <return>
- <requestId>11411363</requestId>
- </return>
- </ns2:deleteDataCenterResponse>
- </S:Body>
+ <S:Body>
+ <ns2:deleteDataCenterResponse xmlns:ns2="http://ws.api.profitbricks.com/">
+ <return>
+ <requestId>11411363</requestId>
+ </return>
+ </ns2:deleteDataCenterResponse>
+ </S:Body>
</S:Envelope>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/resources/datacenter/datacenter-not-found.xml
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/resources/datacenter/datacenter-not-found.xml b/profitbricks/src/test/resources/datacenter/datacenter-not-found.xml
index 486706d..e4a9701 100644
--- a/profitbricks/src/test/resources/datacenter/datacenter-not-found.xml
+++ b/profitbricks/src/test/resources/datacenter/datacenter-not-found.xml
@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
- <S:Body>
- <S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope">
- <faultcode>S:Server</faultcode>
- <faultstring>The requested resource could not be found. Please refer to Request Id : 11122416. [VDC-6-404] The requested data center does not exist or already deleted by the users. ResourceId random-non-existing-id</faultstring>
- <detail>
- <ns2:ProfitbricksServiceFault xmlns:ns2="http://ws.api.profitbricks.com/">
- <faultCode>RESOURCE_NOT_FOUND</faultCode>
- <httpCode>404</httpCode>
- <message>The requested resource could not be found. Please refer to Request Id : 11122416. [VDC-6-404] The requested data center does not exist or already deleted by the users. ResourceId random-non-existing-id</message>
- <requestId>11122416</requestId>
- </ns2:ProfitbricksServiceFault>
- </detail>
- </S:Fault>
- </S:Body>
+ <S:Body>
+ <S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope">
+ <faultcode>S:Server</faultcode>
+ <faultstring>The requested resource could not be found. Please refer to Request Id : 11122416. [VDC-6-404] The requested data center does not exist or already deleted by the users. ResourceId random-non-existing-id</faultstring>
+ <detail>
+ <ns2:ProfitbricksServiceFault xmlns:ns2="http://ws.api.profitbricks.com/">
+ <faultCode>RESOURCE_NOT_FOUND</faultCode>
+ <httpCode>404</httpCode>
+ <message>The requested resource could not be found. Please refer to Request Id : 11122416. [VDC-6-404] The requested data center does not exist or already deleted by the users. ResourceId random-non-existing-id</message>
+ <requestId>11122416</requestId>
+ </ns2:ProfitbricksServiceFault>
+ </detail>
+ </S:Fault>
+ </S:Body>
</S:Envelope>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/resources/datacenter/datacenter-state-inprocess.xml
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/resources/datacenter/datacenter-state-inprocess.xml b/profitbricks/src/test/resources/datacenter/datacenter-state-inprocess.xml
index 77d41e3..722c653 100644
--- a/profitbricks/src/test/resources/datacenter/datacenter-state-inprocess.xml
+++ b/profitbricks/src/test/resources/datacenter/datacenter-state-inprocess.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
- <S:Body>
- <ns2:getDataCenterStateResponse xmlns:ns2="http://ws.api.profitbricks.com/">
- <return>INPROCESS</return>
- </ns2:getDataCenterStateResponse>
- </S:Body>
+ <S:Body>
+ <ns2:getDataCenterStateResponse xmlns:ns2="http://ws.api.profitbricks.com/">
+ <return>INPROCESS</return>
+ </ns2:getDataCenterStateResponse>
+ </S:Body>
</S:Envelope>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/resources/datacenter/datacenter-state.xml
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/resources/datacenter/datacenter-state.xml b/profitbricks/src/test/resources/datacenter/datacenter-state.xml
index 8bd56e2..3327c82 100644
--- a/profitbricks/src/test/resources/datacenter/datacenter-state.xml
+++ b/profitbricks/src/test/resources/datacenter/datacenter-state.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
- <S:Body>
- <ns2:getDataCenterStateResponse xmlns:ns2="http://ws.api.profitbricks.com/">
- <return>AVAILABLE</return>
- </ns2:getDataCenterStateResponse>
- </S:Body>
+ <S:Body>
+ <ns2:getDataCenterStateResponse xmlns:ns2="http://ws.api.profitbricks.com/">
+ <return>AVAILABLE</return>
+ </ns2:getDataCenterStateResponse>
+ </S:Body>
</S:Envelope>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/resources/drives/drives-add.xml
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/resources/drives/drives-add.xml b/profitbricks/src/test/resources/drives/drives-add.xml
index 752f8f3..52a04f5 100644
--- a/profitbricks/src/test/resources/drives/drives-add.xml
+++ b/profitbricks/src/test/resources/drives/drives-add.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
- <S:Body>
- <ns2:addRomDriveToServerResponse xmlns:ns2="http://ws.api.profitbricks.com/">
- <return>
- <requestId>request-id</requestId>
- <dataCenterId>datacenter-id</dataCenterId>
- <dataCenterVersion>datacenter-version</dataCenterVersion>
- </return>
- </ns2:addRomDriveToServerResponse>
- </S:Body>
+ <S:Body>
+ <ns2:addRomDriveToServerResponse xmlns:ns2="http://ws.api.profitbricks.com/">
+ <return>
+ <requestId>request-id</requestId>
+ <dataCenterId>datacenter-id</dataCenterId>
+ <dataCenterVersion>datacenter-version</dataCenterVersion>
+ </return>
+ </ns2:addRomDriveToServerResponse>
+ </S:Body>
</S:Envelope>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/resources/drives/drives-remove.xml
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/resources/drives/drives-remove.xml b/profitbricks/src/test/resources/drives/drives-remove.xml
index ccfd400..699b359 100644
--- a/profitbricks/src/test/resources/drives/drives-remove.xml
+++ b/profitbricks/src/test/resources/drives/drives-remove.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
- <S:Body>
- <ns2:removeRomDriveFromServerResponse xmlns:ns2="http://ws.api.profitbricks.com/">
- <return>
- <requestId>request-id</requestId>
- <dataCenterId>datacenter-id</dataCenterId>
- <dataCenterVersion>datacenter-version</dataCenterVersion>
- </return>
- </ns2:removeRomDriveFromServerResponse>
- </S:Body>
+ <S:Body>
+ <ns2:removeRomDriveFromServerResponse xmlns:ns2="http://ws.api.profitbricks.com/">
+ <return>
+ <requestId>request-id</requestId>
+ <dataCenterId>datacenter-id</dataCenterId>
+ <dataCenterVersion>datacenter-version</dataCenterVersion>
+ </return>
+ </ns2:removeRomDriveFromServerResponse>
+ </S:Body>
</S:Envelope>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/resources/firewall/firewall-activate.xml
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/resources/firewall/firewall-activate.xml b/profitbricks/src/test/resources/firewall/firewall-activate.xml
index 2150c6b..16e32b9 100644
--- a/profitbricks/src/test/resources/firewall/firewall-activate.xml
+++ b/profitbricks/src/test/resources/firewall/firewall-activate.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
- <S:Body>
- <ns2:activateFirewallsResponse xmlns:ns2="http://ws.api.profitbricks.com/">
- <return>
- <requestId>request-id</requestId>
- <dataCenterId>datacenter-id</dataCenterId>
- <dataCenterVersion>datacenter-version</dataCenterVersion>
- </return>
- </ns2:activateFirewallsResponse>
- </S:Body>
+ <S:Body>
+ <ns2:activateFirewallsResponse xmlns:ns2="http://ws.api.profitbricks.com/">
+ <return>
+ <requestId>request-id</requestId>
+ <dataCenterId>datacenter-id</dataCenterId>
+ <dataCenterVersion>datacenter-version</dataCenterVersion>
+ </return>
+ </ns2:activateFirewallsResponse>
+ </S:Body>
</S:Envelope>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/resources/firewall/firewall-addtonic.xml
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/resources/firewall/firewall-addtonic.xml b/profitbricks/src/test/resources/firewall/firewall-addtonic.xml
index 1267040..740c042 100644
--- a/profitbricks/src/test/resources/firewall/firewall-addtonic.xml
+++ b/profitbricks/src/test/resources/firewall/firewall-addtonic.xml
@@ -1,23 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
- <S:Body>
- <ns2:addFirewallRulesToNicResponse xmlns:ns2="http://ws.api.profitbricks.com/">
- <return>
- <active>active</active>
- <firewallId>firewall-id</firewallId>
- <firewallRules>
- <firewallRuleId>firewall-rule-id</firewallRuleId>
- <name>name</name>
- <portRangeEnd>45678</portRangeEnd>
- <portRangeStart>12345</portRangeStart>
- <protocol>TCP</protocol>
- <sourceIp>192.168.0.1</sourceIp>
- <sourceMac>aa:bb:cc:dd:ee:ff</sourceMac>
- <targetIp>192.168.0.2</targetIp>
- </firewallRules>
- <nicId>nic-id</nicId>
- <provisioningState>AVAILABLE</provisioningState>
- </return>
- </ns2:addFirewallRulesToNicResponse>
- </S:Body>
+ <S:Body>
+ <ns2:addFirewallRulesToNicResponse xmlns:ns2="http://ws.api.profitbricks.com/">
+ <return>
+ <active>active</active>
+ <firewallId>firewall-id</firewallId>
+ <firewallRules>
+ <firewallRuleId>firewall-rule-id</firewallRuleId>
+ <name>name</name>
+ <portRangeEnd>45678</portRangeEnd>
+ <portRangeStart>12345</portRangeStart>
+ <protocol>TCP</protocol>
+ <sourceIp>192.168.0.1</sourceIp>
+ <sourceMac>aa:bb:cc:dd:ee:ff</sourceMac>
+ <targetIp>192.168.0.2</targetIp>
+ </firewallRules>
+ <nicId>nic-id</nicId>
+ <provisioningState>AVAILABLE</provisioningState>
+ </return>
+ </ns2:addFirewallRulesToNicResponse>
+ </S:Body>
</S:Envelope>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/resources/firewall/firewall-deactivate.xml
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/resources/firewall/firewall-deactivate.xml b/profitbricks/src/test/resources/firewall/firewall-deactivate.xml
index a0bca25..0adaabd 100644
--- a/profitbricks/src/test/resources/firewall/firewall-deactivate.xml
+++ b/profitbricks/src/test/resources/firewall/firewall-deactivate.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
- <S:Body>
- <ns2:deactivateFirewallsResponse xmlns:ns2="http://ws.api.profitbricks.com/">
- <return>
- <requestId>request-id1111</requestId>
- <dataCenterId>datacenter-id</dataCenterId>
- <dataCenterVersion>datacenter-version</dataCenterVersion>
- </return>
- </ns2:deactivateFirewallsResponse>
- </S:Body>
+ <S:Body>
+ <ns2:deactivateFirewallsResponse xmlns:ns2="http://ws.api.profitbricks.com/">
+ <return>
+ <requestId>request-id1111</requestId>
+ <dataCenterId>datacenter-id</dataCenterId>
+ <dataCenterVersion>datacenter-version</dataCenterVersion>
+ </return>
+ </ns2:deactivateFirewallsResponse>
+ </S:Body>
</S:Envelope>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/resources/firewall/firewall-delete.xml
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/resources/firewall/firewall-delete.xml b/profitbricks/src/test/resources/firewall/firewall-delete.xml
index 2c7364f..26371a9 100644
--- a/profitbricks/src/test/resources/firewall/firewall-delete.xml
+++ b/profitbricks/src/test/resources/firewall/firewall-delete.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
- <S:Body>
- <ns2:deleteFirewallsResponse xmlns:ns2="http://ws.api.profitbricks.com/">
- <return>
- <requestId>request-id</requestId>
- <dataCenterId>datacenter-id</dataCenterId>
- <dataCenterVersion>datacenter-version</dataCenterVersion>
- </return>
- </ns2:deleteFirewallsResponse>
- </S:Body>
+ <S:Body>
+ <ns2:deleteFirewallsResponse xmlns:ns2="http://ws.api.profitbricks.com/">
+ <return>
+ <requestId>request-id</requestId>
+ <dataCenterId>datacenter-id</dataCenterId>
+ <dataCenterVersion>datacenter-version</dataCenterVersion>
+ </return>
+ </ns2:deleteFirewallsResponse>
+ </S:Body>
</S:Envelope>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/resources/firewall/firewall-remove.xml
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/resources/firewall/firewall-remove.xml b/profitbricks/src/test/resources/firewall/firewall-remove.xml
index 793bdd0..6301e6a 100644
--- a/profitbricks/src/test/resources/firewall/firewall-remove.xml
+++ b/profitbricks/src/test/resources/firewall/firewall-remove.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
- <S:Body>
- <ns2:removeFirewallRulesResponse xmlns:ns2="http://ws.api.profitbricks.com/">
- <return>
- <requestId>request-id</requestId>
- <dataCenterId>datacenter-id</dataCenterId>
- <dataCenterVersion>datacenter-version</dataCenterVersion>
- </return>
- </ns2:removeFirewallRulesResponse>
- </S:Body>
+ <S:Body>
+ <ns2:removeFirewallRulesResponse xmlns:ns2="http://ws.api.profitbricks.com/">
+ <return>
+ <requestId>request-id</requestId>
+ <dataCenterId>datacenter-id</dataCenterId>
+ <dataCenterVersion>datacenter-version</dataCenterVersion>
+ </return>
+ </ns2:removeFirewallRulesResponse>
+ </S:Body>
</S:Envelope>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/resources/firewall/firewall.xml
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/resources/firewall/firewall.xml b/profitbricks/src/test/resources/firewall/firewall.xml
index 3275a70..839502c 100644
--- a/profitbricks/src/test/resources/firewall/firewall.xml
+++ b/profitbricks/src/test/resources/firewall/firewall.xml
@@ -1,23 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
- <S:Body>
- <ns2:getFirewallResponse xmlns:ns2="http://ws.api.profitbricks.com/">
- <return>
- <active>true</active>
- <firewallId>firewall-id</firewallId>
- <firewallRules>
- <firewallRuleId>firewall-rule-id</firewallRuleId>
- <name>name</name>
- <portRangeEnd>45678</portRangeEnd>
- <portRangeStart>12345</portRangeStart>
- <protocol>TCP</protocol>
- <sourceIp>192.168.0.1</sourceIp>
- <sourceMac>aa:bb:cc:dd:ee:ff</sourceMac>
- <targetIp>192.168.0.2</targetIp>
- </firewallRules>
- <nicId>nic-id</nicId>
- <provisioningState>AVAILABLE</provisioningState>
- </return>
- </ns2:getFirewallResponse>
- </S:Body>
+ <S:Body>
+ <ns2:getFirewallResponse xmlns:ns2="http://ws.api.profitbricks.com/">
+ <return>
+ <active>true</active>
+ <firewallId>firewall-id</firewallId>
+ <firewallRules>
+ <firewallRuleId>firewall-rule-id</firewallRuleId>
+ <name>name</name>
+ <portRangeEnd>45678</portRangeEnd>
+ <portRangeStart>12345</portRangeStart>
+ <protocol>TCP</protocol>
+ <sourceIp>192.168.0.1</sourceIp>
+ <sourceMac>aa:bb:cc:dd:ee:ff</sourceMac>
+ <targetIp>192.168.0.2</targetIp>
+ </firewallRules>
+ <nicId>nic-id</nicId>
+ <provisioningState>AVAILABLE</provisioningState>
+ </return>
+ </ns2:getFirewallResponse>
+ </S:Body>
</S:Envelope>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/resources/ipblock/ipblock-addtonic.xml
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/resources/ipblock/ipblock-addtonic.xml b/profitbricks/src/test/resources/ipblock/ipblock-addtonic.xml
index a9c1974..8496660 100644
--- a/profitbricks/src/test/resources/ipblock/ipblock-addtonic.xml
+++ b/profitbricks/src/test/resources/ipblock/ipblock-addtonic.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
- <S:Body>
- <ns2:addPublicIpToNicResponse xmlns:ns2="http://ws.api.profitbricks.com/">
- <return>
- <requestId>request-id</requestId>
- <dataCenterId>datacenter-id</dataCenterId>
- <dataCenterVersion>datacenter-version</dataCenterVersion>
- </return>
- </ns2:addPublicIpToNicResponse>
- </S:Body>
+ <S:Body>
+ <ns2:addPublicIpToNicResponse xmlns:ns2="http://ws.api.profitbricks.com/">
+ <return>
+ <requestId>request-id</requestId>
+ <dataCenterId>datacenter-id</dataCenterId>
+ <dataCenterVersion>datacenter-version</dataCenterVersion>
+ </return>
+ </ns2:addPublicIpToNicResponse>
+ </S:Body>
</S:Envelope>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/resources/ipblock/ipblock-release.xml
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/resources/ipblock/ipblock-release.xml b/profitbricks/src/test/resources/ipblock/ipblock-release.xml
index a9f22bf..d10e675 100644
--- a/profitbricks/src/test/resources/ipblock/ipblock-release.xml
+++ b/profitbricks/src/test/resources/ipblock/ipblock-release.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
- <S:Body>
- <ns2:releasePublicIpBlockResponse xmlns:ns2="http://ws.api.profitbricks.com/">
- <return>
- <requestId>request-id</requestId>
- </return>
- </ns2:releasePublicIpBlockResponse>
- </S:Body>
+ <S:Body>
+ <ns2:releasePublicIpBlockResponse xmlns:ns2="http://ws.api.profitbricks.com/">
+ <return>
+ <requestId>request-id</requestId>
+ </return>
+ </ns2:releasePublicIpBlockResponse>
+ </S:Body>
</S:Envelope>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/resources/ipblock/ipblock-removefromnic.xml
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/resources/ipblock/ipblock-removefromnic.xml b/profitbricks/src/test/resources/ipblock/ipblock-removefromnic.xml
index a9c1974..8496660 100644
--- a/profitbricks/src/test/resources/ipblock/ipblock-removefromnic.xml
+++ b/profitbricks/src/test/resources/ipblock/ipblock-removefromnic.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
- <S:Body>
- <ns2:addPublicIpToNicResponse xmlns:ns2="http://ws.api.profitbricks.com/">
- <return>
- <requestId>request-id</requestId>
- <dataCenterId>datacenter-id</dataCenterId>
- <dataCenterVersion>datacenter-version</dataCenterVersion>
- </return>
- </ns2:addPublicIpToNicResponse>
- </S:Body>
+ <S:Body>
+ <ns2:addPublicIpToNicResponse xmlns:ns2="http://ws.api.profitbricks.com/">
+ <return>
+ <requestId>request-id</requestId>
+ <dataCenterId>datacenter-id</dataCenterId>
+ <dataCenterVersion>datacenter-version</dataCenterVersion>
+ </return>
+ </ns2:addPublicIpToNicResponse>
+ </S:Body>
</S:Envelope>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/resources/ipblock/ipblock-reserve.xml
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/resources/ipblock/ipblock-reserve.xml b/profitbricks/src/test/resources/ipblock/ipblock-reserve.xml
index 863e9ff..8586aaf 100644
--- a/profitbricks/src/test/resources/ipblock/ipblock-reserve.xml
+++ b/profitbricks/src/test/resources/ipblock/ipblock-reserve.xml
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
- <S:Body>
- <ns2:reservePublicIpBlockResponse xmlns:ns2="http://ws.api.profitbricks.com/">
- <return>
- <requestId>request-id</requestId>
- <blockId>block-id</blockId>
- <location>us/las</location>
- <ips>ip</ips>
- </return>
- </ns2:reservePublicIpBlockResponse>
- </S:Body>
+ <S:Body>
+ <ns2:reservePublicIpBlockResponse xmlns:ns2="http://ws.api.profitbricks.com/">
+ <return>
+ <requestId>request-id</requestId>
+ <blockId>block-id</blockId>
+ <location>us/las</location>
+ <ips>ip</ips>
+ </return>
+ </ns2:reservePublicIpBlockResponse>
+ </S:Body>
</S:Envelope>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/resources/ipblock/ipblock.xml
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/resources/ipblock/ipblock.xml b/profitbricks/src/test/resources/ipblock/ipblock.xml
index 2dd54f2..339fdfb 100644
--- a/profitbricks/src/test/resources/ipblock/ipblock.xml
+++ b/profitbricks/src/test/resources/ipblock/ipblock.xml
@@ -1,18 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
- <S:Body>
- <ns2:getAllPublicIpBlocksResponse xmlns:ns2="http://ws.api.profitbricks.com/">
- <return>
- <blockId>qwertyui-qwer-qwer-qwer-qwertyyuiiop</blockId>
- <location>us/las</location>
- <publicIps>
- <ip>ip</ip>
- <nicId>nic-id</nicId>
- </publicIps>
- <publicIps>
- <ip>ip</ip>
- </publicIps>
- </return>
- </ns2:getAllPublicIpBlocksResponse>
- </S:Body>
+ <S:Body>
+ <ns2:getAllPublicIpBlocksResponse xmlns:ns2="http://ws.api.profitbricks.com/">
+ <return>
+ <blockId>qwertyui-qwer-qwer-qwer-qwertyyuiiop</blockId>
+ <location>us/las</location>
+ <publicIps>
+ <ip>ip</ip>
+ <nicId>nic-id</nicId>
+ </publicIps>
+ <publicIps>
+ <ip>ip</ip>
+ </publicIps>
+ </return>
+ </ns2:getAllPublicIpBlocksResponse>
+ </S:Body>
</S:Envelope>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/resources/loadbalancer/loadbalancer-create.xml
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/resources/loadbalancer/loadbalancer-create.xml b/profitbricks/src/test/resources/loadbalancer/loadbalancer-create.xml
index 14ad678..33eb41b 100644
--- a/profitbricks/src/test/resources/loadbalancer/loadbalancer-create.xml
+++ b/profitbricks/src/test/resources/loadbalancer/loadbalancer-create.xml
@@ -1,6 +1,6 @@
<soapenv:Envelope
- xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'
- xmlns:ws='http://ws.api.profitbricks.com/'>
+ xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'
+ xmlns:ws='http://ws.api.profitbricks.com/'>
<soapenv:Header />
<soapenv:Body>
<ws:createLoadBalancer>
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/resources/loadbalancer/loadbalancer-delete.xml
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/resources/loadbalancer/loadbalancer-delete.xml b/profitbricks/src/test/resources/loadbalancer/loadbalancer-delete.xml
index b699be6..8396174 100644
--- a/profitbricks/src/test/resources/loadbalancer/loadbalancer-delete.xml
+++ b/profitbricks/src/test/resources/loadbalancer/loadbalancer-delete.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
- <S:Body>
- <ns2:deleteLoadBalancerResponse xmlns:ns2="http://ws.api.profitbricks.com/">
- <return>
- <requestId>request-id</requestId>
- <dataCenterId>datacenter-id</dataCenterId>
- <dataCenterVersion>datacenter-version</dataCenterVersion>
- </return>
- </ns2:deleteLoadBalancerResponse>
- </S:Body>
+ <S:Body>
+ <ns2:deleteLoadBalancerResponse xmlns:ns2="http://ws.api.profitbricks.com/">
+ <return>
+ <requestId>request-id</requestId>
+ <dataCenterId>datacenter-id</dataCenterId>
+ <dataCenterVersion>datacenter-version</dataCenterVersion>
+ </return>
+ </ns2:deleteLoadBalancerResponse>
+ </S:Body>
</S:Envelope>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/resources/loadbalancer/loadbalancer-deregister.xml
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/resources/loadbalancer/loadbalancer-deregister.xml b/profitbricks/src/test/resources/loadbalancer/loadbalancer-deregister.xml
index ee03c47..86ef94c 100644
--- a/profitbricks/src/test/resources/loadbalancer/loadbalancer-deregister.xml
+++ b/profitbricks/src/test/resources/loadbalancer/loadbalancer-deregister.xml
@@ -1,14 +1,14 @@
<soapenv:Envelope
- xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'
- xmlns:ws='http://ws.api.profitbricks.com/'>
+ xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'
+ xmlns:ws='http://ws.api.profitbricks.com/'>
<soapenv:Header />
<soapenv:Body>
<ws:deregisterServersOnLoadBalancer>
- <request>
+ <request>
<serverIds>1</serverIds>
<serverIds>2</serverIds>
<loadBalancerId>load-balancer-id</loadBalancerId>
- <request>
+ <request>
</ws:deregisterServersOnLoadBalancer>
</soapenv:Body>
</soapenv:Envelope>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/resources/loadbalancer/loadbalancer-register.xml
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/resources/loadbalancer/loadbalancer-register.xml b/profitbricks/src/test/resources/loadbalancer/loadbalancer-register.xml
index 48a1ff1..a32c65a 100644
--- a/profitbricks/src/test/resources/loadbalancer/loadbalancer-register.xml
+++ b/profitbricks/src/test/resources/loadbalancer/loadbalancer-register.xml
@@ -1,13 +1,13 @@
<soapenv:Envelope
- xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'
- xmlns:ws='http://ws.api.profitbricks.com/'>
+ xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'
+ xmlns:ws='http://ws.api.profitbricks.com/'>
<soapenv:Header/>
<soapenv:Body>
<ws:registerServersOnLoadBalancer>
- <request>
+ <request>
<serverIds>1234</serverIds>
<loadBalancerId>load-balancer-id</loadBalancerId>
- </request>
+ </request>
</ws:registerServersOnLoadBalancer>
</soapenv:Body>
</soapenv:Envelope>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/resources/loadbalancer/loadbalancer-update.xml
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/resources/loadbalancer/loadbalancer-update.xml b/profitbricks/src/test/resources/loadbalancer/loadbalancer-update.xml
index 7a39dea..87c1f02 100644
--- a/profitbricks/src/test/resources/loadbalancer/loadbalancer-update.xml
+++ b/profitbricks/src/test/resources/loadbalancer/loadbalancer-update.xml
@@ -1,6 +1,6 @@
<soapenv:Envelope
- xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'
- xmlns:ws='http://ws.api.profitbricks.com/'>
+ xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'
+ xmlns:ws='http://ws.api.profitbricks.com/'>
<soapenv:Header />
<soapenv:Body>
<ws:updateLoadBalancer>
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/resources/loadbalancer/loadbalancer.xml
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/resources/loadbalancer/loadbalancer.xml b/profitbricks/src/test/resources/loadbalancer/loadbalancer.xml
index 501e470..302c10e 100644
--- a/profitbricks/src/test/resources/loadbalancer/loadbalancer.xml
+++ b/profitbricks/src/test/resources/loadbalancer/loadbalancer.xml
@@ -4,7 +4,7 @@
<ns2:getLoadBalancerResponse xmlns:ns2="http://ws.api.profitbricks.com/">
<return>
<dataCenterId>datacenter-id</dataCenterId>
- <dataCenterVersion>datacenter-version</dataCenterVersion>
+ <dataCenterVersion>4</dataCenterVersion>
<loadBalancerId>aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee</loadBalancerId>
<loadBalancerName>load-balancer-name</loadBalancerName>
<loadBalancerAlgorithm>ROUND_ROBIN</loadBalancerAlgorithm>
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/resources/loadbalancer/loadbalancers.xml
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/resources/loadbalancer/loadbalancers.xml b/profitbricks/src/test/resources/loadbalancer/loadbalancers.xml
index 155a1e3..54d1949 100644
--- a/profitbricks/src/test/resources/loadbalancer/loadbalancers.xml
+++ b/profitbricks/src/test/resources/loadbalancer/loadbalancers.xml
@@ -4,7 +4,7 @@
<ns2:getAllLoadBalancersResponse xmlns:ns2="http://ws.api.profitbricks.com/">
<return>
<dataCenterId>datacenter-id</dataCenterId>
- <dataCenterVersion>datacenter-version</dataCenterVersion>
+ <dataCenterVersion>4</dataCenterVersion>
<loadBalancerId>aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee</loadBalancerId>
<loadBalancerName>load-1234567890-name</loadBalancerName>
<loadBalancerAlgorithm>ROUND_ROBIN</loadBalancerAlgorithm>
@@ -29,7 +29,7 @@
</return>
<return>
<dataCenterId>datacenter-id</dataCenterId>
- <dataCenterVersion>datacenter-version</dataCenterVersion>
+ <dataCenterVersion>4</dataCenterVersion>
<loadBalancerId>qqqqqqqq-wwww-rrrr-tttt-yyyyyyyyyyyy</loadBalancerId>
<loadBalancerName>load-balancer-name</loadBalancerName>
<loadBalancerAlgorithm>ROUND_ROBIN</loadBalancerAlgorithm>
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/resources/server/server.xml
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/resources/server/server.xml b/profitbricks/src/test/resources/server/server.xml
index 33fa824..c78721f 100644
--- a/profitbricks/src/test/resources/server/server.xml
+++ b/profitbricks/src/test/resources/server/server.xml
@@ -12,8 +12,8 @@
<ram>4096</ram>
<internetAccess>true</internetAccess>
<ips>173.252.120.6</ips>
- <balancedNicId>qswdefrg-qaws-qaws-defe-rgrgdsvcxbrh</balancedNicId>
- <activate>true</activate>
+ <balancedNicId>qswdefrg-qaws-qaws-defe-rgrgdsvcxbrh</balancedNicId>
+ <activate>true</activate>
<connectedStorages>
<bootDevice>true</bootDevice>
<busType>VIRTIO</busType>
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/resources/snapshot/snapshots.xml
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/resources/snapshot/snapshots.xml b/profitbricks/src/test/resources/snapshot/snapshots.xml
index d59826a..1b3ab72 100644
--- a/profitbricks/src/test/resources/snapshot/snapshots.xml
+++ b/profitbricks/src/test/resources/snapshot/snapshots.xml
@@ -3,25 +3,25 @@
<S:Body>
<ns2:getAllSnapshotsResponse xmlns:ns2="http://ws.api.profitbricks.com/">
<return>
- <snapshotId>aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee</snapshotId>
- <description>description</description>
- <snapshotSize>1024</snapshotSize>
- <snapshotName>snapshot01</snapshotName>
- <provisioningState>AVAILABLE</provisioningState>
- <bootable>true</bootable>
- <osType>LINUX</osType>
- <cpuHotPlug>true</cpuHotPlug>
- <cpuHotUnPlug>true</cpuHotUnPlug>
- <discVirtioHotPlug>true</discVirtioHotPlug>
- <discVirtioHotUnPlug>true</discVirtioHotUnPlug>
- <ramHotPlug>true</ramHotPlug>
- <ramHotUnPlug>true</ramHotUnPlug>
- <nicHotPlug>true</nicHotPlug>
- <nicHotUnPlug>true</nicHotUnPlug>
- <creationTimestamp>2015-01-26T07:09:23.138Z</creationTimestamp>
- <modificationTimestamp>2015-01-26T07:09:23.138Z</modificationTimestamp>
- <location>us/las</location>
- </return>
+ <snapshotId>aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee</snapshotId>
+ <description>description</description>
+ <snapshotSize>1024</snapshotSize>
+ <snapshotName>snapshot01</snapshotName>
+ <provisioningState>AVAILABLE</provisioningState>
+ <bootable>true</bootable>
+ <osType>LINUX</osType>
+ <cpuHotPlug>true</cpuHotPlug>
+ <cpuHotUnPlug>true</cpuHotUnPlug>
+ <discVirtioHotPlug>true</discVirtioHotPlug>
+ <discVirtioHotUnPlug>true</discVirtioHotUnPlug>
+ <ramHotPlug>true</ramHotPlug>
+ <ramHotUnPlug>true</ramHotUnPlug>
+ <nicHotPlug>true</nicHotPlug>
+ <nicHotUnPlug>true</nicHotUnPlug>
+ <creationTimestamp>2015-01-26T07:09:23.138Z</creationTimestamp>
+ <modificationTimestamp>2015-01-26T07:09:23.138Z</modificationTimestamp>
+ <location>us/las</location>
+ </return>
<return>
<snapshotId>qqqqqqqq-wwww-rrrr-tttt-yyyyyyyyyyyy</snapshotId>
<description>description</description>
[4/4] jclouds-labs git commit: JCLOUDS-702: JClouds ProfitBricks
provider - ComputeServiceAdapter
Posted by na...@apache.org.
JCLOUDS-702: JClouds ProfitBricks provider - ComputeServiceAdapter
Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/d07fcb17
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/d07fcb17
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/d07fcb17
Branch: refs/heads/1.9.x
Commit: d07fcb17d606a84b5d50180310725d260db3d400
Parents: dcd1dc1
Author: Reijhanniel Jearl Campos <rj...@toro.io>
Authored: Mon Jun 29 11:13:21 2015 +0800
Committer: Ignasi Barrera <na...@apache.org>
Committed: Tue Jun 30 14:57:25 2015 +0200
----------------------------------------------------------------------
profitbricks/README.md | 63 +++
profitbricks/pom.xml | 1 -
.../profitbricks/ProfitBricksApiMetadata.java | 7 +-
.../ProfitBricksProviderMetadata.java | 25 +-
.../CreateDataCenterRequestBinder.java | 2 +-
.../CreateLoadBalancerRequestBinder.java | 3 +-
.../DeregisterLoadBalancerRequestBinder.java | 3 +-
.../RegisterLoadBalancerRequestBinder.java | 3 +-
.../snapshot/CreateSnapshotRequestBinder.java | 12 +-
.../snapshot/RollbackSnapshotRequestBinder.java | 30 +-
.../snapshot/UpdateSnapshotRequestBinder.java | 32 +-
.../ProfitBricksComputeServiceAdapter.java | 488 +++++++++++++++++++
.../compute/concurrent/ProvisioningJob.java | 62 +++
.../compute/concurrent/ProvisioningManager.java | 88 ++++
...ProfitBricksComputeServiceContextModule.java | 147 ++++++
.../compute/function/DataCenterToLocation.java | 54 ++
.../compute/function/LocationToLocation.java | 47 ++
.../compute/function/ProvisionableToImage.java | 215 ++++++++
.../compute/function/ServerToNodeMetadata.java | 180 +++++++
.../compute/function/StorageToVolume.java | 47 ++
.../ProvisioningStatusPollingPredicate.java | 32 +-
.../config/ProfitBricksComputeProperties.java | 31 ++
.../jclouds/profitbricks/domain/Firewall.java | 6 +-
.../org/jclouds/profitbricks/domain/Image.java | 129 +----
.../profitbricks/domain/LoadBalancer.java | 46 +-
.../jclouds/profitbricks/domain/Location.java | 20 +-
.../org/jclouds/profitbricks/domain/Nic.java | 8 +-
.../org/jclouds/profitbricks/domain/Server.java | 116 ++---
.../jclouds/profitbricks/domain/Snapshot.java | 429 ++++++----------
.../jclouds/profitbricks/domain/Storage.java | 13 +-
.../domain/internal/HotPluggable.java | 102 ++++
.../domain/internal/Provisionable.java | 67 +++
.../domain/internal/ServerCommonProperties.java | 22 +-
.../profitbricks/features/LoadBalancerApi.java | 2 +-
.../firewall/FirewallListResponseHandler.java | 6 +-
.../ipblock/IpBlockListResponseHandler.java | 6 +-
.../BaseLoadBalancerResponseHandler.java | 33 +-
.../LoadBalancerListResponseHandler.java | 25 +-
.../LoadBalancerResponseHandler.java | 13 +-
.../server/BaseServerResponseHandler.java | 40 +-
.../server/ServerInfoResponseHandler.java | 7 +-
.../server/ServerListResponseHandler.java | 24 +-
.../snapshot/BaseSnapshotResponseHandler.java | 48 +-
.../snapshot/SnapshotListResponseHandler.java | 12 +-
.../snapshot/SnapshotResponseHandler.java | 11 +-
.../storage/BaseStorageResponseHandler.java | 12 +-
.../storage/StorageInfoResponseHandler.java | 7 +-
.../storage/StorageListResponseHandler.java | 12 +-
.../jclouds/profitbricks/util/Passwords.java | 64 +++
.../CreateSnapshotRequestBinderTest.java | 14 +-
.../RollbackSnapshotRequestBinderTest.java | 16 +-
...ofitBricksComputeServiceAdapterLiveTest.java | 74 +++
.../ProfitBricksTemplateBuilderLiveTest.java | 37 ++
.../concurrent/ProvisioningManagerTest.java | 118 +++++
.../function/DataCenterToLocationTest.java | 77 +++
.../function/LocationToLocationTest.java | 62 +++
.../function/ProvisionableToImageTest.java | 260 ++++++++++
.../function/ServerToNodeMetadataTest.java | 184 +++++++
.../compute/function/StorageToVolumeTest.java | 61 +++
.../ProvisioningStatusPollingPredicateTest.java | 6 +-
.../features/DrivesApiLiveTest.java | 9 +-
.../features/FirewallApiLiveTest.java | 2 +-
.../features/IpBlockApiLiveTest.java | 2 +-
.../features/IpBlockApiMockTest.java | 4 +-
.../features/LoadbalancerApiLiveTest.java | 2 +-
.../features/LoadbalancerApiMockTest.java | 2 +-
.../features/SnapshotApiLiveTest.java | 32 +-
.../features/SnapshotApiMockTest.java | 174 +++----
.../DataCenterInfoResponseHandlerTest.java | 22 +-
.../image/ImageListResponseHandlerTest.java | 6 +-
.../LoadBalancerListResponseHandlerTest.java | 75 ++-
.../LoadBalancerResponseHandlerTest.java | 28 +-
.../server/ServerInfoResponseHandlerTest.java | 20 +-
.../server/ServerListResponseHandlerTest.java | 32 +-
.../SnapshotListResponseHandlerTest.java | 89 ++--
.../snapshot/SnapshotResponseHandlerTest.java | 49 +-
.../storage/StorageInfoResponseHandlerTest.java | 13 +-
.../storage/StorageListResponseHandlerTest.java | 17 +-
.../profitbricks/util/PasswordsTest.java | 53 ++
.../resources/datacenter/datacenter-deleted.xml | 14 +-
.../datacenter/datacenter-not-found.xml | 28 +-
.../datacenter/datacenter-state-inprocess.xml | 10 +-
.../resources/datacenter/datacenter-state.xml | 10 +-
.../src/test/resources/drives/drives-add.xml | 18 +-
.../src/test/resources/drives/drives-remove.xml | 18 +-
.../resources/firewall/firewall-activate.xml | 18 +-
.../resources/firewall/firewall-addtonic.xml | 40 +-
.../resources/firewall/firewall-deactivate.xml | 18 +-
.../test/resources/firewall/firewall-delete.xml | 18 +-
.../test/resources/firewall/firewall-remove.xml | 18 +-
.../src/test/resources/firewall/firewall.xml | 40 +-
.../test/resources/ipblock/ipblock-addtonic.xml | 18 +-
.../test/resources/ipblock/ipblock-release.xml | 14 +-
.../resources/ipblock/ipblock-removefromnic.xml | 18 +-
.../test/resources/ipblock/ipblock-reserve.xml | 20 +-
.../src/test/resources/ipblock/ipblock.xml | 30 +-
.../loadbalancer/loadbalancer-create.xml | 4 +-
.../loadbalancer/loadbalancer-delete.xml | 18 +-
.../loadbalancer/loadbalancer-deregister.xml | 8 +-
.../loadbalancer/loadbalancer-register.xml | 8 +-
.../loadbalancer/loadbalancer-update.xml | 4 +-
.../resources/loadbalancer/loadbalancer.xml | 2 +-
.../resources/loadbalancer/loadbalancers.xml | 4 +-
.../src/test/resources/server/server.xml | 4 +-
.../src/test/resources/snapshot/snapshots.xml | 38 +-
105 files changed, 3643 insertions(+), 1189 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/README.md
----------------------------------------------------------------------
diff --git a/profitbricks/README.md b/profitbricks/README.md
new file mode 100644
index 0000000..09c367a
--- /dev/null
+++ b/profitbricks/README.md
@@ -0,0 +1,63 @@
+# jclouds ProfitBricks
+
+## Terms
+Like any cloud provider, ProfitBricks has its own set of terms in cloud computing. To abstract this into jclouds' Compute interface, these terms were associated:
+
+- Node - composite instance of `Server` and `Storage`
+- Image - both *user-uploaded* and *provided* `Images`; and `Snapshots`
+- Location - `DataCenters` and `Region` (Las Vegas, Frankfurt, etc.)
+- Hardware - number of cores, RAM size and storage size
+
+## Getting Started
+
+Assuming that there's **atleast one** datacenter existing in your account, the provider needs only an *identity* (your ProfitBricks email), and *credentials* (password) to provision a `Node`, by using a ProfitBricks-provided ubuntu-12.04 image as a template.
+
+```java
+ComputeService compute = ContextBuilder.newBuilder( "profitbricks" )
+ .credentials( "profitbricks email", "password" )
+ .buildView( ComputeServiceContext.class )
+ .getComputeService();
+```
+
+
+This works well; however, we won't be able to use jclouds' ability to execute *scripts* on a remote node. This is because, ProfitBricks' default images require users to change passwords upon first log in.
+
+To enable jclouds to execute script, we need to use a custom image. The easiest way to do this is via ProfitBricks snapshot:
+
+- Go to your [DCD](https://my.profitbricks.com/dashboard/).
+- Provision a server + storage, and connect it to the internet. Upon success, you will receive an email containing the credentials needed to login to your server.
+- Login to your server, and change the password, as requested.
+
+```
+~ ssh root@<remote-ip>
+...
+Changing password for root.
+(current) UNIX password:
+Enter new UNIX password:
+Retype new UNIX password:
+~ root@ubuntu:~# exit
+
+```
+
+- Go back to the DCD, and *make a snapshot* of the storage. Put a descriptive name.
+- Configure jclouds to use this *snapshot*.
+
+```java
+Template template = compute.templateBuilder()
+ .imageNameMatches( "<ideally-unique-snapshot-name>" )
+ .options( compute.templateOptions()
+ .overrideLoginUser( "root" ) // unless you changed the user
+ .overrideLoginPassword( "<changed-password>" ))
+ // more options, as you need
+ .build();
+
+compute.createNodesInGroup( "cluster1", 1, template );
+```
+> If no `locationId` is specified in the template, jclouds will look for a `DataCenter` that is of same scope as the `Image`.
+
+
+## Limitations
+
+- There's no direct way of specifying arbitrary number of cores, RAM size, and storage size via the compute interface, at least until after [JCLOUDS-482](https://issues.apache.org/jira/browse/JCLOUDS-482) is resolved. The adapter uses a predefined list hardware profiles instead.
+
+> Take note that these features are still accessible by *unwraping* the ProfitBricks API, but this'll reduce portability of your code. See [Concepts](https://jclouds.apache.org/start/concepts/).
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/pom.xml
----------------------------------------------------------------------
diff --git a/profitbricks/pom.xml b/profitbricks/pom.xml
index 91679e4..20a8d82 100644
--- a/profitbricks/pom.xml
+++ b/profitbricks/pom.xml
@@ -36,7 +36,6 @@
<test.profitbricks.identity>FIXME</test.profitbricks.identity>
<test.profitbricks.credential>FIXME</test.profitbricks.credential>
<test.profitbricks.api-version>1.3</test.profitbricks.api-version>
- <test.profitbricks.template />
<jclouds.osgi.export>org.jclouds.profitbricks*;version="${project.version}"</jclouds.osgi.export>
<jclouds.osgi.import>
org.jclouds.labs*;version="${project.version}",
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/ProfitBricksApiMetadata.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/ProfitBricksApiMetadata.java b/profitbricks/src/main/java/org/jclouds/profitbricks/ProfitBricksApiMetadata.java
index 205b246..2973f4a 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/ProfitBricksApiMetadata.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/ProfitBricksApiMetadata.java
@@ -19,8 +19,10 @@ package org.jclouds.profitbricks;
import java.net.URI;
import java.util.Properties;
+import org.jclouds.profitbricks.compute.config.ProfitBricksComputeServiceContextModule;
import org.jclouds.profitbricks.config.ProfitBricksHttpApiModule;
import org.jclouds.apis.ApiMetadata;
+import org.jclouds.compute.ComputeServiceContext;
import org.jclouds.profitbricks.config.ProfitBricksHttpApiModule.ProfitBricksHttpCommandExecutorServiceModule;
import org.jclouds.rest.internal.BaseHttpApiMetadata;
@@ -60,11 +62,12 @@ public class ProfitBricksApiMetadata extends BaseHttpApiMetadata<ProfitBricksApi
.documentation(URI.create("https://www.profitbricks.com/sites/default/files/profitbricks_api_1_3.pdf"))
.defaultEndpoint("https://api.profitbricks.com/1.3")
.version("1.3")
- // .view(ComputeServiceContext.class)
+ .view(ComputeServiceContext.class)
.defaultProperties(ProfitBricksApiMetadata.defaultProperties())
.defaultModules(ImmutableSet.<Class<? extends Module>>of(
ProfitBricksHttpApiModule.class,
- ProfitBricksHttpCommandExecutorServiceModule.class
+ ProfitBricksHttpCommandExecutorServiceModule.class,
+ ProfitBricksComputeServiceContextModule.class
));
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/ProfitBricksProviderMetadata.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/ProfitBricksProviderMetadata.java b/profitbricks/src/main/java/org/jclouds/profitbricks/ProfitBricksProviderMetadata.java
index 9ecfbc1..ed6c556 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/ProfitBricksProviderMetadata.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/ProfitBricksProviderMetadata.java
@@ -16,8 +16,17 @@
*/
package org.jclouds.profitbricks;
+import static org.jclouds.Constants.PROPERTY_CONNECTION_TIMEOUT;
+import static org.jclouds.Constants.PROPERTY_SO_TIMEOUT;
+import static org.jclouds.profitbricks.config.ProfitBricksComputeProperties.POLL_PERIOD;
+import static org.jclouds.profitbricks.config.ProfitBricksComputeProperties.POLL_MAX_PERIOD;
+import static org.jclouds.profitbricks.config.ProfitBricksComputeProperties.POLL_TIMEOUT;
+
import com.google.auto.service.AutoService;
+
import java.net.URI;
+import java.util.Properties;
+
import org.jclouds.providers.ProviderMetadata;
import org.jclouds.providers.internal.BaseProviderMetadata;
@@ -41,6 +50,19 @@ public class ProfitBricksProviderMetadata extends BaseProviderMetadata {
return new Builder();
}
+ public static Properties defaultProperties() {
+ Properties properties = ProfitBricksApiMetadata.defaultProperties();
+ long defaultTimeout = 60l * 60l; // 1 hour
+ properties.put(POLL_TIMEOUT, defaultTimeout);
+ properties.put(POLL_PERIOD, 2l);
+ properties.put(POLL_MAX_PERIOD, 2l * 10l);
+
+ properties.put(PROPERTY_SO_TIMEOUT, 60000 * 5);
+ properties.put(PROPERTY_CONNECTION_TIMEOUT, 60000 * 5);
+
+ return properties;
+ }
+
public static class Builder extends BaseProviderMetadata.Builder {
protected Builder() {
@@ -49,7 +71,8 @@ public class ProfitBricksProviderMetadata extends BaseProviderMetadata {
.homepage(URI.create("http://www.profitbricks.com"))
.console(URI.create("https://my.profitbricks.com/dashboard/dcdr2/"))
.linkedServices("profitbricks")
- .apiMetadata(new ProfitBricksApiMetadata());
+ .apiMetadata(new ProfitBricksApiMetadata())
+ .defaultProperties(ProfitBricksProviderMetadata.defaultProperties());
}
@Override
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/binder/datacenter/CreateDataCenterRequestBinder.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/binder/datacenter/CreateDataCenterRequestBinder.java b/profitbricks/src/main/java/org/jclouds/profitbricks/binder/datacenter/CreateDataCenterRequestBinder.java
index 8a07b0a..1873f31 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/binder/datacenter/CreateDataCenterRequestBinder.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/binder/datacenter/CreateDataCenterRequestBinder.java
@@ -35,7 +35,7 @@ public class CreateDataCenterRequestBinder extends BaseProfitBricksRequestBinder
requestBuilder.append("<ws:createDataCenter>")
.append("<request>")
.append(format("<dataCenterName>%s</dataCenterName>", payload.name()))
- .append(format("<location>%s</location>", payload.location().value()))
+ .append(format("<location>%s</location>", payload.location().getId()))
.append("</request>")
.append("</ws:createDataCenter>");
return requestBuilder.toString();
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/binder/loadbalancer/CreateLoadBalancerRequestBinder.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/binder/loadbalancer/CreateLoadBalancerRequestBinder.java b/profitbricks/src/main/java/org/jclouds/profitbricks/binder/loadbalancer/CreateLoadBalancerRequestBinder.java
index 23e121e..90eb93f 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/binder/loadbalancer/CreateLoadBalancerRequestBinder.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/binder/loadbalancer/CreateLoadBalancerRequestBinder.java
@@ -39,9 +39,8 @@ public class CreateLoadBalancerRequestBinder extends BaseProfitBricksRequestBind
.append(format("<loadBalancerAlgorithm>%s</loadBalancerAlgorithm>", payload.loadBalancerAlgorithm()))
.append(format("<ip>%s</ip>", payload.ip()))
.append(format("<lanId>%s</lanId>", payload.lanId()));
- for (String serverId : payload.serverIds()) {
+ for (String serverId : payload.serverIds())
requestBuilder.append(format("<serverIds>%s</serverIds>", serverId));
- }
requestBuilder
.append("</request>")
.append("</ws:createLoadBalancer>");
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/binder/loadbalancer/DeregisterLoadBalancerRequestBinder.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/binder/loadbalancer/DeregisterLoadBalancerRequestBinder.java b/profitbricks/src/main/java/org/jclouds/profitbricks/binder/loadbalancer/DeregisterLoadBalancerRequestBinder.java
index 92f2868..ba237c4 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/binder/loadbalancer/DeregisterLoadBalancerRequestBinder.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/binder/loadbalancer/DeregisterLoadBalancerRequestBinder.java
@@ -33,9 +33,8 @@ public class DeregisterLoadBalancerRequestBinder extends BaseProfitBricksRequest
protected String createPayload(LoadBalancer.Request.DeregisterPayload payload) {
requestBuilder.append("<ws:deregisterServersOnLoadBalancer>")
.append("<request>");
- for (String s : payload.serverIds()) {
+ for (String s : payload.serverIds())
requestBuilder.append(format("<serverIds>%s</serverIds>", s));
- }
requestBuilder.append(format("<loadBalancerId>%s</loadBalancerId>", payload.id()))
.append("</request>")
.append("</ws:deregisterServersOnLoadBalancer>");
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/binder/loadbalancer/RegisterLoadBalancerRequestBinder.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/binder/loadbalancer/RegisterLoadBalancerRequestBinder.java b/profitbricks/src/main/java/org/jclouds/profitbricks/binder/loadbalancer/RegisterLoadBalancerRequestBinder.java
index 2e437f0..21f1d84 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/binder/loadbalancer/RegisterLoadBalancerRequestBinder.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/binder/loadbalancer/RegisterLoadBalancerRequestBinder.java
@@ -35,9 +35,8 @@ public class RegisterLoadBalancerRequestBinder extends BaseProfitBricksRequestBi
.append("<ws:registerServersOnLoadBalancer>").append("<request>")
.append(format("<loadBalancerId>%s</loadBalancerId>", payload.id()));
- for (String s : payload.serverIds()) {
+ for (String s : payload.serverIds())
requestBuilder.append(format("<serverIds>%s</serverIds>", s));
- }
requestBuilder
.append("</request>")
.append("</ws:registerServersOnLoadBalancer>");
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/binder/snapshot/CreateSnapshotRequestBinder.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/binder/snapshot/CreateSnapshotRequestBinder.java b/profitbricks/src/main/java/org/jclouds/profitbricks/binder/snapshot/CreateSnapshotRequestBinder.java
index 213a3a8..5ec4644 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/binder/snapshot/CreateSnapshotRequestBinder.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/binder/snapshot/CreateSnapshotRequestBinder.java
@@ -33,12 +33,12 @@ public class CreateSnapshotRequestBinder extends BaseProfitBricksRequestBinder<S
@Override
protected String createPayload(Snapshot.Request.CreatePayload payload) {
requestBuilder.append("<ws:createSnapshot>")
- .append("<request>")
- .append(format("<storageId>%s</storageId>", payload.storageId()))
- .append(formatIfNotEmpty("<description>%s</description>", payload.description()))
- .append(formatIfNotEmpty("<snapshotName>%s</snapshotName>", payload.name()))
- .append("</request>")
- .append("</ws:createSnapshot>");
+ .append("<request>")
+ .append(format("<storageId>%s</storageId>", payload.storageId()))
+ .append(formatIfNotEmpty("<description>%s</description>", payload.description()))
+ .append(formatIfNotEmpty("<snapshotName>%s</snapshotName>", payload.name()))
+ .append("</request>")
+ .append("</ws:createSnapshot>");
return requestBuilder.toString();
}
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/binder/snapshot/RollbackSnapshotRequestBinder.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/binder/snapshot/RollbackSnapshotRequestBinder.java b/profitbricks/src/main/java/org/jclouds/profitbricks/binder/snapshot/RollbackSnapshotRequestBinder.java
index a9997cb..5099324 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/binder/snapshot/RollbackSnapshotRequestBinder.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/binder/snapshot/RollbackSnapshotRequestBinder.java
@@ -23,21 +23,21 @@ import static java.lang.String.format;
public class RollbackSnapshotRequestBinder extends BaseProfitBricksRequestBinder<Snapshot.Request.RollbackPayload> {
- protected final StringBuilder requestBuilder;
+ protected final StringBuilder requestBuilder;
- protected RollbackSnapshotRequestBinder() {
- super("snapshot");
- this.requestBuilder = new StringBuilder(128);
- }
+ protected RollbackSnapshotRequestBinder() {
+ super("snapshot");
+ this.requestBuilder = new StringBuilder(128);
+ }
- @Override
- protected String createPayload(Snapshot.Request.RollbackPayload payload) {
- requestBuilder.append("<ws:rollbackSnapshot>")
- .append("<request>")
- .append(format("<snapshotId>%s</snapshotId>", payload.snapshotId()))
- .append(format("<storageId>%s</storageId>", payload.storageId()))
- .append("</request>")
- .append("</ws:rollbackSnapshot>");
- return requestBuilder.toString();
- }
+ @Override
+ protected String createPayload(Snapshot.Request.RollbackPayload payload) {
+ requestBuilder.append("<ws:rollbackSnapshot>")
+ .append("<request>")
+ .append(format("<snapshotId>%s</snapshotId>", payload.snapshotId()))
+ .append(format("<storageId>%s</storageId>", payload.storageId()))
+ .append("</request>")
+ .append("</ws:rollbackSnapshot>");
+ return requestBuilder.toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/binder/snapshot/UpdateSnapshotRequestBinder.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/binder/snapshot/UpdateSnapshotRequestBinder.java b/profitbricks/src/main/java/org/jclouds/profitbricks/binder/snapshot/UpdateSnapshotRequestBinder.java
index e396715..df1b7cd 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/binder/snapshot/UpdateSnapshotRequestBinder.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/binder/snapshot/UpdateSnapshotRequestBinder.java
@@ -32,22 +32,22 @@ public class UpdateSnapshotRequestBinder extends BaseProfitBricksRequestBinder<S
@Override
protected String createPayload(Snapshot.Request.UpdatePayload payload) {
requestBuilder.append("<ws:updateSnapshot>")
- .append("<request>")
- .append(format("<snapshotId>%s</snapshotId>", payload.snapshotId()))
- .append(format("<description>%s</description>", payload.description()))
- .append(format("<snapshotName>%s</snapshotName>", payload.name()))
- .append(formatIfNotEmpty("<bootable>%s</bootable>", payload.bootable()))
- .append(formatIfNotEmpty("<osType>%s</osType>", payload.osType()))
- .append(formatIfNotEmpty("<cpuHotPlug>%s</cpuHotPlug>", payload.cpuHotplug()))
- .append(formatIfNotEmpty("<cpuHotUnPlug>%s</cpuHotUnPlug>", payload.cpuHotunplug()))
- .append(formatIfNotEmpty("<ramHotPlug>%s</ramHotPlug>", payload.ramHotplug()))
- .append(formatIfNotEmpty("<ramHotUnPlug>%s</ramHotUnPlug>", payload.ramHotunplug()))
- .append(formatIfNotEmpty("<nicHotPlug>%s</nicHotPlug>", payload.nicHotplug()))
- .append(formatIfNotEmpty("<nicHotUnPlug>%s</nicHotUnPlug>", payload.nicHotunplug()))
- .append(formatIfNotEmpty("<discVirtioHotPlug>%s</discVirtioHotPlug>", payload.discVirtioHotplug()))
- .append(formatIfNotEmpty("<discVirtioHotUnPlug>%s</discVirtioHotUnPlug>", payload.discVirtioHotunplug()))
- .append("</request>")
- .append("</ws:updateSnapshot>");
+ .append("<request>")
+ .append(format("<snapshotId>%s</snapshotId>", payload.snapshotId()))
+ .append(format("<description>%s</description>", payload.description()))
+ .append(format("<snapshotName>%s</snapshotName>", payload.name()))
+ .append(formatIfNotEmpty("<bootable>%s</bootable>", payload.bootable()))
+ .append(formatIfNotEmpty("<osType>%s</osType>", payload.osType()))
+ .append(formatIfNotEmpty("<cpuHotPlug>%s</cpuHotPlug>", payload.isCpuHotPlug()))
+ .append(formatIfNotEmpty("<cpuHotUnPlug>%s</cpuHotUnPlug>", payload.isCpuHotUnPlug()))
+ .append(formatIfNotEmpty("<ramHotPlug>%s</ramHotPlug>", payload.isRamHotPlug()))
+ .append(formatIfNotEmpty("<ramHotUnPlug>%s</ramHotUnPlug>", payload.isRamHotUnPlug()))
+ .append(formatIfNotEmpty("<nicHotPlug>%s</nicHotPlug>", payload.isNicHotPlug()))
+ .append(formatIfNotEmpty("<nicHotUnPlug>%s</nicHotUnPlug>", payload.isNicHotUnPlug()))
+ .append(formatIfNotEmpty("<discVirtioHotPlug>%s</discVirtioHotPlug>", payload.isDiscVirtioHotPlug()))
+ .append(formatIfNotEmpty("<discVirtioHotUnPlug>%s</discVirtioHotUnPlug>", payload.isDiscVirtioHotUnPlug()))
+ .append("</request>")
+ .append("</ws:updateSnapshot>");
return requestBuilder.toString();
}
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/compute/ProfitBricksComputeServiceAdapter.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/compute/ProfitBricksComputeServiceAdapter.java b/profitbricks/src/main/java/org/jclouds/profitbricks/compute/ProfitBricksComputeServiceAdapter.java
new file mode 100644
index 0000000..add3fb9
--- /dev/null
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/compute/ProfitBricksComputeServiceAdapter.java
@@ -0,0 +1,488 @@
+/*
+ * 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.jclouds.profitbricks.compute;
+
+import static com.google.common.base.Strings.isNullOrEmpty;
+import static com.google.common.collect.Iterables.transform;
+import static com.google.common.util.concurrent.Futures.allAsList;
+import static com.google.common.util.concurrent.Futures.getUnchecked;
+import static java.lang.String.format;
+import static org.jclouds.Constants.PROPERTY_USER_THREADS;
+import static org.jclouds.profitbricks.config.ProfitBricksComputeProperties.POLL_PREDICATE_DATACENTER;
+
+import java.util.List;
+import java.util.concurrent.Callable;
+
+import javax.annotation.Resource;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+import org.jclouds.compute.ComputeServiceAdapter;
+import org.jclouds.compute.domain.Hardware;
+import org.jclouds.compute.domain.HardwareBuilder;
+import org.jclouds.compute.domain.Processor;
+import org.jclouds.compute.domain.Template;
+import org.jclouds.compute.domain.Volume;
+import org.jclouds.compute.domain.internal.VolumeImpl;
+import org.jclouds.compute.options.TemplateOptions;
+import org.jclouds.compute.reference.ComputeServiceConstants;
+import org.jclouds.compute.util.ComputeServiceUtils;
+import org.jclouds.domain.LoginCredentials;
+import org.jclouds.logging.Logger;
+import org.jclouds.profitbricks.ProfitBricksApi;
+import org.jclouds.profitbricks.domain.AvailabilityZone;
+import org.jclouds.profitbricks.domain.DataCenter;
+import org.jclouds.profitbricks.domain.Image;
+import org.jclouds.profitbricks.domain.Server;
+import org.jclouds.profitbricks.domain.Storage;
+import org.jclouds.profitbricks.features.DataCenterApi;
+import org.jclouds.profitbricks.features.ServerApi;
+import org.jclouds.profitbricks.compute.concurrent.ProvisioningJob;
+import org.jclouds.profitbricks.compute.concurrent.ProvisioningManager;
+import org.jclouds.profitbricks.domain.Snapshot;
+import org.jclouds.profitbricks.domain.internal.Provisionable;
+import org.jclouds.profitbricks.util.Passwords;
+import org.jclouds.rest.ResourceNotFoundException;
+
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.base.Supplier;
+import com.google.common.base.Throwables;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningExecutorService;
+import com.google.inject.Inject;
+
+@Singleton
+public class ProfitBricksComputeServiceAdapter implements ComputeServiceAdapter<Server, Hardware, Provisionable, DataCenter> {
+
+ @Resource
+ @Named(ComputeServiceConstants.COMPUTE_LOGGER)
+ protected Logger logger = Logger.NULL;
+
+ private final ProfitBricksApi api;
+ private final Predicate<String> waitDcUntilAvailable;
+ private final ListeningExecutorService executorService;
+ private final ProvisioningJob.Factory jobFactory;
+ private final ProvisioningManager provisioningManager;
+
+ private static final Integer DEFAULT_LAN_ID = 1;
+
+ @Inject
+ ProfitBricksComputeServiceAdapter(ProfitBricksApi api,
+ @Named(POLL_PREDICATE_DATACENTER) Predicate<String> waitDcUntilAvailable,
+ @Named(PROPERTY_USER_THREADS) ListeningExecutorService executorService,
+ ProvisioningJob.Factory jobFactory,
+ ProvisioningManager provisioningManager) {
+ this.api = api;
+ this.waitDcUntilAvailable = waitDcUntilAvailable;
+ this.executorService = executorService;
+ this.jobFactory = jobFactory;
+ this.provisioningManager = provisioningManager;
+ }
+
+ @Override
+ public NodeAndInitialCredentials<Server> createNodeWithGroupEncodedIntoName(String group, String name, Template template) {
+ final String dataCenterId = template.getLocation().getId();
+ Hardware hardware = template.getHardware();
+
+ TemplateOptions options = template.getOptions();
+ final String loginUser = isNullOrEmpty(options.getLoginUser()) ? "root" : options.getLoginUser();
+ final String password = options.hasLoginPassword() ? options.getLoginPassword() : Passwords.generate();
+
+ final org.jclouds.compute.domain.Image image = template.getImage();
+
+ // provision all storages based on hardware
+ List<? extends Volume> volumes = hardware.getVolumes();
+ List<String> storageIds = Lists.newArrayListWithExpectedSize(volumes.size());
+
+ int i = 1;
+ for (final Volume volume : volumes)
+ try {
+ logger.trace("<< provisioning storage '%s'", volume);
+ final Storage.Request.CreatePayload request = Storage.Request.creatingBuilder()
+ .dataCenterId(dataCenterId)
+ // put image to first storage
+ .mountImageId(i == 1 ? image.getId() : "")
+ .imagePassword(password)
+ .name(format("%s-disk-%d", name, i++))
+ .size(volume.getSize())
+ .build();
+
+ String storageId = (String) provisioningManager.provision(jobFactory.create(dataCenterId, new Supplier<Object>() {
+
+ @Override
+ public Object get() {
+ return api.storageApi().createStorage(request);
+ }
+ }));
+
+ storageIds.add(storageId);
+ logger.trace(">> provisioning complete for storage. returned id='%s'", storageId);
+ } catch (Exception ex) {
+ if (i - 1 == 1) // if first storage (one with image) provisioning fails; stop method
+ throw Throwables.propagate(ex);
+ logger.warn(ex, ">> failed to provision storage. skipping..");
+ }
+
+ int lanId = DEFAULT_LAN_ID;
+ if (options.getNetworks() != null)
+ try {
+ String networkId = Iterables.get(options.getNetworks(), 0);
+ lanId = Integer.valueOf(networkId);
+ } catch (Exception ex) {
+ logger.warn("no valid network id found from options. using default id='%d'", DEFAULT_LAN_ID);
+ }
+
+ Double cores = ComputeServiceUtils.getCores(hardware);
+
+ // provision server and connect boot storage (first provisioned)
+ String serverId = null;
+ try {
+ String storageBootDeviceId = Iterables.get(storageIds, 0); // must have atleast 1
+ final Server.Request.CreatePayload serverRequest = Server.Request.creatingBuilder()
+ .dataCenterId(dataCenterId)
+ .name(name)
+ .bootFromStorageId(storageBootDeviceId)
+ .cores(cores.intValue())
+ .ram(hardware.getRam())
+ .availabilityZone(AvailabilityZone.AUTO)
+ .hasInternetAccess(true)
+ .lanId(lanId)
+ .build();
+ logger.trace("<< provisioning server '%s'", serverRequest);
+
+ serverId = (String) provisioningManager.provision(jobFactory.create(dataCenterId, new Supplier<Object>() {
+
+ @Override
+ public Object get() {
+ return api.serverApi().createServer(serverRequest);
+ }
+ }));
+ logger.trace(">> provisioning complete for server. returned id='%s'", serverId);
+
+ } catch (Exception ex) {
+ logger.error(ex, ">> failed to provision server. rollbacking..");
+ destroyStorages(storageIds, dataCenterId);
+ throw Throwables.propagate(ex);
+ }
+
+ // connect the rest of storages to server; delete if fails
+ final int storageCount = storageIds.size();
+ for (int j = 1; j < storageCount; j++) { // skip first; already connected
+ String storageId = storageIds.get(j);
+ try {
+ logger.trace("<< connecting storage '%s' to server '%s'", storageId, serverId);
+ final Storage.Request.ConnectPayload request = Storage.Request.connectingBuilder()
+ .storageId(storageId)
+ .serverId(serverId)
+ .build();
+
+ provisioningManager.provision(jobFactory.create(group, new Supplier<Object>() {
+
+ @Override
+ public Object get() {
+ return api.storageApi().connectStorageToServer(request);
+ }
+ }));
+
+ logger.trace(">> storage connected.");
+ } catch (Exception ex) {
+ // delete unconnected storage
+ logger.warn(ex, ">> failed to connect storage '%s'. deleting..", storageId);
+ destroyStorage(storageId, dataCenterId);
+ }
+ }
+
+ // Last paranoid check
+ waitDcUntilAvailable.apply(dataCenterId);
+
+ LoginCredentials serverCredentials = LoginCredentials.builder()
+ .user(loginUser)
+ .password(password)
+ .build();
+
+ Server server = getNode(serverId);
+
+ return new NodeAndInitialCredentials<Server>(server, serverId, serverCredentials);
+ }
+
+ @Override
+ public Iterable<Hardware> listHardwareProfiles() {
+ // Max [cores=48] [disk size per storage=2048GB] [ram=200704 MB]
+ List<Hardware> hardwares = Lists.newArrayList();
+ for (int core = 1; core <= 48; core++)
+ for (int ram : new int[]{1024, 2 * 1024, 4 * 1024, 8 * 1024,
+ 10 * 1024, 16 * 1024, 24 * 1024, 28 * 1024, 32 * 1024})
+ for (float size : new float[]{10, 20, 30, 50, 80, 100, 150, 200, 250, 500}) {
+ String id = String.format("cpu=%d,ram=%s,disk=%f", core, ram, size);
+ hardwares.add(new HardwareBuilder()
+ .ids(id)
+ .ram(ram)
+ .hypervisor("kvm")
+ .name(id)
+ .processor(new Processor(core, 1d))
+ .volume(new VolumeImpl(size, true, true))
+ .build());
+ }
+ return hardwares;
+ }
+
+ @Override
+ public Iterable<Provisionable> listImages() {
+ // fetch images..
+ ListenableFuture<List<Image>> images = executorService.submit(new Callable<List<Image>>() {
+
+ @Override
+ public List<Image> call() throws Exception {
+ logger.trace("<< fetching images..");
+ // Filter HDD types only, since JClouds doesn't have a concept of "CD-ROM" anyway
+ Iterable<Image> filteredImages = Iterables.filter(api.imageApi().getAllImages(), new Predicate<Image>() {
+
+ @Override
+ public boolean apply(Image image) {
+ return image.type() == Image.Type.HDD;
+ }
+ });
+ logger.trace(">> images fetched.");
+
+ return ImmutableList.copyOf(filteredImages);
+ }
+
+ });
+ // and snapshots at the same time
+ ListenableFuture<List<Snapshot>> snapshots = executorService.submit(new Callable<List<Snapshot>>() {
+
+ @Override
+ public List<Snapshot> call() throws Exception {
+ logger.trace("<< fetching snapshots");
+ List<Snapshot> remoteSnapshots = api.snapshotApi().getAllSnapshots();
+ logger.trace(">> snapshots feched.");
+
+ return remoteSnapshots;
+ }
+
+ });
+
+ return Iterables.concat(getUnchecked(images), getUnchecked(snapshots));
+ }
+
+ @Override
+ public Provisionable getImage(String id) {
+ // try search images
+ logger.trace("<< searching for image with id=%s", id);
+ Image image = api.imageApi().getImage(id);
+ if (image != null) {
+ logger.trace(">> found image [%s].", image.name());
+ return image;
+ }
+ // try search snapshots
+ logger.trace("<< not found from images. searching for snapshot with id=%s", id);
+ Snapshot snapshot = api.snapshotApi().getSnapshot(id);
+ if (snapshot != null) {
+ logger.trace(">> found snapshot [%s]", snapshot.name());
+ return snapshot;
+ }
+ throw new ResourceNotFoundException("No image/snapshot with id '" + id + "' was found");
+ }
+
+ @Override
+ public Iterable<DataCenter> listLocations() {
+ logger.trace("<< fetching datacenters..");
+ final DataCenterApi dcApi = api.dataCenterApi();
+
+ // Fetch all datacenters
+ ListenableFuture<List<DataCenter>> futures = allAsList(transform(dcApi.getAllDataCenters(),
+ new Function<DataCenter, ListenableFuture<DataCenter>>() {
+
+ @Override
+ public ListenableFuture<DataCenter> apply(final DataCenter input) {
+ // Fetch more details in parallel
+ return executorService.submit(new Callable<DataCenter>() {
+ @Override
+ public DataCenter call() throws Exception {
+ logger.trace("<< fetching datacenter with id [%s]", input.id());
+ return dcApi.getDataCenter(input.id());
+ }
+
+ });
+ }
+ }));
+
+ return getUnchecked(futures);
+ }
+
+ @Override
+ public Server getNode(String id) {
+ logger.trace("<< searching for server with id=%s", id);
+
+ Server server = api.serverApi().getServer(id);
+ if (server != null)
+ logger.trace(">> found server [%s]", server.name());
+ return server;
+ }
+
+ @Override
+ public void destroyNode(String nodeId) {
+ ServerApi serverApi = api.serverApi();
+ Server server = serverApi.getServer(nodeId);
+ if (server != null) {
+ String dataCenterId = server.dataCenter().id();
+ for (Storage storage : server.storages())
+ destroyStorage(storage.id(), dataCenterId);
+
+ try {
+ destroyServer(nodeId, dataCenterId);
+ } catch (Exception ex) {
+ logger.warn(ex, ">> failed to delete server with id=%s", nodeId);
+ }
+ }
+ }
+
+ @Override
+ public void rebootNode(final String id) {
+ // Fail pre-emptively if not found
+ final Server node = getRequiredNode(id);
+ final DataCenter dataCenter = node.dataCenter();
+ provisioningManager.provision(jobFactory.create(dataCenter.id(), new Supplier<Object>() {
+
+ @Override
+ public Object get() {
+ api.serverApi().resetServer(id);
+
+ return node;
+ }
+ }));
+ }
+
+ @Override
+ public void resumeNode(final String id) {
+ final Server node = getRequiredNode(id);
+ if (node.status() == Server.Status.RUNNING)
+ return;
+
+ final DataCenter dataCenter = node.dataCenter();
+ provisioningManager.provision(jobFactory.create(dataCenter.id(), new Supplier<Object>() {
+
+ @Override
+ public Object get() {
+ api.serverApi().startServer(id);
+
+ return node;
+ }
+ }));
+ }
+
+ @Override
+ public void suspendNode(final String id) {
+ final Server node = getRequiredNode(id);
+ // Intentionally didn't include SHUTDOWN (only achieved via UI; soft-shutdown).
+ // A SHUTOFF server is no longer billed, so we execute method for all other status
+ if (node.status() == Server.Status.SHUTOFF)
+ return;
+
+ final DataCenter dataCenter = node.dataCenter();
+ provisioningManager.provision(jobFactory.create(dataCenter.id(), new Supplier<Object>() {
+
+ @Override
+ public Object get() {
+ api.serverApi().stopServer(id);
+
+ return node;
+ }
+ }));
+ }
+
+ @Override
+ public Iterable<Server> listNodes() {
+ logger.trace(">> fetching all servers..");
+ List<Server> servers = api.serverApi().getAllServers();
+ logger.trace(">> servers fetched.");
+ return servers;
+ }
+
+ @Override
+ public Iterable<Server> listNodesByIds(final Iterable<String> ids) {
+ // Only fetch the requested nodes. Do it in parallel.
+ ListenableFuture<List<Server>> futures = allAsList(transform(ids,
+ new Function<String, ListenableFuture<Server>>() {
+
+ @Override
+ public ListenableFuture<Server> apply(final String input) {
+ return executorService.submit(new Callable<Server>() {
+
+ @Override
+ public Server call() throws Exception {
+ return getNode(input);
+ }
+ });
+ }
+ }));
+
+ return getUnchecked(futures);
+ }
+
+ private void destroyServer(final String serverId, final String dataCenterId) {
+ try {
+ logger.trace("<< deleting server with id=%s", serverId);
+ provisioningManager.provision(jobFactory.create(dataCenterId, new Supplier<Object>() {
+
+ @Override
+ public Object get() {
+ api.serverApi().deleteServer(serverId);
+
+ return serverId;
+ }
+ }));
+ logger.trace(">> server '%s' deleted.", serverId);
+ } catch (Exception ex) {
+ logger.warn(ex, ">> failed to delete server with id=%s", serverId);
+ }
+ }
+
+ private void destroyStorages(List<String> storageIds, String dataCenterId) {
+ for (String storageId : storageIds)
+ destroyStorage(storageId, dataCenterId);
+ }
+
+ private void destroyStorage(final String storageId, final String dataCenterId) {
+ try {
+ logger.trace("<< deleting storage with id=%s", storageId);
+ provisioningManager.provision(jobFactory.create(dataCenterId, new Supplier<Object>() {
+
+ @Override
+ public Object get() {
+ api.storageApi().deleteStorage(storageId);
+
+ return storageId;
+ }
+ }));
+ logger.trace(">> storage '%s' deleted.", storageId);
+ } catch (Exception ex) {
+ logger.warn(ex, ">> failed to delete storage with id=%s", storageId);
+ }
+ }
+
+ private Server getRequiredNode(String nodeId) {
+ Server node = getNode(nodeId);
+ if (node == null)
+ throw new ResourceNotFoundException("Node with id'" + nodeId + "' was not found.");
+ return node;
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/compute/concurrent/ProvisioningJob.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/compute/concurrent/ProvisioningJob.java b/profitbricks/src/main/java/org/jclouds/profitbricks/compute/concurrent/ProvisioningJob.java
new file mode 100644
index 0000000..7da7d3c
--- /dev/null
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/compute/concurrent/ProvisioningJob.java
@@ -0,0 +1,62 @@
+/*
+ * 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.jclouds.profitbricks.compute.concurrent;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.jclouds.profitbricks.config.ProfitBricksComputeProperties.POLL_PREDICATE_DATACENTER;
+
+import java.util.concurrent.Callable;
+
+import javax.inject.Named;
+
+import com.google.common.base.Predicate;
+import com.google.common.base.Supplier;
+import com.google.inject.Inject;
+import com.google.inject.assistedinject.Assisted;
+
+public class ProvisioningJob implements Callable {
+
+ public interface Factory {
+
+ ProvisioningJob create(String group, Supplier<Object> operation);
+ }
+
+ private final Predicate<String> waitDataCenterUntilReady;
+ private final String group;
+ private final Supplier<Object> operation;
+
+ @Inject
+ ProvisioningJob(@Named(POLL_PREDICATE_DATACENTER) Predicate<String> waitDataCenterUntilReady,
+ @Assisted String group, @Assisted Supplier<Object> operation) {
+ this.waitDataCenterUntilReady = waitDataCenterUntilReady;
+ this.group = checkNotNull(group, "group cannot be null");
+ this.operation = checkNotNull(operation, "operation cannot be null");
+ }
+
+ @Override
+ public Object call() throws Exception {
+ waitDataCenterUntilReady.apply(group);
+ Object obj = operation.get();
+ waitDataCenterUntilReady.apply(group);
+
+ return obj;
+ }
+
+ public String getGroup() {
+ return group;
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/compute/concurrent/ProvisioningManager.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/compute/concurrent/ProvisioningManager.java b/profitbricks/src/main/java/org/jclouds/profitbricks/compute/concurrent/ProvisioningManager.java
new file mode 100644
index 0000000..820cafe
--- /dev/null
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/compute/concurrent/ProvisioningManager.java
@@ -0,0 +1,88 @@
+/*
+ * 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.jclouds.profitbricks.compute.concurrent;
+
+import static com.google.common.util.concurrent.Futures.getUnchecked;
+import static com.google.common.util.concurrent.MoreExecutors.listeningDecorator;
+
+import java.io.Closeable;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.Executors;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import javax.annotation.Resource;
+
+import org.jclouds.concurrent.config.WithSubmissionTrace;
+import org.jclouds.logging.Logger;
+
+import com.google.common.util.concurrent.ListeningExecutorService;
+
+/**
+ * Delegates {@link Job} to single-threaded executor services based on it's group.
+ *
+ */
+public final class ProvisioningManager implements Closeable {
+
+ @Resource
+ private Logger logger = Logger.NULL;
+
+ private final Map<String, ListeningExecutorService> workers
+ = new ConcurrentHashMap<String, ListeningExecutorService>(1);
+
+ private final AtomicBoolean terminated = new AtomicBoolean(false);
+
+ public Object provision(ProvisioningJob job) {
+ if (terminated.get()) {
+ logger.warn("Job(%s) submitted but the provisioning manager is already closed", job);
+ return null;
+ }
+
+ logger.debug("Job(%s) submitted to group '%s'", job, job.getGroup());
+ ListeningExecutorService workerGroup = getWorkerGroup(job.getGroup());
+ return getUnchecked(workerGroup.submit(job));
+ }
+
+ protected ListeningExecutorService newExecutorService() {
+ return WithSubmissionTrace.wrap(listeningDecorator(Executors.newSingleThreadExecutor()));
+ }
+
+ private void newWorkerGroupIfAbsent(String name) {
+ if (!workers.containsKey(name))
+ workers.put(name, newExecutorService());
+ }
+
+ private ListeningExecutorService getWorkerGroup(String name) {
+ newWorkerGroupIfAbsent(name);
+ return workers.get(name);
+ }
+
+ @Override
+ public void close() throws IOException {
+ terminated.set(true); // Do not allow to enqueue more jobs
+ Collection<ListeningExecutorService> executors = workers.values();
+ for (ListeningExecutorService executor : executors) {
+ List<Runnable> runnables = executor.shutdownNow();
+ if (!runnables.isEmpty())
+ logger.warn("when shutting down executor %s, runnables outstanding: %s", executor, runnables);
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/compute/config/ProfitBricksComputeServiceContextModule.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/compute/config/ProfitBricksComputeServiceContextModule.java b/profitbricks/src/main/java/org/jclouds/profitbricks/compute/config/ProfitBricksComputeServiceContextModule.java
new file mode 100644
index 0000000..d260caf
--- /dev/null
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/compute/config/ProfitBricksComputeServiceContextModule.java
@@ -0,0 +1,147 @@
+/*
+ * 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.jclouds.profitbricks.compute.config;
+
+import static org.jclouds.profitbricks.config.ProfitBricksComputeProperties.POLL_PERIOD;
+import static org.jclouds.profitbricks.config.ProfitBricksComputeProperties.POLL_MAX_PERIOD;
+import static org.jclouds.profitbricks.config.ProfitBricksComputeProperties.POLL_PREDICATE_DATACENTER;
+import static org.jclouds.profitbricks.config.ProfitBricksComputeProperties.POLL_TIMEOUT;
+
+import java.util.concurrent.TimeUnit;
+
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+import org.jclouds.compute.ComputeServiceAdapter;
+import org.jclouds.compute.config.ComputeServiceAdapterContextModule;
+import org.jclouds.compute.domain.Hardware;
+import org.jclouds.compute.domain.Image;
+import org.jclouds.compute.domain.NodeMetadata;
+import org.jclouds.compute.domain.Volume;
+import org.jclouds.domain.Location;
+import org.jclouds.functions.IdentityFunction;
+import org.jclouds.lifecycle.Closer;
+import org.jclouds.location.suppliers.ImplicitLocationSupplier;
+import org.jclouds.location.suppliers.implicit.OnlyLocationOrFirstZone;
+import org.jclouds.profitbricks.ProfitBricksApi;
+import org.jclouds.profitbricks.compute.ProfitBricksComputeServiceAdapter;
+import org.jclouds.profitbricks.compute.concurrent.ProvisioningJob;
+import org.jclouds.profitbricks.compute.concurrent.ProvisioningManager;
+import org.jclouds.profitbricks.domain.DataCenter;
+import org.jclouds.profitbricks.domain.Server;
+import org.jclouds.profitbricks.domain.Storage;
+import org.jclouds.profitbricks.compute.function.DataCenterToLocation;
+import org.jclouds.profitbricks.compute.function.LocationToLocation;
+import org.jclouds.profitbricks.compute.function.ProvisionableToImage;
+import org.jclouds.profitbricks.compute.function.ServerToNodeMetadata;
+import org.jclouds.profitbricks.compute.function.StorageToVolume;
+import org.jclouds.profitbricks.compute.internal.ProvisioningStatusAware;
+import org.jclouds.profitbricks.compute.internal.ProvisioningStatusPollingPredicate;
+import org.jclouds.profitbricks.domain.ProvisioningState;
+import org.jclouds.profitbricks.domain.internal.Provisionable;
+import org.jclouds.util.Predicates2;
+
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.inject.Inject;
+import com.google.inject.Provides;
+import com.google.inject.TypeLiteral;
+import com.google.inject.assistedinject.FactoryModuleBuilder;
+
+public class ProfitBricksComputeServiceContextModule extends
+ ComputeServiceAdapterContextModule<Server, Hardware, Provisionable, DataCenter> {
+
+ @Override
+ protected void configure() {
+ super.configure();
+
+ install(new LocationsFromComputeServiceAdapterModule<Server, Hardware, Provisionable, DataCenter>() {
+ });
+
+ install(new FactoryModuleBuilder().build(ProvisioningJob.Factory.class));
+
+ bind(ImplicitLocationSupplier.class).to(OnlyLocationOrFirstZone.class).in(Singleton.class);
+
+ bind(new TypeLiteral<ComputeServiceAdapter<Server, Hardware, Provisionable, DataCenter>>() {
+ }).to(ProfitBricksComputeServiceAdapter.class);
+
+ bind(new TypeLiteral<Function<org.jclouds.profitbricks.domain.Location, Location>>() {
+ }).to(LocationToLocation.class);
+
+ bind(new TypeLiteral<Function<DataCenter, Location>>() {
+ }).to(DataCenterToLocation.class);
+
+ bind(new TypeLiteral<Function<Server, NodeMetadata>>() {
+ }).to(ServerToNodeMetadata.class);
+
+ bind(new TypeLiteral<Function<Provisionable, Image>>() {
+ }).to(ProvisionableToImage.class);
+
+ bind(new TypeLiteral<Function<Storage, Volume>>() {
+ }).to(StorageToVolume.class);
+
+ bind(new TypeLiteral<Function<Hardware, Hardware>>() {
+ }).to(Class.class.cast(IdentityFunction.class));
+ }
+
+ @Provides
+ @Singleton
+ @Named(POLL_PREDICATE_DATACENTER)
+ Predicate<String> provideWaitDataCenterUntilAvailablePredicate(
+ final ProfitBricksApi api, ComputeConstants constants) {
+ return Predicates2.retry(new ProvisioningStatusPollingPredicate(
+ api, ProvisioningStatusAware.DATACENTER, ProvisioningState.AVAILABLE),
+ constants.pollTimeout(), constants.pollPeriod(), constants.pollMaxPeriod(), TimeUnit.SECONDS);
+ }
+
+ @Provides
+ @Singleton
+ ProvisioningManager provideProvisioningManager(Closer closer) {
+ ProvisioningManager provisioningManager = new ProvisioningManager();
+ closer.addToClose(provisioningManager);
+
+ return provisioningManager;
+ }
+
+ @Singleton
+ public static class ComputeConstants {
+
+ @Inject
+ @Named(POLL_TIMEOUT)
+ private String pollTimeout;
+
+ @Inject
+ @Named(POLL_PERIOD)
+ private String pollPeriod;
+
+ @Inject
+ @Named(POLL_MAX_PERIOD)
+ private String pollMaxPeriod;
+
+ public long pollTimeout() {
+ return Long.parseLong(pollTimeout);
+ }
+
+ public long pollPeriod() {
+ return Long.parseLong(pollPeriod);
+ }
+
+ public long pollMaxPeriod() {
+ return Long.parseLong(pollMaxPeriod);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/DataCenterToLocation.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/DataCenterToLocation.java b/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/DataCenterToLocation.java
new file mode 100644
index 0000000..93fb3a0
--- /dev/null
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/DataCenterToLocation.java
@@ -0,0 +1,54 @@
+/*
+ * 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.jclouds.profitbricks.compute.function;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import org.jclouds.domain.Location;
+import org.jclouds.domain.LocationBuilder;
+import org.jclouds.domain.LocationScope;
+import org.jclouds.profitbricks.domain.DataCenter;
+
+import com.google.common.base.Function;
+import com.google.common.collect.ImmutableMap;
+import com.google.inject.Inject;
+
+public class DataCenterToLocation implements Function<DataCenter, Location> {
+
+ private final Function<org.jclouds.profitbricks.domain.Location, Location> fnRegion;
+
+ @Inject
+ DataCenterToLocation(Function<org.jclouds.profitbricks.domain.Location, Location> fnRegion) {
+ this.fnRegion = fnRegion;
+ }
+
+ @Override
+ public Location apply(DataCenter dataCenter) {
+ checkNotNull(dataCenter, "Null dataCenter");
+
+ LocationBuilder builder = new LocationBuilder()
+ .id(dataCenter.id())
+ .description(dataCenter.name())
+ .scope(LocationScope.ZONE)
+ .metadata(ImmutableMap.<String, Object>of(
+ "version", dataCenter.version(),
+ "state", dataCenter.state()));
+ if (dataCenter.location() != null)
+ builder.parent(fnRegion.apply(dataCenter.location()));
+ return builder.build();
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/LocationToLocation.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/LocationToLocation.java b/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/LocationToLocation.java
new file mode 100644
index 0000000..999069b
--- /dev/null
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/LocationToLocation.java
@@ -0,0 +1,47 @@
+/*
+ * 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.jclouds.profitbricks.compute.function;
+
+import org.jclouds.domain.LocationBuilder;
+import org.jclouds.domain.LocationScope;
+import org.jclouds.location.suppliers.all.JustProvider;
+import org.jclouds.profitbricks.domain.Location;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Iterables;
+import com.google.inject.Inject;
+
+public class LocationToLocation implements Function<Location, org.jclouds.domain.Location> {
+
+ private final JustProvider justProvider;
+
+ @Inject
+ LocationToLocation(JustProvider justProvider) {
+ this.justProvider = justProvider;
+ }
+
+ @Override
+ public org.jclouds.domain.Location apply(Location in) {
+ return new LocationBuilder()
+ .id(in.getId())
+ .description(in.getDescription())
+ .scope(LocationScope.REGION)
+ .parent(Iterables.getOnlyElement(justProvider.get()))
+ .build();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/ProvisionableToImage.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/ProvisionableToImage.java b/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/ProvisionableToImage.java
new file mode 100644
index 0000000..c5fcd78
--- /dev/null
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/ProvisionableToImage.java
@@ -0,0 +1,215 @@
+/*
+ * 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.jclouds.profitbricks.compute.function;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.regex.Pattern;
+
+import org.jclouds.compute.domain.Image;
+import org.jclouds.compute.domain.ImageBuilder;
+import org.jclouds.compute.domain.OperatingSystem;
+import org.jclouds.compute.domain.OsFamily;
+import org.jclouds.domain.Location;
+import org.jclouds.profitbricks.domain.OsType;
+import org.jclouds.profitbricks.domain.ProvisioningState;
+import org.jclouds.profitbricks.domain.Snapshot;
+import org.jclouds.profitbricks.domain.internal.Provisionable;
+
+import com.google.common.base.Function;
+import com.google.common.base.Strings;
+import com.google.inject.Inject;
+
+public class ProvisionableToImage implements Function<Provisionable, Image> {
+
+ private final ImageToImage fnImageToImage;
+ private final SnapshotToImage fnSnapshotToImage;
+
+ @Inject
+ ProvisionableToImage(Function<org.jclouds.profitbricks.domain.Location, Location> fnRegion) {
+ this.fnImageToImage = new ImageToImage(fnRegion);
+ this.fnSnapshotToImage = new SnapshotToImage(fnRegion);
+ }
+
+ @Override
+ public Image apply(Provisionable input) {
+ checkNotNull(input, "Cannot convert null input");
+
+ if (input instanceof org.jclouds.profitbricks.domain.Image)
+ return fnImageToImage.apply((org.jclouds.profitbricks.domain.Image) input);
+
+ else if (input instanceof Snapshot)
+ return fnSnapshotToImage.apply((Snapshot) input);
+
+ else
+ throw new UnsupportedOperationException("No implementation found for provisionable of concrete type '"
+ + input.getClass().getCanonicalName() + "'");
+ }
+
+ private static OsFamily mapOsFamily(OsType osType) {
+ if (osType == null)
+ return OsFamily.UNRECOGNIZED;
+ switch (osType) {
+ case WINDOWS:
+ return OsFamily.WINDOWS;
+ case LINUX:
+ return OsFamily.LINUX;
+ case UNRECOGNIZED:
+ case OTHER:
+ default:
+ return OsFamily.UNRECOGNIZED;
+ }
+ }
+
+ private static class ImageToImage implements Function<org.jclouds.profitbricks.domain.Image, Image> {
+
+ private static final Pattern HAS_NUMBERS = Pattern.compile(".*\\d+.*");
+
+ private final Function<org.jclouds.profitbricks.domain.Location, Location> fnRegion;
+
+ ImageToImage(Function<org.jclouds.profitbricks.domain.Location, Location> fnRegion) {
+ this.fnRegion = fnRegion;
+ }
+
+ @Override
+ public Image apply(org.jclouds.profitbricks.domain.Image from) {
+ String desc = from.name();
+ OsFamily osFamily = parseOsFamily(desc, from.osType());
+
+ OperatingSystem os = OperatingSystem.builder()
+ .description(osFamily.value())
+ .family(osFamily)
+ .version(parseVersion(desc))
+ .is64Bit(is64Bit(desc, from.type()))
+ .build();
+
+ return new ImageBuilder()
+ .ids(from.id())
+ .name(desc)
+ .location(fnRegion.apply(from.location()))
+ .status(Image.Status.AVAILABLE)
+ .operatingSystem(os)
+ .build();
+ }
+
+ private OsFamily parseOsFamily(String from, OsType fallbackValue) {
+ if (from != null)
+ try {
+ // ProfitBricks images names are usually in format:
+ // [osType]-[version]-[subversion]-..-[date-created]
+ String desc = from.toUpperCase().split("-")[0];
+ OsFamily osFamily = OsFamily.fromValue(desc);
+ checkArgument(osFamily != OsFamily.UNRECOGNIZED);
+
+ return osFamily;
+ } catch (Exception ex) {
+ // do nothing
+ }
+ return mapOsFamily(fallbackValue);
+ }
+
+ private String parseVersion(String from) {
+ if (from != null) {
+ String[] split = from.toLowerCase().split("-");
+ if (split.length >= 2) {
+ int i = 1; // usually on second token
+ String version = split[i];
+ while (!HAS_NUMBERS.matcher(version).matches())
+ version = split[++i];
+ return version;
+ }
+ }
+ return "";
+ }
+
+ private boolean is64Bit(String from, org.jclouds.profitbricks.domain.Image.Type type) {
+ switch (type) {
+ case CDROM:
+ if (!Strings.isNullOrEmpty(from))
+ return from.matches("x86_64|amd64");
+ case HDD: // HDD provided by ProfitBricks are always 64-bit
+ default:
+ return true;
+ }
+ }
+ }
+
+ private static class SnapshotToImage implements Function<Snapshot, Image> {
+
+ private final Function<org.jclouds.profitbricks.domain.Location, Location> fnRegion;
+
+ SnapshotToImage(Function<org.jclouds.profitbricks.domain.Location, Location> fnRegion) {
+ this.fnRegion = fnRegion;
+ }
+
+ @Override
+ public Image apply(Snapshot from) {
+ String textToParse = from.name() + from.description();
+ OsFamily osFamily = parseOsFamily(textToParse, from.osType());
+
+ OperatingSystem os = OperatingSystem.builder()
+ .description(osFamily.value())
+ .family(osFamily)
+ .is64Bit(true)
+ .version("00.00")
+ .build();
+
+ return new ImageBuilder()
+ .ids(from.id())
+ .name(from.name())
+ .description(from.description())
+ .location(fnRegion.apply(from.location()))
+ .status(mapStatus(from.state()))
+ .operatingSystem(os)
+ .build();
+ }
+
+ private OsFamily parseOsFamily(String text, OsType fallbackValue) {
+ if (text != null)
+ try {
+ // Attempt parsing OsFamily by scanning name and description
+ // @see ProfitBricksComputeServiceAdapter#L190
+ OsFamily[] families = OsFamily.values();
+ for (OsFamily family : families)
+ if (text.contains(family.value()))
+ return family;
+ } catch (Exception ex) {
+ // do nothing
+ }
+ return mapOsFamily(fallbackValue);
+ }
+
+ static Image.Status mapStatus(ProvisioningState state) {
+ if (state == null)
+ return Image.Status.UNRECOGNIZED;
+ switch (state) {
+ case AVAILABLE:
+ return Image.Status.AVAILABLE;
+ case DELETED:
+ return Image.Status.DELETED;
+ case ERROR:
+ return Image.Status.ERROR;
+ case INACTIVE:
+ case INPROCESS:
+ return Image.Status.PENDING;
+ default:
+ return Image.Status.UNRECOGNIZED;
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/ServerToNodeMetadata.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/ServerToNodeMetadata.java b/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/ServerToNodeMetadata.java
new file mode 100644
index 0000000..9a8d551
--- /dev/null
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/ServerToNodeMetadata.java
@@ -0,0 +1,180 @@
+/*
+ * 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.jclouds.profitbricks.compute.function;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Predicates.not;
+import static org.jclouds.profitbricks.domain.OsType.LINUX;
+import static org.jclouds.profitbricks.domain.OsType.WINDOWS;
+import static org.jclouds.profitbricks.domain.Server.Status.BLOCKED;
+import static org.jclouds.profitbricks.domain.Server.Status.CRASHED;
+import static org.jclouds.profitbricks.domain.Server.Status.PAUSED;
+import static org.jclouds.profitbricks.domain.Server.Status.RUNNING;
+import static org.jclouds.profitbricks.domain.Server.Status.SHUTDOWN;
+import static org.jclouds.profitbricks.domain.Server.Status.SHUTOFF;
+
+import java.util.List;
+import java.util.Set;
+
+import org.jclouds.compute.domain.Hardware;
+import org.jclouds.compute.domain.HardwareBuilder;
+import org.jclouds.compute.domain.NodeMetadata;
+import org.jclouds.compute.domain.NodeMetadataBuilder;
+import org.jclouds.compute.domain.OperatingSystem;
+import org.jclouds.compute.domain.OsFamily;
+import org.jclouds.compute.domain.Processor;
+import org.jclouds.compute.domain.Volume;
+import org.jclouds.domain.Location;
+import org.jclouds.profitbricks.domain.Nic;
+import org.jclouds.profitbricks.domain.OsType;
+import org.jclouds.profitbricks.domain.Server;
+import org.jclouds.profitbricks.domain.Storage;
+import org.jclouds.util.InetAddresses2.IsPrivateIPAddress;
+
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.base.Supplier;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.inject.Inject;
+
+import org.jclouds.collect.Memoized;
+import org.jclouds.compute.functions.GroupNamingConvention;
+
+public class ServerToNodeMetadata implements Function<Server, NodeMetadata> {
+
+ private final Function<Storage, Volume> fnVolume;
+ private final Supplier<Set<? extends Location>> locationSupply;
+ private final Function<List<Nic>, List<String>> fnCollectIps;
+
+ private final GroupNamingConvention groupNamingConvention;
+
+ @Inject
+ ServerToNodeMetadata(Function<Storage, Volume> fnVolume,
+ @Memoized Supplier<Set<? extends Location>> locationsSupply,
+ GroupNamingConvention.Factory groupNamingConvention) {
+ this.fnVolume = fnVolume;
+ this.locationSupply = locationsSupply;
+ this.groupNamingConvention = groupNamingConvention.createWithoutPrefix();
+ this.fnCollectIps = new Function<List<Nic>, List<String>>() {
+
+ @Override
+ public List<String> apply(List<Nic> in) {
+ List<String> ips = Lists.newArrayListWithExpectedSize(in.size());
+ for (Nic nic : in)
+ ips.addAll(nic.ips());
+ return ips;
+ }
+ };
+ }
+
+ @Override
+ public NodeMetadata apply(final Server server) {
+ checkNotNull(server, "Null server");
+
+ // Map fetched dataCenterId with actual populated object
+ Location location = null;
+ if (server.dataCenter() != null)
+ location = Iterables.find(locationSupply.get(), new Predicate<Location>() {
+
+ @Override
+ public boolean apply(Location t) {
+ return t.getId().equals(server.dataCenter().id());
+ }
+ });
+
+ float size = 0f;
+ List<Volume> volumes = Lists.newArrayList();
+ List<Storage> storages = server.storages();
+ if (storages != null)
+ for (Storage storage : storages) {
+ size += storage.size();
+ volumes.add(fnVolume.apply(storage));
+ }
+
+ // Build hardware
+ String id = String.format("cpu=%d,ram=%d,disk=%.0f", server.cores(), server.ram(), size);
+ Hardware hardware = new HardwareBuilder()
+ .ids(id)
+ .name(id)
+ .ram(server.ram())
+ .processor(new Processor(server.cores(), 1d))
+ .hypervisor("kvm")
+ .volumes(volumes)
+ .location(location)
+ .build();
+
+ // Collect ips
+ List<String> addresses = fnCollectIps.apply(server.nics());
+
+ // Build node
+ NodeMetadataBuilder nodeBuilder = new NodeMetadataBuilder();
+ nodeBuilder.ids(server.id())
+ .group(groupNamingConvention.extractGroup(server.name()))
+ .hostname(server.hostname())
+ .name(server.name())
+ .backendStatus(server.state().toString())
+ .status(mapStatus(server.status()))
+ .hardware(hardware)
+ .operatingSystem(mapOsType(server.osType()))
+ .location(location)
+ .privateAddresses(Iterables.filter(addresses, IsPrivateIPAddress.INSTANCE))
+ .publicAddresses(Iterables.filter(addresses, not(IsPrivateIPAddress.INSTANCE)));
+
+ return nodeBuilder.build();
+ }
+
+ static NodeMetadata.Status mapStatus(Server.Status status) {
+ if (status == null)
+ return NodeMetadata.Status.UNRECOGNIZED;
+ switch (status) {
+ case SHUTDOWN:
+ case SHUTOFF:
+ case PAUSED:
+ return NodeMetadata.Status.SUSPENDED;
+ case RUNNING:
+ return NodeMetadata.Status.RUNNING;
+ case BLOCKED:
+ return NodeMetadata.Status.PENDING;
+ case CRASHED:
+ return NodeMetadata.Status.ERROR;
+ default:
+ return NodeMetadata.Status.UNRECOGNIZED;
+ }
+ }
+
+ static OperatingSystem mapOsType(OsType osType) {
+ if (osType != null)
+ switch (osType) {
+ case WINDOWS:
+ return OperatingSystem.builder()
+ .description(OsFamily.WINDOWS.value())
+ .family(OsFamily.WINDOWS)
+ .build();
+ case LINUX:
+ return OperatingSystem.builder()
+ .description(OsFamily.LINUX.value())
+ .family(OsFamily.LINUX)
+ .build();
+ }
+ return OperatingSystem.builder()
+ .description(OsFamily.UNRECOGNIZED.value())
+ .family(OsFamily.UNRECOGNIZED)
+ .build();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/StorageToVolume.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/StorageToVolume.java b/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/StorageToVolume.java
new file mode 100644
index 0000000..5557bca
--- /dev/null
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/StorageToVolume.java
@@ -0,0 +1,47 @@
+/*
+ * 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.jclouds.profitbricks.compute.function;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import org.jclouds.compute.domain.Volume;
+import org.jclouds.compute.domain.VolumeBuilder;
+import org.jclouds.profitbricks.domain.Storage;
+
+import com.google.common.base.Function;
+
+public class StorageToVolume implements Function<Storage, Volume> {
+
+ @Override
+ public Volume apply(Storage storage) {
+ checkNotNull(storage, "Null storage");
+
+ String device = "";
+ if (storage.deviceNumber() != null)
+ device = storage.deviceNumber().toString();
+
+ return new VolumeBuilder()
+ .id(storage.id())
+ .size(storage.size())
+ .bootDevice(storage.bootDevice())
+ .device(device)
+ .durable(true)
+ .type(Volume.Type.LOCAL)
+ .build();
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusPollingPredicate.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusPollingPredicate.java b/profitbricks/src/main/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusPollingPredicate.java
index f38abad..41c3e93 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusPollingPredicate.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusPollingPredicate.java
@@ -22,6 +22,7 @@ import org.jclouds.profitbricks.ProfitBricksApi;
import org.jclouds.profitbricks.domain.ProvisioningState;
import com.google.common.base.Predicate;
+import org.jclouds.rest.ResourceNotFoundException;
/**
* A custom predicate for waiting until a virtual resource satisfies the given expected status
@@ -45,19 +46,24 @@ public class ProvisioningStatusPollingPredicate implements Predicate<String> {
@Override
public boolean apply(String input) {
checkNotNull(input, "Virtual item id can't be null.");
- switch (domain) {
- case DATACENTER:
- return expect == api.dataCenterApi().getDataCenterState(input);
- case SERVER:
- return expect == api.serverApi().getServer(input).state();
- case STORAGE:
- return expect == api.storageApi().getStorage(input).state();
- case NIC:
- return expect == api.nicApi().getNic(input).state();
- case SNAPSHOT:
- return expect == api.snapshotApi().getSnapshot(input).state();
- default:
- throw new IllegalArgumentException("Unknown domain '" + domain + "'");
+ try {
+ switch (domain) {
+ case DATACENTER:
+ return expect == api.dataCenterApi().getDataCenterState(input);
+ case SERVER:
+ return expect == api.serverApi().getServer(input).state();
+ case STORAGE:
+ return expect == api.storageApi().getStorage(input).state();
+ case NIC:
+ return expect == api.nicApi().getNic(input).state();
+ case SNAPSHOT:
+ return expect == api.snapshotApi().getSnapshot(input).state();
+ default:
+ throw new IllegalArgumentException("Unknown domain '" + domain + "'");
+ }
+ } catch (ResourceNotFoundException ex) {
+ // After provisioning, a node might still not be "fetchable" via API
+ return false;
}
}
[2/4] jclouds-labs git commit: JCLOUDS-702: JClouds ProfitBricks
provider - ComputeServiceAdapter
Posted by na...@apache.org.
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/BaseStorageResponseHandler.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/BaseStorageResponseHandler.java b/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/BaseStorageResponseHandler.java
index cb61e79..9026592 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/BaseStorageResponseHandler.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/BaseStorageResponseHandler.java
@@ -19,11 +19,9 @@ package org.jclouds.profitbricks.http.parser.storage;
import java.util.Date;
import java.util.List;
-import org.jclouds.date.DateCodec;
-
import com.google.inject.Inject;
-import org.jclouds.date.DateCodecFactory;
+import org.jclouds.date.DateService;
import org.jclouds.profitbricks.domain.ProvisioningState;
import org.jclouds.profitbricks.domain.Storage;
import org.jclouds.profitbricks.domain.Storage.BusType;
@@ -33,20 +31,20 @@ import com.google.common.collect.Lists;
public abstract class BaseStorageResponseHandler<T> extends BaseProfitBricksResponseHandler<T> {
- protected final DateCodec dateCodec;
+ protected final DateService dateService;
protected Storage.Builder builder;
protected List<String> serverIds;
@Inject
- BaseStorageResponseHandler(DateCodecFactory dateCodec) {
- this.dateCodec = dateCodec.iso8601();
+ BaseStorageResponseHandler(DateService dateService) {
+ this.dateService = dateService;
this.builder = Storage.builder();
this.serverIds = Lists.newArrayList();
}
protected final Date textToIso8601Date() {
- return dateCodec.toDate(textToStringValue());
+ return dateService.iso8601DateOrSecondsDateParse(textToStringValue());
}
@Override
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/StorageInfoResponseHandler.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/StorageInfoResponseHandler.java b/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/StorageInfoResponseHandler.java
index 2bc1ed6..ae667ca 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/StorageInfoResponseHandler.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/StorageInfoResponseHandler.java
@@ -17,7 +17,8 @@
package org.jclouds.profitbricks.http.parser.storage;
import com.google.inject.Inject;
-import org.jclouds.date.DateCodecFactory;
+
+import org.jclouds.date.DateService;
import org.jclouds.profitbricks.domain.Storage;
import org.xml.sax.SAXException;
@@ -26,8 +27,8 @@ public class StorageInfoResponseHandler extends BaseStorageResponseHandler<Stora
private boolean done = false;
@Inject
- StorageInfoResponseHandler(DateCodecFactory dateCodec) {
- super(dateCodec);
+ StorageInfoResponseHandler(DateService dateService) {
+ super(dateService);
}
@Override
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/StorageListResponseHandler.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/StorageListResponseHandler.java b/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/StorageListResponseHandler.java
index 572f761..3048f66 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/StorageListResponseHandler.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/StorageListResponseHandler.java
@@ -16,22 +16,22 @@
*/
package org.jclouds.profitbricks.http.parser.storage;
-import com.google.common.collect.Lists;
-import com.google.inject.Inject;
-
import java.util.List;
-import org.jclouds.date.DateCodecFactory;
+import org.jclouds.date.DateService;
import org.jclouds.profitbricks.domain.Storage;
import org.xml.sax.SAXException;
+import com.google.inject.Inject;
+import com.google.common.collect.Lists;
+
public class StorageListResponseHandler extends BaseStorageResponseHandler<List<Storage>> {
private List<Storage> storages;
@Inject
- StorageListResponseHandler(DateCodecFactory dateCodec) {
- super(dateCodec);
+ StorageListResponseHandler(DateService dateService) {
+ super(dateService);
this.storages = Lists.newArrayList();
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/util/Passwords.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/util/Passwords.java b/profitbricks/src/main/java/org/jclouds/profitbricks/util/Passwords.java
new file mode 100644
index 0000000..338f064
--- /dev/null
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/util/Passwords.java
@@ -0,0 +1,64 @@
+/*
+ * 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.jclouds.profitbricks.util;
+
+import java.util.Random;
+import java.util.regex.Pattern;
+
+import com.google.common.collect.ImmutableSet;
+
+public class Passwords {
+
+ private static final Random random = new Random();
+
+ private static final int MIN_CHAR = 8;
+ private static final int MAX_CHAR = 50;
+ private static final String PASSWORD_FORMAT = String.format(
+ "[a-zA-Z0-9][^iIloOwWyYzZ10]{%d,%d}", MIN_CHAR - 1, MAX_CHAR);
+ private static final Pattern PASSWORD_PATTERN = Pattern.compile(PASSWORD_FORMAT);
+
+ private static final ImmutableSet<Character> INVALID_CHARS = ImmutableSet.<Character>of(
+ 'i', 'I', 'l', 'o', 'O', 'w', 'W', 'y', 'Y', 'z', 'Z', '1', '0');
+
+ public static boolean isValidPassword(String password) {
+ return PASSWORD_PATTERN.matcher(password).matches();
+ }
+
+ public static String generate() {
+ int count = random.nextInt(MAX_CHAR - MIN_CHAR) + MIN_CHAR;
+
+ final char[] buffer = new char[count];
+
+ final int start = 'A';
+ final int end = 'z';
+ final int gap = end - start + 1;
+
+ while (count-- != 0) {
+ char ch = (char) (random.nextInt(gap) + start);
+ if ((isBetween(ch, start, 'Z') || isBetween(ch, 'a', end))
+ && !INVALID_CHARS.contains(ch))
+ buffer[count] = ch;
+ else
+ count++;
+ }
+ return new String(buffer);
+ }
+
+ private static boolean isBetween(char ch, int start, int end) {
+ return ch >= start && ch <= end;
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/binder/snapshot/CreateSnapshotRequestBinderTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/binder/snapshot/CreateSnapshotRequestBinderTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/binder/snapshot/CreateSnapshotRequestBinderTest.java
index dda2ed6..42a1ad9 100644
--- a/profitbricks/src/test/java/org/jclouds/profitbricks/binder/snapshot/CreateSnapshotRequestBinderTest.java
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/binder/snapshot/CreateSnapshotRequestBinderTest.java
@@ -37,11 +37,11 @@ public class CreateSnapshotRequestBinderTest {
}
private final String expectedPayload
- = (" <ws:createSnapshot>\n"
- + "<request>\n"
- + "<storageId>123-1233-1324</storageId>\n"
- + "<description>describing the snapshot</description>\n"
- + "<snapshotName>snapshot name</snapshotName>\n"
- + "</request>\n"
- + "</ws:createSnapshot>").replaceAll("\\s+", "");
+ = (" <ws:createSnapshot>\n"
+ + "<request>\n"
+ + "<storageId>123-1233-1324</storageId>\n"
+ + "<description>describing the snapshot</description>\n"
+ + "<snapshotName>snapshot name</snapshotName>\n"
+ + "</request>\n"
+ + "</ws:createSnapshot>").replaceAll("\\s+", "");
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/binder/snapshot/RollbackSnapshotRequestBinderTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/binder/snapshot/RollbackSnapshotRequestBinderTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/binder/snapshot/RollbackSnapshotRequestBinderTest.java
index 206cd79..e1ba061 100644
--- a/profitbricks/src/test/java/org/jclouds/profitbricks/binder/snapshot/RollbackSnapshotRequestBinderTest.java
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/binder/snapshot/RollbackSnapshotRequestBinderTest.java
@@ -29,9 +29,9 @@ public class RollbackSnapshotRequestBinderTest {
RollbackSnapshotRequestBinder binder = new RollbackSnapshotRequestBinder();
Snapshot.Request.RollbackPayload payload = Snapshot.Request.rollbackBuilder()
- .snapshotId("snapshot-id")
- .storageId("storage-id")
- .build();
+ .snapshotId("snapshot-id")
+ .storageId("storage-id")
+ .build();
String actual = binder.createPayload(payload);
assertNotNull(actual, "Binder returned null payload");
@@ -39,9 +39,9 @@ public class RollbackSnapshotRequestBinderTest {
}
private final String expectedPayload = "<ws:rollbackSnapshot>"
- + "<request>"
- + "<snapshotId>snapshot-id</snapshotId>"
- + "<storageId>storage-id</storageId>"
- + "</request>"
- + "</ws:rollbackSnapshot>".replaceAll("\\s", "");
+ + "<request>"
+ + "<snapshotId>snapshot-id</snapshotId>"
+ + "<storageId>storage-id</storageId>"
+ + "</request>"
+ + "</ws:rollbackSnapshot>".replaceAll("\\s", "");
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/compute/ProfitBricksComputeServiceAdapterLiveTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/compute/ProfitBricksComputeServiceAdapterLiveTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/compute/ProfitBricksComputeServiceAdapterLiveTest.java
new file mode 100644
index 0000000..83540a5
--- /dev/null
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/compute/ProfitBricksComputeServiceAdapterLiveTest.java
@@ -0,0 +1,74 @@
+/*
+ * 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.jclouds.profitbricks.compute;
+
+import org.jclouds.compute.domain.NodeMetadata;
+import org.testng.annotations.Test;
+
+import org.jclouds.compute.internal.BaseComputeServiceLiveTest;
+import org.jclouds.sshj.config.SshjSshClientModule;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.inject.Module;
+import org.jclouds.compute.domain.ExecResponse;
+import org.jclouds.logging.config.LoggingModule;
+import org.jclouds.logging.slf4j.config.SLF4JLoggingModule;
+
+@Test(groups = "live", singleThreaded = true, testName = "ProfitBricksComputeServiceAdapterLiveTest")
+public class ProfitBricksComputeServiceAdapterLiveTest extends BaseComputeServiceLiveTest {
+
+ public ProfitBricksComputeServiceAdapterLiveTest() {
+ provider = "profitbricks";
+ }
+
+ @Override
+ protected Module getSshModule() {
+ return new SshjSshClientModule();
+ }
+
+ @Override
+ protected LoggingModule getLoggingModule() {
+ return new SLF4JLoggingModule();
+ }
+
+ @Override
+ public void testOptionToNotBlock() throws Exception {
+ // ProfitBricks implementation intentionally blocks until the node is 'AVAILABLE'
+ }
+
+ @Override
+ protected void checkTagsInNodeEquals(NodeMetadata node, ImmutableSet<String> tags) {
+ // ProfitBricks doesn't support tags
+ }
+
+ @Override
+ protected void checkUserMetadataContains(NodeMetadata node, ImmutableMap<String, String> userMetadata) {
+ // ProfitBricks doesn't support user metadata
+ }
+
+ @Override
+ protected void checkResponseEqualsHostname(ExecResponse execResponse, NodeMetadata node1) {
+ // ProfitBricks doesn't support hostname
+ }
+
+ @Override
+ protected void checkOsMatchesTemplate(NodeMetadata node) {
+ // Not enough description from API to match template
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/compute/ProfitBricksTemplateBuilderLiveTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/compute/ProfitBricksTemplateBuilderLiveTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/compute/ProfitBricksTemplateBuilderLiveTest.java
new file mode 100644
index 0000000..eff7b01
--- /dev/null
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/compute/ProfitBricksTemplateBuilderLiveTest.java
@@ -0,0 +1,37 @@
+/*
+ * 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.jclouds.profitbricks.compute;
+
+import java.util.Set;
+
+import com.google.common.collect.ImmutableSet;
+import org.jclouds.compute.internal.BaseTemplateBuilderLiveTest;
+import org.testng.annotations.Test;
+
+@Test(groups = "live", testName = "ProfitBricksTemplateBuilderLiveTest")
+public class ProfitBricksTemplateBuilderLiveTest extends BaseTemplateBuilderLiveTest {
+
+ public ProfitBricksTemplateBuilderLiveTest() {
+ this.provider = "profitbricks";
+ }
+
+ @Override
+ protected Set<String> getIso3166Codes() {
+ return ImmutableSet.of();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/compute/concurrent/ProvisioningManagerTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/compute/concurrent/ProvisioningManagerTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/compute/concurrent/ProvisioningManagerTest.java
new file mode 100644
index 0000000..dd115cc
--- /dev/null
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/compute/concurrent/ProvisioningManagerTest.java
@@ -0,0 +1,118 @@
+/*
+ * 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.jclouds.profitbricks.compute.concurrent;
+
+import static com.google.common.util.concurrent.Uninterruptibles.sleepUninterruptibly;
+import static java.util.logging.Logger.getAnonymousLogger;
+import static org.testng.Assert.assertEquals;
+
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.testng.annotations.Test;
+
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.base.Supplier;
+import com.google.common.base.Suppliers;
+import com.google.common.base.Throwables;
+
+@Test(groups = "unit", testName = "ProvisioningManagerTest")
+public class ProvisioningManagerTest {
+
+ @Test
+ public void testProvision() throws IOException {
+ ProvisioningManager manager = new ProvisioningManager();
+ AtomicInteger completedJobs = new AtomicInteger(0);
+
+ try {
+ for (int i = 0; i < 5; i++) {
+ manager.provision(new MockJob(200, "slow", completedJobs));
+ manager.provision(new MockJob(0, "fast", completedJobs));
+ manager.provision(new MockJob(100, "normal", completedJobs));
+ }
+ } finally {
+ manager.close();
+ }
+
+ assertEquals(completedJobs.get(), 15);
+ }
+
+ @Test
+ public void testProvisionInterrupted() {
+ ProvisioningManager manager = new ProvisioningManager();
+ AtomicInteger completedJobs = new AtomicInteger(0);
+
+ manager.provision(new ShutdownExecutorJob(manager, completedJobs));
+ manager.provision(new MockJob(0, "rejected", completedJobs));
+
+ assertEquals(completedJobs.get(), 1);
+ }
+
+ private static class MockJob extends ProvisioningJob {
+
+ private final long delay;
+ private final AtomicInteger completedJobs;
+
+ public MockJob(long delay, String group, AtomicInteger completedJobs) {
+ super(sleepPredicate(delay), group, Suppliers.ofInstance((Object) 0));
+ this.delay = delay;
+ this.completedJobs = completedJobs;
+ }
+
+ @Override
+ public Integer call() throws Exception {
+ getAnonymousLogger().info("ProvisioningManagerTest: Starting " + this);
+ super.call();
+ getAnonymousLogger().info("ProvisioningManagerTest: Completed " + this);
+ return completedJobs.incrementAndGet();
+ }
+
+ @Override
+ public String toString() {
+ return "MockJob [id=" + hashCode() + ", group=" + getGroup() + ", delay=" + delay + "]";
+ }
+ }
+
+ private static class ShutdownExecutorJob extends ProvisioningJob {
+
+ public ShutdownExecutorJob(final ProvisioningManager manager, final AtomicInteger completedJobs) {
+ super(Predicates.<String>alwaysTrue(), "shutdown", new Supplier<Object>() {
+ @Override
+ public Integer get() {
+ try {
+ manager.close();
+ return completedJobs.incrementAndGet();
+ } catch (IOException ex) {
+ throw Throwables.propagate(ex);
+ }
+ }
+ });
+ }
+ }
+
+ private static Predicate<String> sleepPredicate(final long delay) {
+ return new Predicate<String>() {
+ @Override
+ public boolean apply(String input) {
+ sleepUninterruptibly(delay, TimeUnit.MILLISECONDS);
+ return true;
+ }
+ };
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/DataCenterToLocationTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/DataCenterToLocationTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/DataCenterToLocationTest.java
new file mode 100644
index 0000000..7dcf69c
--- /dev/null
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/DataCenterToLocationTest.java
@@ -0,0 +1,77 @@
+/*
+ * 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.jclouds.profitbricks.compute.function;
+
+import static org.testng.Assert.assertEquals;
+
+import java.net.URI;
+
+import org.jclouds.domain.Location;
+import org.jclouds.domain.LocationBuilder;
+import org.jclouds.domain.LocationScope;
+import org.jclouds.location.suppliers.all.JustProvider;
+import org.jclouds.profitbricks.ProfitBricksProviderMetadata;
+import org.jclouds.profitbricks.domain.DataCenter;
+import org.jclouds.profitbricks.domain.ProvisioningState;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Suppliers;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+
+@Test(groups = "unit", testName = "DataCenterToLocationTest")
+public class DataCenterToLocationTest {
+
+ private DataCenterToLocation fnLocation;
+ private LocationToLocation fnRegion;
+
+ @BeforeTest
+ public void setup() {
+ ProfitBricksProviderMetadata metadata = new ProfitBricksProviderMetadata();
+ JustProvider justProvider = new JustProvider(metadata.getId(), Suppliers.<URI>ofInstance(
+ URI.create(metadata.getEndpoint())), ImmutableSet.<String>of());
+ this.fnRegion = new LocationToLocation(justProvider);
+ this.fnLocation = new DataCenterToLocation(fnRegion);
+ }
+
+ @Test
+ public void testDataCenterToLocation() {
+ DataCenter dataCenter = DataCenter.builder()
+ .id("12345678-abcd-efgh-ijkl-987654321000")
+ .version(10)
+ .name("JClouds-DC")
+ .state(ProvisioningState.AVAILABLE)
+ .location(org.jclouds.profitbricks.domain.Location.DE_FRA)
+ .build();
+
+ Location actual = fnLocation.apply(dataCenter);
+
+ Location expected = new LocationBuilder()
+ .id(dataCenter.id())
+ .description(dataCenter.name())
+ .scope(LocationScope.ZONE)
+ .metadata(ImmutableMap.<String, Object>of(
+ "version", dataCenter.version(),
+ "state", dataCenter.state()))
+ .parent(fnRegion.apply(org.jclouds.profitbricks.domain.Location.DE_FRA))
+ .build();
+
+ assertEquals(actual, expected);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/LocationToLocationTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/LocationToLocationTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/LocationToLocationTest.java
new file mode 100644
index 0000000..3967cf5
--- /dev/null
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/LocationToLocationTest.java
@@ -0,0 +1,62 @@
+/*
+ * 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.jclouds.profitbricks.compute.function;
+
+import static org.testng.Assert.assertEquals;
+
+import java.net.URI;
+
+import org.jclouds.domain.LocationBuilder;
+import org.jclouds.domain.LocationScope;
+import org.jclouds.location.suppliers.all.JustProvider;
+import org.jclouds.profitbricks.ProfitBricksProviderMetadata;
+import org.jclouds.profitbricks.domain.Location;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Suppliers;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
+
+@Test(groups = "unit", testName = "LocationToLocationTest")
+public class LocationToLocationTest {
+
+ private LocationToLocation fnRegion;
+ private JustProvider justProvider;
+
+ @BeforeTest
+ public void setup() {
+ ProfitBricksProviderMetadata metadata = new ProfitBricksProviderMetadata();
+ this.justProvider = new JustProvider(metadata.getId(), Suppliers.<URI>ofInstance(
+ URI.create(metadata.getEndpoint())), ImmutableSet.<String>of());
+ this.fnRegion = new LocationToLocation(justProvider);
+ }
+
+ @Test
+ public void testLocationToLocation() {
+ Location[] locations = Location.values();
+ for (Location loc : locations) {
+ org.jclouds.domain.Location actual = fnRegion.apply(loc);
+ org.jclouds.domain.Location expected = new LocationBuilder()
+ .id(loc.getId()).description(loc.getDescription()).scope(LocationScope.REGION)
+ .parent(Iterables.getOnlyElement(justProvider.get())).build();
+
+ assertEquals(actual, expected);
+ }
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/ProvisionableToImageTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/ProvisionableToImageTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/ProvisionableToImageTest.java
new file mode 100644
index 0000000..d114efb
--- /dev/null
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/ProvisionableToImageTest.java
@@ -0,0 +1,260 @@
+/*
+ * 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.jclouds.profitbricks.compute.function;
+
+import static org.testng.Assert.assertEquals;
+
+import java.net.URI;
+import java.util.Date;
+
+import org.jclouds.compute.domain.Image;
+import org.jclouds.compute.domain.ImageBuilder;
+import org.jclouds.compute.domain.OperatingSystem;
+import org.jclouds.compute.domain.OsFamily;
+import org.jclouds.location.suppliers.all.JustProvider;
+import org.jclouds.profitbricks.ProfitBricksProviderMetadata;
+import org.jclouds.profitbricks.domain.Location;
+import org.jclouds.profitbricks.domain.OsType;
+import org.jclouds.profitbricks.domain.ProvisioningState;
+import org.jclouds.profitbricks.domain.Snapshot;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Suppliers;
+import com.google.common.collect.ImmutableSet;
+
+@Test(groups = "unit", testName = "ProvisionableToImageTest")
+public class ProvisionableToImageTest {
+
+ private ProvisionableToImage fnImage;
+ private LocationToLocation fnRegion;
+
+ @BeforeTest
+ public void setup() {
+ ProfitBricksProviderMetadata metadata = new ProfitBricksProviderMetadata();
+ JustProvider justProvider = new JustProvider(metadata.getId(), Suppliers.<URI>ofInstance(
+ URI.create(metadata.getEndpoint())), ImmutableSet.<String>of());
+ this.fnRegion = new LocationToLocation(justProvider);
+ this.fnImage = new ProvisionableToImage(fnRegion);
+ }
+
+ @Test
+ public void testImageToImage() {
+ org.jclouds.profitbricks.domain.Image image
+ = org.jclouds.profitbricks.domain.Image.builder()
+ .isBootable(true)
+ .isCpuHotPlug(true)
+ .isCpuHotUnPlug(false)
+ .isDiscVirtioHotPlug(true)
+ .isDiscVirtioHotUnPlug(true)
+ .id("5ad99c9e-9166-11e4-9d74-52540066fee9")
+ .name("Ubuntu-14.04-LTS-server-2015-01-01")
+ .size(2048f)
+ .type(org.jclouds.profitbricks.domain.Image.Type.HDD)
+ .location(Location.US_LAS)
+ .isNicHotPlug(true)
+ .isNicHotUnPlug(true)
+ .osType(OsType.LINUX)
+ .isPublic(true)
+ .isRamHotPlug(true)
+ .isRamHotUnPlug(false)
+ .isWriteable(true)
+ .build();
+
+ Image actual = fnImage.apply(image);
+
+ Image expected = new ImageBuilder()
+ .ids(image.id())
+ .name(image.name())
+ .location(fnRegion.apply(Location.US_LAS))
+ .status(Image.Status.AVAILABLE)
+ .operatingSystem(OperatingSystem.builder()
+ .description("UBUNTU")
+ .family(OsFamily.UBUNTU)
+ .version("14.04")
+ .is64Bit(false)
+ .build())
+ .build();
+
+ assertEquals(actual, expected);
+ }
+
+ @Test
+ public void testImageDescriptionParsing() {
+ org.jclouds.profitbricks.domain.Image image1
+ = org.jclouds.profitbricks.domain.Image.builder()
+ .id("f4742db0-9160-11e4-9d74-52540066fee9")
+ .name("Fedora-19-server-2015-01-01")
+ .size(2048f)
+ .type(org.jclouds.profitbricks.domain.Image.Type.HDD)
+ .location(Location.DE_FRA)
+ .osType(OsType.LINUX)
+ .build();
+
+ Image actual1 = fnImage.apply(image1);
+
+ Image expected1 = new ImageBuilder()
+ .ids(image1.id())
+ .name(image1.name())
+ .location(fnRegion.apply(image1.location()))
+ .status(Image.Status.AVAILABLE)
+ .operatingSystem(OperatingSystem.builder()
+ .description("FEDORA")
+ .family(OsFamily.FEDORA)
+ .version("7")
+ .is64Bit(true)
+ .build())
+ .build();
+
+ assertEquals(actual1, expected1);
+
+ org.jclouds.profitbricks.domain.Image image2
+ = org.jclouds.profitbricks.domain.Image.builder()
+ .id("457bf707-d5d1-11e3-8b4f-52540066fee9")
+ .name("clearos-community-6.5.0-x86_64.iso")
+ .size(2048f)
+ .type(org.jclouds.profitbricks.domain.Image.Type.CDROM)
+ .location(Location.DE_FKB)
+ .osType(OsType.LINUX)
+ .build();
+
+ Image actual2 = fnImage.apply(image2);
+
+ Image expected2 = new ImageBuilder()
+ .ids(image2.id())
+ .name(image2.name())
+ .location(fnRegion.apply(image2.location()))
+ .status(Image.Status.AVAILABLE)
+ .operatingSystem(OperatingSystem.builder()
+ .description("UNRECOGNIZED")
+ .family(OsFamily.UNRECOGNIZED)
+ .version("6.5.0")
+ .is64Bit(true)
+ .build())
+ .build();
+
+ assertEquals(actual2, expected2);
+
+ org.jclouds.profitbricks.domain.Image image3
+ = org.jclouds.profitbricks.domain.Image.builder()
+ .id("e54af701-53b8-11e3-8f17-52540066fee9")
+ .name("windows-2008-r2-server-setup.iso")
+ .size(2048f)
+ .type(org.jclouds.profitbricks.domain.Image.Type.CDROM)
+ .location(Location.US_LASDEV)
+ .osType(OsType.WINDOWS)
+ .build();
+
+ Image actual3 = fnImage.apply(image3);
+
+ Image expected3 = new ImageBuilder()
+ .ids(image3.id())
+ .name(image3.name())
+ .location(fnRegion.apply(image3.location()))
+ .status(Image.Status.AVAILABLE)
+ .operatingSystem(OperatingSystem.builder()
+ .description("WINDOWS")
+ .family(OsFamily.WINDOWS)
+ .version("2008")
+ .is64Bit(false)
+ .build())
+ .build();
+
+ assertEquals(actual3, expected3);
+
+ }
+
+ @Test
+ public void testSnapshotToImage() {
+ Snapshot snapshot1 = Snapshot.builder()
+ .isBootable(true)
+ .isCpuHotPlug(true)
+ .isCpuHotUnPlug(false)
+ .isDiscVirtioHotPlug(true)
+ .isDiscVirtioHotUnPlug(true)
+ .id("qswdefrg-qaws-qaws-defe-rgrgdsvcxbrh")
+ .name("placeholder-snapshot-04/13/2015")
+ .description("Created from \"placeholder\" in Data Center \"sbx-computeservice\"")
+ .size(2048f)
+ .location(Location.US_LAS)
+ .isNicHotPlug(true)
+ .isNicHotUnPlug(true)
+ .osType(OsType.LINUX)
+ .isRamHotPlug(true)
+ .isRamHotUnPlug(false)
+ .creationTime(new Date(2015, 4, 13))
+ .lastModificationTime(new Date())
+ .state(ProvisioningState.AVAILABLE)
+ .build();
+
+ Image actual1 = fnImage.apply(snapshot1);
+
+ Image expected1 = new ImageBuilder()
+ .ids(snapshot1.id())
+ .name(snapshot1.name())
+ .location(fnRegion.apply(Location.US_LAS))
+ .status(Image.Status.AVAILABLE)
+ .operatingSystem(OperatingSystem.builder()
+ .description(snapshot1.description())
+ .family(OsFamily.LINUX)
+ .is64Bit(true)
+ .build())
+ .build();
+
+ assertEquals(actual1, expected1);
+
+ Snapshot snapshot2 = Snapshot.builder()
+ .isBootable(true)
+ .isCpuHotPlug(true)
+ .isCpuHotUnPlug(false)
+ .isDiscVirtioHotPlug(true)
+ .isDiscVirtioHotUnPlug(true)
+ .id("d80bf9c0-ce6e-4283-9ea4-2906635f6137")
+ .name("jclouds-ubuntu14.10-template")
+ .description("Created from \"jclouds-ubuntu14.10 Storage\" in Data Center \"jclouds-computeservice\"")
+ .size(10240f)
+ .location(Location.DE_FKB)
+ .isNicHotPlug(true)
+ .isNicHotUnPlug(true)
+ .osType(OsType.LINUX)
+ .isRamHotPlug(true)
+ .isRamHotUnPlug(false)
+ .creationTime(new Date(2015, 4, 13))
+ .lastModificationTime(new Date())
+ .state(ProvisioningState.INPROCESS)
+ .build();
+
+ Image actual2 = fnImage.apply(snapshot2);
+
+ Image expected2 = new ImageBuilder()
+ .ids(snapshot2.id())
+ .name(snapshot2.name())
+ .location(fnRegion.apply(Location.DE_FKB))
+ .status(Image.Status.PENDING)
+ .operatingSystem(OperatingSystem.builder()
+ .description("ubuntu")
+ .family(OsFamily.UBUNTU)
+ .is64Bit(true)
+ .version("00.00")
+ .build())
+ .build();
+
+ assertEquals(actual2, expected2);
+ assertEquals(actual2.getOperatingSystem(), expected2.getOperatingSystem());
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/ServerToNodeMetadataTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/ServerToNodeMetadataTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/ServerToNodeMetadataTest.java
new file mode 100644
index 0000000..5fba62b
--- /dev/null
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/ServerToNodeMetadataTest.java
@@ -0,0 +1,184 @@
+/*
+ * 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.jclouds.profitbricks.compute.function;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+
+import java.util.Set;
+
+import org.jclouds.compute.domain.HardwareBuilder;
+import org.jclouds.compute.domain.NodeMetadata;
+import org.jclouds.compute.domain.NodeMetadataBuilder;
+import org.jclouds.compute.domain.OperatingSystem;
+import org.jclouds.compute.domain.OsFamily;
+import org.jclouds.compute.domain.Processor;
+import org.jclouds.compute.domain.Volume;
+import org.jclouds.compute.domain.VolumeBuilder;
+import org.jclouds.compute.functions.GroupNamingConvention;
+import org.jclouds.domain.Location;
+import org.jclouds.domain.LocationBuilder;
+import org.jclouds.domain.LocationScope;
+import org.jclouds.profitbricks.ProfitBricksApiMetadata;
+import org.jclouds.profitbricks.domain.AvailabilityZone;
+import org.jclouds.profitbricks.domain.DataCenter;
+import org.jclouds.profitbricks.domain.Nic;
+import org.jclouds.profitbricks.domain.OsType;
+import org.jclouds.profitbricks.domain.ProvisioningState;
+import org.jclouds.profitbricks.domain.Server;
+import org.jclouds.profitbricks.domain.Storage;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Supplier;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.inject.AbstractModule;
+import com.google.inject.Guice;
+import com.google.inject.name.Names;
+
+@Test(groups = "unit", testName = "ServerToNodeMetadataTest")
+public class ServerToNodeMetadataTest {
+
+ private ServerToNodeMetadata fnNodeMetadata;
+
+ @BeforeTest
+ public void setup() {
+ Supplier<Set<? extends Location>> locationsSupply = new Supplier<Set<? extends Location>>() {
+
+ @Override
+ public Set<? extends Location> get() {
+ return ImmutableSet.of(
+ new LocationBuilder()
+ .id("12345678-abcd-efgh-ijkl-987654321000")
+ .description("JClouds-DC")
+ .scope(LocationScope.REGION)
+ .metadata(ImmutableMap.<String, Object>of(
+ "version", "10",
+ "state", "AVAILABLE"))
+ .parent(new LocationBuilder()
+ .id("de/fra")
+ .description("Germany, Frankfurt (M)")
+ .scope(LocationScope.PROVIDER)
+ .build())
+ .build());
+ }
+ };
+
+ GroupNamingConvention.Factory namingConvention = Guice.createInjector(new AbstractModule() {
+ @Override
+ protected void configure() {
+ Names.bindProperties(binder(), new ProfitBricksApiMetadata().getDefaultProperties());
+ }
+ }).getInstance(GroupNamingConvention.Factory.class);
+
+ this.fnNodeMetadata = new ServerToNodeMetadata(new StorageToVolume(), locationsSupply, namingConvention);
+ }
+
+ @Test
+ public void testServerToNodeMetadata() {
+ Server server = Server.builder()
+ .dataCenter(DataCenter.builder()
+ .id("12345678-abcd-efgh-ijkl-987654321000").version(10)
+ .build())
+ .id("qwertyui-qwer-qwer-qwer-qwertyyuiiop")
+ .name("mock-facebook-node")
+ .cores(4)
+ .ram(4096)
+ .hasInternetAccess(true)
+ .state(ProvisioningState.AVAILABLE)
+ .status(Server.Status.RUNNING)
+ .osType(OsType.LINUX)
+ .availabilityZone(AvailabilityZone.AUTO)
+ .isCpuHotPlug(true)
+ .isRamHotPlug(true)
+ .isNicHotPlug(true)
+ .isNicHotUnPlug(true)
+ .isDiscVirtioHotPlug(true)
+ .isDiscVirtioHotUnPlug(true)
+ .storages(ImmutableList.<Storage>of(
+ Storage.builder()
+ .bootDevice(true)
+ .busType(Storage.BusType.VIRTIO)
+ .deviceNumber(1)
+ .size(40f)
+ .id("qswdefrg-qaws-qaws-defe-rgrgdsvcxbrh")
+ .name("facebook-storage")
+ .build()
+ )
+ )
+ .nics(ImmutableList.<Nic>of(
+ Nic.builder()
+ .id("qwqwqwqw-wewe-erer-rtrt-tytytytytyty")
+ .lanId(1)
+ .dataCenterId("12345678-abcd-efgh-ijkl-987654321000")
+ .internetAccess(true)
+ .serverId("qwertyui-qwer-qwer-qwer-qwertyyuiiop")
+ .macAddress("02:01:09:cd:f0:b0")
+ .ip("173.252.120.6")
+ .build()
+ )
+ )
+ .build();
+
+ NodeMetadata expected = fnNodeMetadata.apply(server);
+ assertNotNull(expected);
+
+ NodeMetadata actual = new NodeMetadataBuilder()
+ .group("mock")
+ .ids(server.id())
+ .name(server.name())
+ .backendStatus("AVAILABLE")
+ .status(NodeMetadata.Status.RUNNING)
+ .hardware(new HardwareBuilder()
+ .ids("cpu=4,ram=4096,disk=40")
+ .name("cpu=4,ram=4096,disk=40")
+ .ram(server.ram())
+ .processor(new Processor(server.cores(), 1d))
+ .hypervisor("kvm")
+ .volume(new VolumeBuilder()
+ .bootDevice(true)
+ .size(40f)
+ .id("qswdefrg-qaws-qaws-defe-rgrgdsvcxbrh")
+ .durable(true)
+ .type(Volume.Type.LOCAL)
+ .build())
+ .build())
+ .operatingSystem(new OperatingSystem.Builder()
+ .description(OsFamily.LINUX.value())
+ .family(OsFamily.LINUX)
+ .build())
+ .location(new LocationBuilder()
+ .id("12345678-abcd-efgh-ijkl-987654321000")
+ .description("JClouds-DC")
+ .scope(LocationScope.REGION)
+ .metadata(ImmutableMap.<String, Object>of(
+ "version", "10",
+ "state", "AVAILABLE"))
+ .parent(new LocationBuilder()
+ .id("de/fra")
+ .description("Germany, Frankfurt (M)")
+ .scope(LocationScope.PROVIDER)
+ .build())
+ .build())
+ .publicAddresses(ImmutableList.<String>of("173.252.120.6"))
+ .build();
+
+ assertEquals(actual, expected);
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/StorageToVolumeTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/StorageToVolumeTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/StorageToVolumeTest.java
new file mode 100644
index 0000000..8a782e7
--- /dev/null
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/StorageToVolumeTest.java
@@ -0,0 +1,61 @@
+/*
+ * 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.jclouds.profitbricks.compute.function;
+
+import static org.testng.Assert.assertEquals;
+
+import org.jclouds.compute.domain.Volume;
+import org.jclouds.compute.domain.VolumeBuilder;
+import org.jclouds.profitbricks.domain.Storage;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+
+@Test(groups = "unit", testName = "StorageToVolumeTest")
+public class StorageToVolumeTest {
+
+ private StorageToVolume fnVolume;
+
+ @BeforeTest
+ public void setup() {
+ this.fnVolume = new StorageToVolume();
+ }
+
+ @Test
+ public void testStorageToVolume() {
+ Storage storage = Storage.builder()
+ .id("qswdefrg-qaws-qaws-defe-rgrgdsvcxbrh")
+ .size(40)
+ .name("hdd-1")
+ .busType(Storage.BusType.VIRTIO)
+ .bootDevice(true)
+ .deviceNumber(1)
+ .build();
+
+ Volume actual = fnVolume.apply(storage);
+
+ Volume expected = new VolumeBuilder()
+ .id(storage.id())
+ .size(40f)
+ .bootDevice(true)
+ .device("1")
+ .type(Volume.Type.LOCAL)
+ .durable(true)
+ .build();
+
+ assertEquals(actual, expected);
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusPollingPredicateTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusPollingPredicateTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusPollingPredicateTest.java
index 857a8ff..690412a 100644
--- a/profitbricks/src/test/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusPollingPredicateTest.java
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusPollingPredicateTest.java
@@ -136,10 +136,10 @@ public class ProvisioningStatusPollingPredicateTest extends BaseProfitBricksMock
server.shutdown();
}
}
-
+
@Test
- public void testSnapshotPredicate() throws Exception{
- MockWebServer server = mockWebServer();
+ public void testSnapshotPredicate() throws Exception {
+ MockWebServer server = mockWebServer();
byte[] payloadInProcess = payloadFromResource("/snapshot/snapshot-state-inprocess.xml");
byte[] payloadAvailable = payloadFromResource("/snapshot/snapshot.xml");
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/features/DrivesApiLiveTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/features/DrivesApiLiveTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/features/DrivesApiLiveTest.java
index 20cf5f8..8e84746 100644
--- a/profitbricks/src/test/java/org/jclouds/profitbricks/features/DrivesApiLiveTest.java
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/features/DrivesApiLiveTest.java
@@ -16,16 +16,15 @@
*/
package org.jclouds.profitbricks.features;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertNotNull;
+
import java.util.List;
import org.jclouds.profitbricks.BaseProfitBricksLiveTest;
import org.jclouds.profitbricks.domain.Drive;
import org.jclouds.profitbricks.domain.Image;
import org.jclouds.profitbricks.domain.Server;
-
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertNotNull;
-
import org.testng.annotations.Test;
import com.google.common.collect.Iterables;
@@ -67,7 +66,7 @@ public class DrivesApiLiveTest extends BaseProfitBricksLiveTest {
assertNotNull(requestId);
}
- @Test (dependsOnMethods = "addRomDriveToServerTest")
+ @Test(dependsOnMethods = "addRomDriveToServerTest")
public void removeRomDriveFromServerTest() {
String requestId = api.drivesApi().removeRomDriveFromServer(imageId, serverId);
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/features/FirewallApiLiveTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/features/FirewallApiLiveTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/features/FirewallApiLiveTest.java
index cd38494..ddf94d4 100644
--- a/profitbricks/src/test/java/org/jclouds/profitbricks/features/FirewallApiLiveTest.java
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/features/FirewallApiLiveTest.java
@@ -16,7 +16,6 @@
*/
package org.jclouds.profitbricks.features;
-import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import java.util.List;
@@ -41,6 +40,7 @@ import org.testng.annotations.AfterClass;
import org.testng.annotations.Test;
import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableList;
@Test(groups = "live", testName = "FirewallApiLiveTest", singleThreaded = true)
public class FirewallApiLiveTest extends BaseProfitBricksLiveTest {
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/features/IpBlockApiLiveTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/features/IpBlockApiLiveTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/features/IpBlockApiLiveTest.java
index 227cfc7..e7c2eda 100644
--- a/profitbricks/src/test/java/org/jclouds/profitbricks/features/IpBlockApiLiveTest.java
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/features/IpBlockApiLiveTest.java
@@ -47,7 +47,7 @@ public class IpBlockApiLiveTest extends BaseProfitBricksLiveTest {
@Test
public void testReservePublicIpBlock() {
- newIpBlock = api.ipBlockApi().reservePublicIpBlock("2", Location.US_LAS.value());
+ newIpBlock = api.ipBlockApi().reservePublicIpBlock("2", Location.US_LAS.getId());
assertNotNull(newIpBlock);
assertNotNull(newIpBlock.ips());
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/features/IpBlockApiMockTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/features/IpBlockApiMockTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/features/IpBlockApiMockTest.java
index b0d3356..e948e76 100644
--- a/profitbricks/src/test/java/org/jclouds/profitbricks/features/IpBlockApiMockTest.java
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/features/IpBlockApiMockTest.java
@@ -122,9 +122,9 @@ public class IpBlockApiMockTest extends BaseProfitBricksMockTest {
String blockSize = "2";
Location location = Location.US_LAS;
- String content = "<ws:reservePublicIpBlock><request><blockSize>" + blockSize + "</blockSize><location>" + location.value() + "</location></request></ws:reservePublicIpBlock>";
+ String content = "<ws:reservePublicIpBlock><request><blockSize>" + blockSize + "</blockSize><location>" + location.getId() + "</location></request></ws:reservePublicIpBlock>";
try {
- IpBlock ipBlock = api.reservePublicIpBlock(blockSize, location.value());
+ IpBlock ipBlock = api.reservePublicIpBlock(blockSize, location.getId());
assertRequestHasCommonProperties(server.takeRequest(), content);
assertNotNull(ipBlock);
} finally {
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/features/LoadbalancerApiLiveTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/features/LoadbalancerApiLiveTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/features/LoadbalancerApiLiveTest.java
index a79f9ae..d5e64cf 100644
--- a/profitbricks/src/test/java/org/jclouds/profitbricks/features/LoadbalancerApiLiveTest.java
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/features/LoadbalancerApiLiveTest.java
@@ -128,7 +128,7 @@ public class LoadbalancerApiLiveTest extends BaseProfitBricksLiveTest {
@AfterClass(alwaysRun = true)
public void testDeleteLoadBalancer() {
- boolean result = api.loadBalancerApi().deleteLoadbalancer(loadBalancerID);
+ boolean result = api.loadBalancerApi().deleteLoadBalancer(loadBalancerID);
Assert.assertTrue(result);
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/features/LoadbalancerApiMockTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/features/LoadbalancerApiMockTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/features/LoadbalancerApiMockTest.java
index f91083a..1271244 100644
--- a/profitbricks/src/test/java/org/jclouds/profitbricks/features/LoadbalancerApiMockTest.java
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/features/LoadbalancerApiMockTest.java
@@ -273,7 +273,7 @@ public class LoadbalancerApiMockTest extends BaseProfitBricksMockTest {
String content = "<ws:deleteLoadBalancer><loadBalancerId>" + loadBalancerId + "</loadBalancerId></ws:deleteLoadBalancer>";
try {
- boolean done = api.deleteLoadbalancer(loadBalancerId);
+ boolean done = api.deleteLoadBalancer(loadBalancerId);
assertRequestHasCommonProperties(server.takeRequest(), content);
assertTrue(done);
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/features/SnapshotApiLiveTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/features/SnapshotApiLiveTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/features/SnapshotApiLiveTest.java
index 957555b..6c50f2a 100644
--- a/profitbricks/src/test/java/org/jclouds/profitbricks/features/SnapshotApiLiveTest.java
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/features/SnapshotApiLiveTest.java
@@ -89,20 +89,20 @@ public class SnapshotApiLiveTest extends BaseProfitBricksLiveTest {
String newName = "new name";
api.snapshotApi().updateSnapshot(Snapshot.Request.updatingBuilder()
- .snapshotId(snapshotId)
- .description("new description")
- .name(newName)
- .bootable(true)
- .osType(OsType.LINUX)
- .cpuHotplug(true)
- .cpuHotunplug(true)
- .discVirtioHotplug(true)
- .discVirtioHotunplug(true)
- .nicHotplug(true)
- .nicHotunplug(true)
- .ramHotplug(true)
- .ramHotunplug(true)
- .build());
+ .snapshotId(snapshotId)
+ .description("new description")
+ .name(newName)
+ .bootable(true)
+ .osType(OsType.LINUX)
+ .isCpuHotPlug(true)
+ .isCpuHotUnPlug(true)
+ .isDiscVirtioHotPlug(true)
+ .isDiscVirtioHotUnPlug(true)
+ .isNicHotPlug(true)
+ .isNicHotUnPlug(true)
+ .isRamHotPlug(true)
+ .isRamHotUnPlug(true)
+ .build());
Snapshot snapshot = api.snapshotApi().getSnapshot(snapshotId);
@@ -126,7 +126,7 @@ public class SnapshotApiLiveTest extends BaseProfitBricksLiveTest {
private void initializeWaitPredicate() {
this.snapshotWaitingPredicate = Predicates2.retry(
- new ProvisioningStatusPollingPredicate(api, ProvisioningStatusAware.SNAPSHOT, ProvisioningState.AVAILABLE),
- 2l * 60l, 2l, TimeUnit.SECONDS);
+ new ProvisioningStatusPollingPredicate(api, ProvisioningStatusAware.SNAPSHOT, ProvisioningState.AVAILABLE),
+ 2l * 60l, 2l, TimeUnit.SECONDS);
}
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/features/SnapshotApiMockTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/features/SnapshotApiMockTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/features/SnapshotApiMockTest.java
index 80342b0..528f893 100644
--- a/profitbricks/src/test/java/org/jclouds/profitbricks/features/SnapshotApiMockTest.java
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/features/SnapshotApiMockTest.java
@@ -47,13 +47,13 @@ public class SnapshotApiMockTest extends BaseProfitBricksMockTest {
SnapshotApi api = pbApi.snapshotApi();
try {
- List<Snapshot> snapshots = api.getAllSnapshots();
- assertRequestHasCommonProperties(server.takeRequest(), "<ws:getAllSnapshots/>");
- assertNotNull(snapshots);
- assertEquals(snapshots.size(), 2);
+ List<Snapshot> snapshots = api.getAllSnapshots();
+ assertRequestHasCommonProperties(server.takeRequest(), "<ws:getAllSnapshots/>");
+ assertNotNull(snapshots);
+ assertEquals(snapshots.size(), 2);
} finally {
- pbApi.close();
- server.shutdown();
+ pbApi.close();
+ server.shutdown();
}
}
@@ -66,12 +66,12 @@ public class SnapshotApiMockTest extends BaseProfitBricksMockTest {
SnapshotApi api = pbApi.snapshotApi();
try {
- List<Snapshot> snapshots = api.getAllSnapshots();
- assertRequestHasCommonProperties(server.takeRequest());
- assertTrue(snapshots.isEmpty());
+ List<Snapshot> snapshots = api.getAllSnapshots();
+ assertRequestHasCommonProperties(server.takeRequest());
+ assertTrue(snapshots.isEmpty());
} finally {
- pbApi.close();
- server.shutdown();
+ pbApi.close();
+ server.shutdown();
}
}
@@ -88,13 +88,13 @@ public class SnapshotApiMockTest extends BaseProfitBricksMockTest {
String content = "<ws:getSnapshot><snapshotId>" + id + "</snapshotId></ws:getSnapshot>";
try {
- Snapshot snapshot = api.getSnapshot(id);
- assertRequestHasCommonProperties(server.takeRequest(), content);
- assertNotNull(snapshot);
- assertEquals(snapshot.id(), id);
+ Snapshot snapshot = api.getSnapshot(id);
+ assertRequestHasCommonProperties(server.takeRequest(), content);
+ assertNotNull(snapshot);
+ assertEquals(snapshot.id(), id);
} finally {
- pbApi.close();
- server.shutdown();
+ pbApi.close();
+ server.shutdown();
}
}
@@ -108,12 +108,12 @@ public class SnapshotApiMockTest extends BaseProfitBricksMockTest {
String id = "random-non-existing-id";
try {
- Snapshot snapshot = api.getSnapshot(id);
- assertRequestHasCommonProperties(server.takeRequest());
- assertNull(snapshot);
+ Snapshot snapshot = api.getSnapshot(id);
+ assertRequestHasCommonProperties(server.takeRequest());
+ assertNull(snapshot);
} finally {
- pbApi.close();
- server.shutdown();
+ pbApi.close();
+ server.shutdown();
}
}
@@ -128,27 +128,27 @@ public class SnapshotApiMockTest extends BaseProfitBricksMockTest {
String storageId = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee";
String content = "<ws:createSnapshot>"
- + "<request>"
- + "<storageId>" + storageId + "</storageId>"
- + "<description>description</description>"
- + "<snapshotName>snapshot-name</snapshotName>"
- + "</request>"
- + "</ws:createSnapshot>";
+ + "<request>"
+ + "<storageId>" + storageId + "</storageId>"
+ + "<description>description</description>"
+ + "<snapshotName>snapshot-name</snapshotName>"
+ + "</request>"
+ + "</ws:createSnapshot>";
try {
- Snapshot snapshot = api.createSnapshot(
- Snapshot.Request.creatingBuilder()
- .storageId(storageId)
- .description("description")
- .name("snapshot-name")
- .build());
- assertRequestHasCommonProperties(server.takeRequest(), content);
- assertNotNull(snapshot.id());
- assertEquals(snapshot.id(), "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee");
+ Snapshot snapshot = api.createSnapshot(
+ Snapshot.Request.creatingBuilder()
+ .storageId(storageId)
+ .description("description")
+ .name("snapshot-name")
+ .build());
+ assertRequestHasCommonProperties(server.takeRequest(), content);
+ assertNotNull(snapshot.id());
+ assertEquals(snapshot.id(), "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee");
} finally {
- pbApi.close();
- server.shutdown();
+ pbApi.close();
+ server.shutdown();
}
}
@@ -163,35 +163,43 @@ public class SnapshotApiMockTest extends BaseProfitBricksMockTest {
String snapshotId = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee";
String content = "<ws:updateSnapshot>"
- + "<request>"
- + "<snapshotId>" + snapshotId + "</snapshotId>"
- + "<description>description</description>"
- + "<snapshotName>snapshot-name</snapshotName>"
- + "<bootable>false</bootable>"
- + "<osType>LINUX</osType>"
- + "<cpuHotPlug>false</cpuHotPlug>"
- + "<cpuHotUnPlug>false</cpuHotUnPlug>"
- + "<ramHotPlug>false</ramHotPlug>"
- + "<ramHotUnPlug>false</ramHotUnPlug>"
- + "<nicHotPlug>false</nicHotPlug>"
- + "<nicHotUnPlug>false</nicHotUnPlug>"
- + "<discVirtioHotPlug>false</discVirtioHotPlug>"
- + "<discVirtioHotUnPlug>false</discVirtioHotUnPlug>"
- + "</request>"
- + "</ws:updateSnapshot>";
+ + "<request>"
+ + "<snapshotId>" + snapshotId + "</snapshotId>"
+ + "<description>description</description>"
+ + "<snapshotName>snapshot-name</snapshotName>"
+ + "<bootable>false</bootable>"
+ + "<osType>LINUX</osType>"
+ + "<cpuHotPlug>false</cpuHotPlug>"
+ + "<cpuHotUnPlug>false</cpuHotUnPlug>"
+ + "<ramHotPlug>false</ramHotPlug>"
+ + "<ramHotUnPlug>false</ramHotUnPlug>"
+ + "<nicHotPlug>false</nicHotPlug>"
+ + "<nicHotUnPlug>false</nicHotUnPlug>"
+ + "<discVirtioHotPlug>false</discVirtioHotPlug>"
+ + "<discVirtioHotUnPlug>false</discVirtioHotUnPlug>"
+ + "</request>"
+ + "</ws:updateSnapshot>";
try {
- String requestId = api.updateSnapshot(Snapshot.Request.updatingBuilder()
- .snapshotId(snapshotId)
- .name("snapshot-name")
- .description("description")
- .osType(OsType.LINUX)
- .build());
- assertRequestHasCommonProperties(server.takeRequest(), content);
- assertNotNull(requestId);
+ String requestId = api.updateSnapshot(Snapshot.Request.updatingBuilder()
+ .snapshotId(snapshotId)
+ .name("snapshot-name")
+ .description("description")
+ .osType(OsType.LINUX)
+ .isCpuHotPlug(false)
+ .isCpuHotUnPlug(false)
+ .isDiscVirtioHotPlug(false)
+ .isDiscVirtioHotUnPlug(false)
+ .isNicHotPlug(false)
+ .isNicHotUnPlug(false)
+ .isRamHotPlug(false)
+ .isRamHotUnPlug(false)
+ .build());
+ assertRequestHasCommonProperties(server.takeRequest(), content);
+ assertNotNull(requestId);
} finally {
- pbApi.close();
- server.shutdown();
+ pbApi.close();
+ server.shutdown();
}
}
@@ -207,12 +215,12 @@ public class SnapshotApiMockTest extends BaseProfitBricksMockTest {
String content = "<ws:deleteSnapshot><snapshotId>" + snapshotId + "</snapshotId></ws:deleteSnapshot>";
try {
- boolean result = api.deleteSnapshot(snapshotId);
- assertRequestHasCommonProperties(server.takeRequest(), content);
- assertTrue(result);
+ boolean result = api.deleteSnapshot(snapshotId);
+ assertRequestHasCommonProperties(server.takeRequest(), content);
+ assertTrue(result);
} finally {
- pbApi.close();
- server.shutdown();
+ pbApi.close();
+ server.shutdown();
}
}
@@ -226,12 +234,12 @@ public class SnapshotApiMockTest extends BaseProfitBricksMockTest {
String id = "random-non-existing-id";
try {
- boolean result = api.deleteSnapshot(id);
- assertRequestHasCommonProperties(server.takeRequest());
- Assert.assertFalse(result);
+ boolean result = api.deleteSnapshot(id);
+ assertRequestHasCommonProperties(server.takeRequest());
+ Assert.assertFalse(result);
} finally {
- pbApi.close();
- server.shutdown();
+ pbApi.close();
+ server.shutdown();
}
}
@@ -248,15 +256,15 @@ public class SnapshotApiMockTest extends BaseProfitBricksMockTest {
String content = "<ws:rollbackSnapshot><request><snapshotId>" + snapshotId + "</snapshotId><storageId>" + storageId + "</storageId></request></ws:rollbackSnapshot>";
try {
- String result = api.rollbackSnapshot(Snapshot.Request.rollbackBuilder()
- .snapshotId(snapshotId)
- .storageId(storageId)
- .build());
- assertRequestHasCommonProperties(server.takeRequest(), content);
- assertNotNull(result);
+ String result = api.rollbackSnapshot(Snapshot.Request.rollbackBuilder()
+ .snapshotId(snapshotId)
+ .storageId(storageId)
+ .build());
+ assertRequestHasCommonProperties(server.takeRequest(), content);
+ assertNotNull(result);
} finally {
- pbApi.close();
- server.shutdown();
+ pbApi.close();
+ server.shutdown();
}
}
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/datacenter/DataCenterInfoResponseHandlerTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/datacenter/DataCenterInfoResponseHandlerTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/datacenter/DataCenterInfoResponseHandlerTest.java
index e2ee87e..16b2504 100644
--- a/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/datacenter/DataCenterInfoResponseHandlerTest.java
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/datacenter/DataCenterInfoResponseHandlerTest.java
@@ -19,8 +19,7 @@ package org.jclouds.profitbricks.http.parser.datacenter;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
-import org.jclouds.date.DateCodec;
-import org.jclouds.date.DateCodecFactory;
+import org.jclouds.date.DateService;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.profitbricks.domain.AvailabilityZone;
import org.jclouds.profitbricks.domain.DataCenter;
@@ -44,8 +43,8 @@ public class DataCenterInfoResponseHandlerTest extends BaseResponseHandlerTest<D
return factory.create(injector.getInstance(DataCenterInfoResponseHandler.class));
}
- protected DateCodecFactory createDateParser() {
- return injector.getInstance(DateCodecFactory.class);
+ protected DateService createDateParser() {
+ return injector.getInstance(DateService.class);
}
@Test
@@ -55,7 +54,7 @@ public class DataCenterInfoResponseHandlerTest extends BaseResponseHandlerTest<D
DataCenter actual = parser.parse(payloadFromResource("/datacenter/datacenter.xml"));
assertNotNull(actual, "Parsed content returned null");
- DateCodec dateParser = createDateParser().iso8601();
+ DateService dateParser = createDateParser();
DataCenter expected = DataCenter.builder()
.id("12345678-abcd-efgh-ijkl-987654321000")
@@ -65,6 +64,11 @@ public class DataCenterInfoResponseHandlerTest extends BaseResponseHandlerTest<D
.location(Location.US_LAS)
.servers(ImmutableList.<Server>of(
Server.builder()
+ .dataCenter(DataCenter.builder()
+ .id("12345678-abcd-efgh-ijkl-987654321000")
+ .version(10)
+ .build()
+ )
.id("qqqqqqqq-wwww-eeee-rrrr-tttttttttttt")
.name("jnode1")
.cores(4)
@@ -72,8 +76,8 @@ public class DataCenterInfoResponseHandlerTest extends BaseResponseHandlerTest<D
.hasInternetAccess(true)
.state(ProvisioningState.AVAILABLE)
.status(Server.Status.RUNNING)
- .creationTime(dateParser.toDate("2014-12-04T07:09:23.138Z"))
- .lastModificationTime(dateParser.toDate("2014-12-12T03:08:35.629Z"))
+ .creationTime(dateParser.iso8601DateOrSecondsDateParse("2014-12-04T07:09:23.138Z"))
+ .lastModificationTime(dateParser.iso8601DateOrSecondsDateParse("2014-12-12T03:08:35.629Z"))
.osType(OsType.LINUX)
.availabilityZone(AvailabilityZone.AUTO)
.isCpuHotPlug(true)
@@ -125,8 +129,8 @@ public class DataCenterInfoResponseHandlerTest extends BaseResponseHandlerTest<D
.size(40)
.name("jnode1-disk1")
.state(ProvisioningState.AVAILABLE)
- .creationTime(dateParser.toDate("2014-12-04T07:09:23.138Z"))
- .lastModificationTime(dateParser.toDate("2014-12-12T03:14:48.316Z"))
+ .creationTime(dateParser.iso8601DateOrSecondsDateParse("2014-12-04T07:09:23.138Z"))
+ .lastModificationTime(dateParser.iso8601DateOrSecondsDateParse("2014-12-12T03:14:48.316Z"))
.serverIds(ImmutableList.of(
"qqqqqqqq-wwww-eeee-rrrr-tttttttttttt"
))
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/image/ImageListResponseHandlerTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/image/ImageListResponseHandlerTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/image/ImageListResponseHandlerTest.java
index 7d0cb88..e954fb0 100644
--- a/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/image/ImageListResponseHandlerTest.java
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/image/ImageListResponseHandlerTest.java
@@ -91,7 +91,7 @@ public class ImageListResponseHandlerTest extends BaseResponseHandlerTest<List<I
.name("Debian-jessie-prerelease-server-2015-01-01")
.size(2048f)
.type(Image.Type.HDD)
- .location(Location.US_LAS_DEV)
+ .location(Location.US_LASDEV)
.isNicHotPlug(true)
.isNicHotUnPlug(true)
.osType(OsType.LINUX)
@@ -110,7 +110,7 @@ public class ImageListResponseHandlerTest extends BaseResponseHandlerTest<List<I
.name("Fedora-19-server-2015-01-01")
.size(2048f)
.type(Image.Type.HDD)
- .location(Location.US_LAS_DEV)
+ .location(Location.US_LASDEV)
.isNicHotPlug(true)
.isNicHotUnPlug(true)
.osType(OsType.LINUX)
@@ -129,7 +129,7 @@ public class ImageListResponseHandlerTest extends BaseResponseHandlerTest<List<I
.name("Ubuntu-12.04-LTS-server-2015-01-01")
.size(2048f)
.type(Image.Type.HDD)
- .location(Location.US_LAS_DEV)
+ .location(Location.US_LASDEV)
.isNicHotPlug(true)
.isNicHotUnPlug(true)
.osType(OsType.LINUX)
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/loadbalancer/LoadBalancerListResponseHandlerTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/loadbalancer/LoadBalancerListResponseHandlerTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/loadbalancer/LoadBalancerListResponseHandlerTest.java
index cec0999..eedfa50 100644
--- a/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/loadbalancer/LoadBalancerListResponseHandlerTest.java
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/loadbalancer/LoadBalancerListResponseHandlerTest.java
@@ -17,9 +17,9 @@
package org.jclouds.profitbricks.http.parser.loadbalancer;
import com.google.common.collect.ImmutableList;
+
import java.util.List;
-import org.jclouds.date.DateCodec;
-import org.jclouds.date.DateCodecFactory;
+
import org.jclouds.http.functions.ParseSax;
import org.jclouds.profitbricks.domain.Firewall;
import org.jclouds.profitbricks.domain.LoadBalancer;
@@ -27,8 +27,12 @@ import org.jclouds.profitbricks.domain.LoadBalancer.Algorithm;
import org.jclouds.profitbricks.domain.ProvisioningState;
import org.jclouds.profitbricks.domain.Server;
import org.jclouds.profitbricks.http.parser.BaseResponseHandlerTest;
+
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
+
+import org.jclouds.date.DateService;
+import org.jclouds.profitbricks.domain.DataCenter;
import org.testng.annotations.Test;
@Test(groups = "unit", testName = "LoadBalancerListResponseHandlerTest")
@@ -39,8 +43,8 @@ public class LoadBalancerListResponseHandlerTest extends BaseResponseHandlerTest
return factory.create(injector.getInstance(LoadBalancerListResponseHandler.class));
}
- protected DateCodecFactory createDateParser() {
- return injector.getInstance(DateCodecFactory.class);
+ protected DateService createDateParser() {
+ return injector.getInstance(DateService.class);
}
@Test
@@ -50,23 +54,68 @@ public class LoadBalancerListResponseHandlerTest extends BaseResponseHandlerTest
List<LoadBalancer> actual = parser.parse(payloadFromResource("/loadbalancer/loadbalancers.xml"));
assertNotNull(actual, "Parsed content returned null");
- DateCodec dateParser = createDateParser().iso8601();
+ DateService dateParser = createDateParser();
- List<LoadBalancer> expected = ImmutableList.<LoadBalancer>of(LoadBalancer.builder().id("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee").loadBalancerAlgorithm(Algorithm.ROUND_ROBIN).name("load-1234567890-name")
- .dataCenterId("datacenter-id").dataCenterVersion("datacenter-version").internetAccess(true).ip("192.168.0.1").lanId("lan-id").state(ProvisioningState.AVAILABLE).creationTime(dateParser.toDate("2014-12-04T07:09:23.138Z")).lastModificationTime(dateParser.toDate("2014-12-04T07:09:23.138Z"))
+ List<LoadBalancer> expected = ImmutableList.<LoadBalancer>of(
+ LoadBalancer.builder()
+ .id("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee")
+ .algorithm(Algorithm.ROUND_ROBIN)
+ .name("load-1234567890-name")
+ .dataCenter(DataCenter.builder()
+ .id("datacenter-id")
+ .version(4)
+ .build())
+ .internetAccess(true)
+ .ip("192.168.0.1")
+ .lanId("lan-id")
+ .state(ProvisioningState.AVAILABLE)
+ .creationTime(dateParser.iso8601DateOrSecondsDateParse("2014-12-04T07:09:23.138Z"))
+ .lastModificationTime(dateParser.iso8601DateOrSecondsDateParse("2014-12-04T07:09:23.138Z"))
.firewalls(ImmutableList.<Firewall>of(
- Firewall.builder().id("firewall-id").nicId("nic-id").active(false).state(ProvisioningState.AVAILABLE).build()
+ Firewall.builder()
+ .id("firewall-id")
+ .nicId("nic-id")
+ .active(false)
+ .state(ProvisioningState.AVAILABLE)
+ .build()
))
.balancedServers(ImmutableList.<Server>of(
- Server.builder().activate(true).balancedNicId("balanced-nic-id").id("server-id").name("server-name").build()
+ Server.builder()
+ .loadBalanced(true)
+ .balancedNicId("balanced-nic-id")
+ .id("server-id")
+ .name("server-name")
+ .build()
)).build(),
- LoadBalancer.builder().id("qqqqqqqq-wwww-rrrr-tttt-yyyyyyyyyyyy").loadBalancerAlgorithm(Algorithm.ROUND_ROBIN).name("load-balancer-name")
- .dataCenterId("datacenter-id").dataCenterVersion("datacenter-version").internetAccess(false).ip("192.168.0.1").lanId("lan-id").state(ProvisioningState.AVAILABLE).creationTime(dateParser.toDate("2014-12-04T07:09:23.138Z")).lastModificationTime(dateParser.toDate("2014-12-04T07:09:23.138Z"))
+ LoadBalancer.builder()
+ .id("qqqqqqqq-wwww-rrrr-tttt-yyyyyyyyyyyy")
+ .algorithm(Algorithm.ROUND_ROBIN)
+ .name("load-balancer-name")
+ .dataCenter(DataCenter.builder()
+ .id("datacenter-id")
+ .version(4)
+ .build())
+ .internetAccess(false)
+ .ip("192.168.0.1")
+ .lanId("lan-id")
+ .state(ProvisioningState.AVAILABLE)
+ .creationTime(dateParser.iso8601DateOrSecondsDateParse("2014-12-04T07:09:23.138Z"))
+ .lastModificationTime(dateParser.iso8601DateOrSecondsDateParse("2014-12-04T07:09:23.138Z"))
.firewalls(ImmutableList.<Firewall>of(
- Firewall.builder().id("firewall-id").nicId("nic-id").active(false).state(ProvisioningState.AVAILABLE).build()
+ Firewall.builder()
+ .id("firewall-id")
+ .nicId("nic-id")
+ .active(false)
+ .state(ProvisioningState.AVAILABLE)
+ .build()
))
.balancedServers(ImmutableList.<Server>of(
- Server.builder().activate(false).balancedNicId("balanced-nic-id").id("server-id").name("server-name").build()
+ Server.builder()
+ .loadBalanced(false)
+ .balancedNicId("balanced-nic-id")
+ .id("server-id")
+ .name("server-name")
+ .build()
))
.build()
);
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/loadbalancer/LoadBalancerResponseHandlerTest.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/loadbalancer/LoadBalancerResponseHandlerTest.java b/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/loadbalancer/LoadBalancerResponseHandlerTest.java
index 365383b..079c5c0 100644
--- a/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/loadbalancer/LoadBalancerResponseHandlerTest.java
+++ b/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/loadbalancer/LoadBalancerResponseHandlerTest.java
@@ -17,9 +17,9 @@
package org.jclouds.profitbricks.http.parser.loadbalancer;
import com.google.common.collect.Lists;
+
import java.util.List;
-import org.jclouds.date.DateCodec;
-import org.jclouds.date.DateCodecFactory;
+
import org.jclouds.http.functions.ParseSax;
import org.jclouds.profitbricks.domain.Firewall;
import org.jclouds.profitbricks.domain.LoadBalancer;
@@ -28,8 +28,12 @@ import org.jclouds.profitbricks.domain.ProvisioningState;
import org.jclouds.profitbricks.domain.Server;
import org.jclouds.profitbricks.domain.Storage;
import org.jclouds.profitbricks.http.parser.BaseResponseHandlerTest;
+
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
+
+import org.jclouds.date.DateService;
+import org.jclouds.profitbricks.domain.DataCenter;
import org.testng.annotations.Test;
@Test(groups = "unit", testName = "LoadBalancerResponseHandlerTest")
@@ -40,8 +44,8 @@ public class LoadBalancerResponseHandlerTest extends BaseResponseHandlerTest<Loa
return factory.create(injector.getInstance(LoadBalancerResponseHandler.class));
}
- protected DateCodecFactory createDateParser() {
- return injector.getInstance(DateCodecFactory.class);
+ protected DateService createDateParser() {
+ return injector.getInstance(DateService.class);
}
@Test
@@ -51,13 +55,13 @@ public class LoadBalancerResponseHandlerTest extends BaseResponseHandlerTest<Loa
LoadBalancer actual = parser.parse(payloadFromResource("/loadbalancer/loadbalancer.xml"));
assertNotNull(actual, "Parsed content returned null");
- DateCodec dateParser = createDateParser().iso8601();
+ DateService dateParser = createDateParser();
List<Storage> emptyStorages = Lists.newArrayList();
List<Server> balancedServers = Lists.newArrayList();
balancedServers.add(Server.builder()
- .activate(true)
+ .loadBalanced(true)
.balancedNicId("balanced-nic-id")
.id("server-id")
.name("server-name")
@@ -73,16 +77,18 @@ public class LoadBalancerResponseHandlerTest extends BaseResponseHandlerTest<Loa
LoadBalancer expected = LoadBalancer.builder()
.id("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee")
- .loadBalancerAlgorithm(Algorithm.ROUND_ROBIN)
+ .algorithm(Algorithm.ROUND_ROBIN)
.name("load-balancer-name")
- .dataCenterId("datacenter-id")
- .dataCenterVersion("datacenter-version")
+ .dataCenter(DataCenter.builder()
+ .id("datacenter-id")
+ .version(4)
+ .build())
.internetAccess(true)
.ip("192.168.0.1")
.lanId("lan-id")
.state(ProvisioningState.AVAILABLE)
- .creationTime(dateParser.toDate("2014-12-12T03:08:35.629Z"))
- .lastModificationTime(dateParser.toDate("2014-12-12T03:08:35.629Z"))
+ .creationTime(dateParser.iso8601DateOrSecondsDateParse("2014-12-12T03:08:35.629Z"))
+ .lastModificationTime(dateParser.iso8601DateOrSecondsDateParse("2014-12-12T03:08:35.629Z"))
.firewalls(firewalls)
.balancedServers(balancedServers)
.build();
[3/4] jclouds-labs git commit: JCLOUDS-702: JClouds ProfitBricks
provider - ComputeServiceAdapter
Posted by na...@apache.org.
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/config/ProfitBricksComputeProperties.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/config/ProfitBricksComputeProperties.java b/profitbricks/src/main/java/org/jclouds/profitbricks/config/ProfitBricksComputeProperties.java
new file mode 100644
index 0000000..19b0e53
--- /dev/null
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/config/ProfitBricksComputeProperties.java
@@ -0,0 +1,31 @@
+/*
+ * 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.jclouds.profitbricks.config;
+
+public class ProfitBricksComputeProperties {
+
+ public static final String POLL_PREDICATE_DATACENTER = "jclouds.profitbricks.predicate.datacenter";
+
+ public static final String POLL_TIMEOUT = "jclouds.profitbricks.poll.timeout";
+ public static final String POLL_PERIOD = "jclouds.profitbricks.operation.poll.initial-period";
+ public static final String POLL_MAX_PERIOD = "jclouds.profitbricks.operation.poll.max-period";
+
+ private ProfitBricksComputeProperties() {
+ throw new AssertionError("Intentionally unimplemented");
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Firewall.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Firewall.java b/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Firewall.java
index 6a3d5fa..2108bc4 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Firewall.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Firewall.java
@@ -17,20 +17,18 @@
package org.jclouds.profitbricks.domain;
import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.net.InetAddresses.isInetAddress;
import static org.jclouds.profitbricks.util.MacAddresses.isMacAddress;
-import com.google.auto.value.AutoValue;
-
import java.util.List;
import org.jclouds.javax.annotation.Nullable;
import org.jclouds.profitbricks.domain.internal.FirewallRuleCommonProperties;
+import com.google.auto.value.AutoValue;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
-import static com.google.common.net.InetAddresses.isInetAddress;
-
@AutoValue
public abstract class Firewall {
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Image.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Image.java b/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Image.java
index d272e27..0987324 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Image.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Image.java
@@ -16,10 +16,12 @@
*/
package org.jclouds.profitbricks.domain;
+import org.jclouds.profitbricks.domain.internal.Provisionable;
+
import com.google.auto.value.AutoValue;
@AutoValue
-public abstract class Image {
+public abstract class Image implements Provisionable {
public enum Type {
@@ -34,46 +36,21 @@ public abstract class Image {
}
}
- public abstract String id();
-
- public abstract String name();
-
- public abstract float size(); // MB
-
public abstract Type type();
- public abstract Location location();
-
- public abstract OsType osType();
-
public abstract boolean isPublic();
public abstract boolean isWriteable();
public abstract boolean isBootable();
- public abstract boolean isCpuHotPlug();
-
- public abstract boolean isCpuHotUnPlug();
-
- public abstract boolean isRamHotPlug();
-
- public abstract boolean isRamHotUnPlug();
-
- public abstract boolean isNicHotPlug();
-
- public abstract boolean isNicHotUnPlug();
-
- public abstract boolean isDiscVirtioHotPlug();
-
- public abstract boolean isDiscVirtioHotUnPlug();
-
public static Image create(String id, String name, float size, Type type, Location location, OsType osType,
- boolean isPublic, boolean isWriteable, boolean isBootable, boolean cpuHotPlug, boolean cpuHotUnPlug,
- boolean ramHotPlug, boolean ramHotUnPlug, boolean nicHotPlug, boolean nicHotUnPlug,
- boolean discVirtioHotPlug, boolean discVirtioHotUnPlug) {
- return new AutoValue_Image(id, name, size, type, location, osType, isPublic, isWriteable,
- isBootable, cpuHotPlug, cpuHotUnPlug, ramHotPlug, ramHotUnPlug, nicHotPlug, nicHotUnPlug, discVirtioHotPlug, discVirtioHotUnPlug);
+ boolean isPublic, Boolean isWriteable, Boolean isBootable, Boolean cpuHotPlug, Boolean cpuHotUnPlug,
+ Boolean ramHotPlug, Boolean ramHotUnPlug, Boolean nicHotPlug, Boolean nicHotUnPlug,
+ Boolean discVirtioHotPlug, Boolean discVirtioHotUnPlug) {
+ return new AutoValue_Image(cpuHotPlug, cpuHotUnPlug, ramHotPlug, ramHotUnPlug, nicHotPlug, nicHotUnPlug,
+ discVirtioHotPlug, discVirtioHotUnPlug, id, name, size, location, osType, type, isPublic, isWriteable,
+ isBootable);
}
public static Builder builder() {
@@ -84,56 +61,18 @@ public abstract class Image {
return builder().fromImage(this);
}
- public static class Builder {
+ public static class Builder extends Provisionable.Builder<Builder, Image> {
- private String id;
- private String name;
- private float size;
private Type type;
- private Location location;
- private OsType osType;
private boolean isPublic;
private boolean isWriteable;
private boolean isBootable;
- private boolean cpuHotPlug;
- private boolean cpuHotUnPlug;
- private boolean ramHotPlug;
- private boolean ramHotUnPlug;
- private boolean nicHotPlug;
- private boolean nicHotUnPlug;
- private boolean discVirtioHotPlug;
- private boolean discVirtioHotUnPlug;
-
- public Builder id(String id) {
- this.id = id;
- return this;
- }
-
- public Builder name(String name) {
- this.name = name;
- return this;
- }
-
- public Builder size(float size) {
- this.size = size;
- return this;
- }
public Builder type(Type type) {
this.type = type;
return this;
}
- public Builder osType(OsType osType) {
- this.osType = osType;
- return this;
- }
-
- public Builder location(Location location) {
- this.location = location;
- return this;
- }
-
public Builder isPublic(boolean isPublic) {
this.isPublic = isPublic;
return this;
@@ -149,46 +88,7 @@ public abstract class Image {
return this;
}
- public Builder isCpuHotPlug(boolean cpuHotPlug) {
- this.cpuHotPlug = cpuHotPlug;
- return this;
- }
-
- public Builder isCpuHotUnPlug(boolean cpuHotUnPlug) {
- this.cpuHotUnPlug = cpuHotUnPlug;
- return this;
- }
-
- public Builder isRamHotPlug(boolean ramHotPlug) {
- this.ramHotPlug = ramHotPlug;
- return this;
- }
-
- public Builder isRamHotUnPlug(boolean ramHotUnPlug) {
- this.ramHotUnPlug = ramHotUnPlug;
- return this;
- }
-
- public Builder isNicHotPlug(boolean nicHotPlug) {
- this.nicHotPlug = nicHotPlug;
- return this;
- }
-
- public Builder isNicHotUnPlug(boolean nicHotUnPlug) {
- this.nicHotUnPlug = nicHotUnPlug;
- return this;
- }
-
- public Builder isDiscVirtioHotPlug(boolean discVirtioHotPlug) {
- this.discVirtioHotPlug = discVirtioHotPlug;
- return this;
- }
-
- public Builder isDiscVirtioHotUnPlug(boolean discVirtioHotUnPlug) {
- this.discVirtioHotUnPlug = discVirtioHotUnPlug;
- return this;
- }
-
+ @Override
public Image build() {
return Image.create(id, name, size, type, location, osType, isPublic, isWriteable, isBootable, cpuHotPlug, cpuHotUnPlug,
ramHotPlug, ramHotUnPlug, nicHotPlug, nicHotUnPlug, discVirtioHotPlug, discVirtioHotUnPlug);
@@ -199,7 +99,12 @@ public abstract class Image {
.isDiscVirtioHotPlug(in.isDiscVirtioHotPlug()).isDiscVirtioHotUnPlug(in.isDiscVirtioHotUnPlug())
.isNicHotPlug(in.isNicHotPlug()).isNicHotUnPlug(in.isNicHotUnPlug()).isPublic(in.isPublic())
.isRamHotPlug(in.isRamHotPlug()).isRamHotUnPlug(in.isRamHotUnPlug()).isWriteable(in.isWriteable())
- .location(in.location()).name(in.name()).osType(in.osType()).size(in.size());
+ .location(in.location()).name(in.name()).osType(in.osType()).size(in.size()).type(in.type());
+ }
+
+ @Override
+ public Builder self() {
+ return this;
}
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/domain/LoadBalancer.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/domain/LoadBalancer.java b/profitbricks/src/main/java/org/jclouds/profitbricks/domain/LoadBalancer.java
index bc118ea..843999d 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/domain/LoadBalancer.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/domain/LoadBalancer.java
@@ -47,13 +47,10 @@ public abstract class LoadBalancer {
public abstract String name();
@Nullable
- public abstract Algorithm loadBalancerAlgorithm();
+ public abstract Algorithm algorithm();
@Nullable
- public abstract String dataCenterId();
-
- @Nullable
- public abstract String dataCenterVersion();
+ public abstract DataCenter dataCenter();
@Nullable
public abstract Boolean internetAccess();
@@ -79,10 +76,11 @@ public abstract class LoadBalancer {
@Nullable
public abstract List<Firewall> firewalls();
- public static LoadBalancer create(String id, String name, Algorithm loadBalancerAlgorithm,
- String dataCenterId, String dataCenterVersion, boolean internetAccess,
- String ip, String lanId, ProvisioningState state, Date creationTime, Date lastModificationTime, List<Server> balancedServers, List<Firewall> firewalls) {
- return new AutoValue_LoadBalancer(id, name, loadBalancerAlgorithm, dataCenterId, dataCenterVersion, internetAccess, ip, lanId, state, creationTime, lastModificationTime,
+ public static LoadBalancer create(String id, String name, Algorithm algorithm, DataCenter dataCenter,
+ boolean internetAccess, String ip, String lanId, ProvisioningState state, Date creationTime,
+ Date lastModificationTime, List<Server> balancedServers, List<Firewall> firewalls) {
+ return new AutoValue_LoadBalancer(id, name, algorithm, dataCenter,
+ internetAccess, ip, lanId, state, creationTime, lastModificationTime,
balancedServers != null ? ImmutableList.copyOf(balancedServers) : ImmutableList.<Server>of(),
firewalls != null ? ImmutableList.copyOf(firewalls) : ImmutableList.<Firewall>of());
}
@@ -102,11 +100,9 @@ public abstract class LoadBalancer {
private String name;
- private Algorithm loadBalancerAlgorithm;
-
- private String dataCenterId;
+ private Algorithm algorithm;
- private String dataCenterVersion;
+ private DataCenter dataCenter;
private boolean internetAccess;
@@ -134,18 +130,13 @@ public abstract class LoadBalancer {
return this;
}
- public Builder loadBalancerAlgorithm(Algorithm loadBalancerAlgorithm) {
- this.loadBalancerAlgorithm = loadBalancerAlgorithm;
- return this;
- }
-
- public Builder dataCenterId(String dataCenterId) {
- this.dataCenterId = dataCenterId;
+ public Builder algorithm(Algorithm algorithm) {
+ this.algorithm = algorithm;
return this;
}
- public Builder dataCenterVersion(String dataCenterVersion) {
- this.dataCenterVersion = dataCenterVersion;
+ public Builder dataCenter(DataCenter dataCenter) {
+ this.dataCenter = dataCenter;
return this;
}
@@ -191,13 +182,16 @@ public abstract class LoadBalancer {
public LoadBalancer build() {
checkIp(ip);
- return LoadBalancer.create(id, name, loadBalancerAlgorithm, dataCenterId, dataCenterVersion, internetAccess, ip, lanId, state, creationTime, lastModificationTime, balancedServers, firewalls);
+ return LoadBalancer.create(id, name, algorithm, dataCenter, internetAccess,
+ ip, lanId, state, creationTime, lastModificationTime, balancedServers, firewalls);
}
public Builder fromLoadBalancer(LoadBalancer in) {
- return this.id(in.id()).name(in.name()).loadBalancerAlgorithm(in.loadBalancerAlgorithm())
- .dataCenterId(in.dataCenterId()).dataCenterVersion(in.dataCenterVersion()).internetAccess(in.internetAccess())
- .ip(in.ip()).lanId(in.lanId()).state(in.state()).creationTime(in.creationTime()).lastModificationTime(in.lastModificationTime()).balancedServers(in.balancedServers()).firewalls(in.firewalls());
+ return this.id(in.id()).name(in.name()).algorithm(in.algorithm())
+ .dataCenter(in.dataCenter()).internetAccess(in.internetAccess())
+ .ip(in.ip()).lanId(in.lanId()).state(in.state()).creationTime(in.creationTime())
+ .lastModificationTime(in.lastModificationTime()).balancedServers(in.balancedServers())
+ .firewalls(in.firewalls());
}
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Location.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Location.java b/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Location.java
index 3dd888d..52acaf2 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Location.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Location.java
@@ -18,22 +18,28 @@ package org.jclouds.profitbricks.domain;
public enum Location {
- DE_FKB("de/fkb"),
- DE_FRA("de/fra"),
- US_LAS("us/las"),
- US_LAS_DEV("us/lasdev"),
- UNRECOGNIZED("unknown");
+ DE_FKB("de/fkb", "Germany, Karlsruhe"),
+ DE_FRA("de/fra", "Germany, Frankfurt (M)"),
+ US_LAS("us/las", "USA, Las Vegas"),
+ US_LASDEV("us/lasdev", "USA Developer cluster"),
+ UNRECOGNIZED("unrecognized", "Unrecognized location");
private final String id;
+ private final String description;
- Location(String id) {
+ Location(String id, String description) {
this.id = id;
+ this.description = description;
}
- public String value() {
+ public String getId() {
return id;
}
+ public String getDescription() {
+ return description;
+ }
+
public static Location fromValue(String v) {
try {
return valueOf(v);
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Nic.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Nic.java b/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Nic.java
index f538d9b..0f7427c 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Nic.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Nic.java
@@ -17,17 +17,15 @@
package org.jclouds.profitbricks.domain;
import static com.google.common.base.Preconditions.checkArgument;
-
-import com.google.auto.value.AutoValue;
+import static com.google.common.net.InetAddresses.isInetAddress;
import java.util.List;
-import org.jclouds.javax.annotation.Nullable;
-
+import com.google.auto.value.AutoValue;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
-import static com.google.common.net.InetAddresses.isInetAddress;
+import org.jclouds.javax.annotation.Nullable;
@AutoValue
public abstract class Nic {
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Server.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Server.java b/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Server.java
index ee1212a..027e016 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Server.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Server.java
@@ -27,6 +27,7 @@ import java.util.Date;
import java.util.List;
import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.profitbricks.domain.internal.HotPluggable;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
@@ -52,6 +53,9 @@ public abstract class Server implements ServerCommonProperties {
}
@Nullable
+ public abstract DataCenter dataCenter();
+
+ @Nullable
public abstract String id();
@Nullable
@@ -89,17 +93,23 @@ public abstract class Server implements ServerCommonProperties {
public abstract String balancedNicId();
@Nullable
- public abstract Boolean activate();
-
- public static Server create(String id, String name, int cores, int ram, Boolean hasInternetAccess, ProvisioningState state,
- Status status, OsType osType, AvailabilityZone availabilityZone, Date creationTime, Date lastModificationTime,
- List<Storage> storages, List<Nic> nics, Boolean isCpuHotPlug, Boolean isRamHotPlug, Boolean isNicHotPlug,
- Boolean isNicHotUnPlug, Boolean isDiscVirtioHotPlug, Boolean isDiscVirtioHotUnPlug, String balancedNicId, boolean activate) {
- return new AutoValue_Server(isCpuHotPlug, isRamHotPlug, isNicHotPlug, isNicHotUnPlug, isDiscVirtioHotPlug, isDiscVirtioHotUnPlug,
- cores, ram, id, name, hasInternetAccess, state, status, osType, availabilityZone, creationTime, lastModificationTime,
- storages != null ? ImmutableList.copyOf(storages) : Lists.<Storage>newArrayList(),
- nics != null ? ImmutableList.copyOf(nics) : Lists.<Nic>newArrayList(), balancedNicId, activate);
+ public abstract Boolean loadBalanced();
+ @Nullable
+ public abstract String hostname(); // Non-profitbricks property; Added to hold hostname parsed from image temporarily
+
+ public static Server create(DataCenter dataCenter, String id, String name, int cores, int ram,
+ Boolean hasInternetAccess, ProvisioningState state, Status status, OsType osType,
+ AvailabilityZone availabilityZone, Date creationTime, Date lastModificationTime, List<Storage> storages,
+ List<Nic> nics, Boolean isCpuHotPlug, Boolean isRamHotPlug, Boolean isNicHotPlug, Boolean isNicHotUnPlug,
+ Boolean isDiscVirtioHotPlug, Boolean isDiscVirtioHotUnPlug, String balancedNicId, Boolean loadBalanced,
+ String hostname) {
+ return new AutoValue_Server(isCpuHotPlug, null, isRamHotPlug, null, isNicHotPlug, isNicHotUnPlug, isDiscVirtioHotPlug,
+ isDiscVirtioHotUnPlug, cores, ram, dataCenter, id, name, hasInternetAccess, state, status, osType,
+ availabilityZone, creationTime, lastModificationTime,
+ storages != null ? ImmutableList.copyOf(storages) : Lists.<Storage>newArrayList(),
+ nics != null ? ImmutableList.copyOf(nics) : Lists.<Nic>newArrayList(),
+ balancedNicId, loadBalanced, hostname);
}
public static DescribingBuilder builder() {
@@ -110,17 +120,11 @@ public abstract class Server implements ServerCommonProperties {
return builder().fromServer(this);
}
- public abstract static class Builder<B extends Builder, D extends ServerCommonProperties> {
+ public abstract static class Builder<B extends Builder, D extends ServerCommonProperties> extends HotPluggable.Builder<B, D> {
protected String name;
protected int cores;
protected int ram;
- protected Boolean cpuHotPlug;
- protected Boolean ramHotPlug;
- protected Boolean nicHotPlug;
- protected Boolean nicHotUnPlug;
- protected Boolean discVirtioHotPlug;
- protected Boolean discVirtioHotUnPlug;
public B name(String name) {
this.name = name;
@@ -136,45 +140,11 @@ public abstract class Server implements ServerCommonProperties {
this.ram = ram;
return self();
}
-
- public B isCpuHotPlug(Boolean cpuHotPlug) {
- this.cpuHotPlug = cpuHotPlug;
- return self();
- }
-
- public B isRamHotPlug(Boolean ramHotPlug) {
- this.ramHotPlug = ramHotPlug;
- return self();
-
- }
-
- public B isNicHotPlug(Boolean nicHotPlug) {
- this.nicHotPlug = nicHotPlug;
- return self();
- }
-
- public B isNicHotUnPlug(Boolean nicHotUnPlug) {
- this.nicHotUnPlug = nicHotUnPlug;
- return self();
- }
-
- public B isDiscVirtioHotPlug(Boolean discVirtioHotPlug) {
- this.discVirtioHotPlug = discVirtioHotPlug;
- return self();
- }
-
- public B isDiscVirtioHotUnPlug(Boolean discVirtioHotUnPlug) {
- this.discVirtioHotUnPlug = discVirtioHotUnPlug;
- return self();
- }
-
- public abstract B self();
-
- public abstract D build();
}
public static class DescribingBuilder extends Builder<DescribingBuilder, Server> {
+ private DataCenter dataCenter;
private String id;
private ProvisioningState state;
private Status status;
@@ -185,8 +155,14 @@ public abstract class Server implements ServerCommonProperties {
private Boolean hasInternetAccess;
private List<Storage> storages;
private List<Nic> nics;
- private boolean activate;
+ private Boolean loadBalanced;
private String balancedNicId;
+ private String hostname;
+
+ public DescribingBuilder dataCenter(DataCenter dataCenter) {
+ this.dataCenter = dataCenter;
+ return this;
+ }
public DescribingBuilder id(String id) {
this.id = id;
@@ -243,16 +219,21 @@ public abstract class Server implements ServerCommonProperties {
return this;
}
- public DescribingBuilder activate(boolean activate) {
- this.activate = activate;
+ public DescribingBuilder loadBalanced(Boolean loadBalanced) {
+ this.loadBalanced = loadBalanced;
+ return this;
+ }
+
+ public DescribingBuilder hostname(String hostname) {
+ this.hostname = hostname;
return this;
}
@Override
public Server build() {
- return Server.create(id, name, cores, ram, hasInternetAccess, state, status, osType, zone, creationTime,
+ return Server.create(dataCenter, id, name, cores, ram, hasInternetAccess, state, status, osType, zone, creationTime,
lastModificationTime, storages, nics, cpuHotPlug, ramHotPlug, nicHotPlug, nicHotUnPlug,
- discVirtioHotPlug, discVirtioHotUnPlug, balancedNicId, activate);
+ discVirtioHotPlug, discVirtioHotUnPlug, balancedNicId, loadBalanced, hostname);
}
private DescribingBuilder fromServer(Server in) {
@@ -261,7 +242,8 @@ public abstract class Server implements ServerCommonProperties {
.isDiscVirtioHotUnPlug(in.isDiscVirtioHotUnPlug()).isNicHotPlug(in.isNicHotPlug())
.isNicHotUnPlug(in.isNicHotUnPlug()).isRamHotPlug(in.isRamHotPlug())
.lastModificationTime(in.lastModificationTime()).name(in.name()).osType(in.osType()).ram(in.ram())
- .state(in.state()).status(in.status()).storages(in.storages()).nics(in.nics()).balancedNicId(in.balancedNicId()).activate(in.activate());
+ .state(in.state()).status(in.status()).storages(in.storages()).nics(in.nics()).dataCenter(in.dataCenter())
+ .balancedNicId(balancedNicId).loadBalanced(loadBalanced).hostname(hostname);
}
@Override
@@ -308,14 +290,15 @@ public abstract class Server implements ServerCommonProperties {
return create(dataCenterId, name, core, ram, "", "", null, false, null, null, null, null, null, null, null, null);
}
- public static CreatePayload create(String dataCenterId, String name, int cores, int ram, String bootFromStorageId, String bootFromImageId,
- Integer lanId, Boolean hasInternetAccess, AvailabilityZone availabilityZone, OsType osType, Boolean isCpuHotPlug, Boolean isRamHotPlug,
- Boolean isNicHotPlug, Boolean isNicHotUnPlug, Boolean isDiscVirtioHotPlug, Boolean isDiscVirtioHotUnPlug) {
+ public static CreatePayload create(String dataCenterId, String name, int cores, int ram, String bootFromStorageId,
+ String bootFromImageId, Integer lanId, Boolean hasInternetAccess, AvailabilityZone availabilityZone,
+ OsType osType, Boolean isCpuHotPlug, Boolean isRamHotPlug, Boolean isNicHotPlug, Boolean isNicHotUnPlug,
+ Boolean isDiscVirtioHotPlug, Boolean isDiscVirtioHotUnPlug) {
validateCores(cores);
validateRam(ram, isRamHotPlug);
- return new AutoValue_Server_Request_CreatePayload(isCpuHotPlug, isRamHotPlug, isNicHotPlug, isNicHotUnPlug, isDiscVirtioHotPlug,
- isDiscVirtioHotUnPlug, name, cores, ram, dataCenterId, bootFromStorageId, bootFromImageId, lanId, hasInternetAccess,
- availabilityZone, osType);
+ return new AutoValue_Server_Request_CreatePayload(isCpuHotPlug, null, isRamHotPlug, null, isNicHotPlug,
+ isNicHotUnPlug, isDiscVirtioHotPlug, isDiscVirtioHotUnPlug, name, cores, ram, dataCenterId,
+ bootFromStorageId, bootFromImageId, lanId, hasInternetAccess, availabilityZone, osType);
}
public static class Builder extends Server.Builder<Builder, CreatePayload> {
@@ -406,8 +389,9 @@ public abstract class Server implements ServerCommonProperties {
public static UpdatePayload create(String id, String name, int cores, int ram, String bootFromStorageId, String bootFromImageId,
AvailabilityZone availabilityZone, OsType osType, Boolean isCpuHotPlug, Boolean isRamHotPlug, Boolean isNicHotPlug,
Boolean isNicHotUnPlug, Boolean isDiscVirtioHotPlug, Boolean isDiscVirtioHotUnPlug) {
- return new AutoValue_Server_Request_UpdatePayload(isCpuHotPlug, isRamHotPlug, isNicHotPlug, isNicHotUnPlug, isDiscVirtioHotPlug,
- isDiscVirtioHotUnPlug, cores, ram, name, id, bootFromStorageId, bootFromImageId, availabilityZone, osType);
+ return new AutoValue_Server_Request_UpdatePayload(isCpuHotPlug, null, isRamHotPlug, null, isNicHotPlug,
+ isNicHotUnPlug, isDiscVirtioHotPlug, isDiscVirtioHotUnPlug, cores, ram, name, id, bootFromStorageId,
+ bootFromImageId, availabilityZone, osType);
}
public static class Builder extends Server.Builder<Builder, UpdatePayload> {
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Snapshot.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Snapshot.java b/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Snapshot.java
index 3182711..60738d0 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Snapshot.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Snapshot.java
@@ -17,45 +17,34 @@
package org.jclouds.profitbricks.domain;
import com.google.auto.value.AutoValue;
+
import org.jclouds.javax.annotation.Nullable;
import java.util.Date;
+import org.jclouds.profitbricks.domain.internal.HotPluggable;
+import org.jclouds.profitbricks.domain.internal.Provisionable;
+
@AutoValue
-public abstract class Snapshot {
+public abstract class Snapshot implements Provisionable {
@Nullable
+ @Override
public abstract String id();
@Nullable
+ @Override
public abstract String name();
- public abstract float size();
-
public abstract boolean bootable();
@Nullable
public abstract String description();
@Nullable
+ @Override
public abstract OsType osType();
- public abstract boolean cpuHotPlug();
-
- public abstract boolean cpuHotUnPlug();
-
- public abstract boolean discVirtioHotPlug();
-
- public abstract boolean discVirtioHotUnPlug();
-
- public abstract boolean ramHotPlug();
-
- public abstract boolean ramHotUnPlug();
-
- public abstract boolean nicHotPlug();
-
- public abstract boolean nicHotUnPlug();
-
@Nullable
public abstract Date creationTime();
@@ -66,367 +55,237 @@ public abstract class Snapshot {
public abstract ProvisioningState state();
@Nullable
+ @Override
public abstract Location location();
- public static Snapshot create(String id, String name, float size, boolean bootable, String description, OsType osType, boolean cpuHotPlug, boolean cpuHotUnPlug,
- boolean discVirtioHotPlug, boolean discVirtioHotUnPlug, boolean ramHotPlug, boolean ramHotUnPlug,
- boolean nicHotPlug, boolean nicHotUnPlug, Date creationTime, Date lastModificationTime, ProvisioningState state, Location location) {
- return new AutoValue_Snapshot(id, name, size, bootable, description, osType, cpuHotPlug, cpuHotUnPlug,
- discVirtioHotPlug, discVirtioHotUnPlug, ramHotPlug, ramHotUnPlug,
- nicHotPlug, nicHotUnPlug, creationTime, lastModificationTime, state, location);
+ public static Snapshot create(String id, String name, float size, boolean bootable, String description, OsType osType,
+ Boolean cpuHotPlug, Boolean cpuHotUnPlug, Boolean discVirtioHotPlug, Boolean discVirtioHotUnPlug,
+ Boolean ramHotPlug, Boolean ramHotUnPlug, Boolean nicHotPlug, Boolean nicHotUnPlug, Date creationTime,
+ Date lastModificationTime, ProvisioningState state, Location location) {
+ return new AutoValue_Snapshot(cpuHotPlug, cpuHotUnPlug, discVirtioHotPlug, discVirtioHotUnPlug, ramHotPlug,
+ ramHotUnPlug, nicHotPlug, nicHotUnPlug, size, id, name, bootable, description, osType, creationTime,
+ lastModificationTime, state, location);
}
public static Builder builder() {
return new Builder();
}
- public static class Builder {
+ public static class Builder extends Provisionable.Builder<Builder, Snapshot> {
- private String id;
- @Nullable
- private String name;
- private float size;
private Date creationTime;
private Date lastModificationTime;
private ProvisioningState state;
private boolean bootable;
- @Nullable
private String description;
- private OsType osType;
- private boolean cpuHotPlug;
- private boolean cpuHotUnPlug;
- private boolean discVirtioHotPlug;
- private boolean discVirtioHotUnPlug;
- private boolean ramHotPlug;
- private boolean ramHotUnPlug;
- private boolean nicHotPlug;
- private boolean nicHotUnPlug;
- private Location location;
-
- public Builder id(String id) {
- this.id = id;
- return this;
- }
-
- public Builder name(String name) {
- this.name = name;
- return this;
- }
-
- public Builder size(float size) {
- this.size = size;
- return this;
- }
public Builder creationTime(Date creationTime) {
- this.creationTime = creationTime;
- return this;
+ this.creationTime = creationTime;
+ return this;
}
public Builder lastModificationTime(Date lastModificationTime) {
- this.lastModificationTime = lastModificationTime;
- return this;
+ this.lastModificationTime = lastModificationTime;
+ return this;
}
public Builder state(ProvisioningState state) {
- this.state = state;
- return this;
+ this.state = state;
+ return this;
}
public Builder description(String description) {
- this.description = description;
- return this;
+ this.description = description;
+ return this;
}
- public Builder bootable(Boolean bootable) {
- this.bootable = bootable;
- return this;
- }
-
- public Builder osType(OsType osType) {
- this.osType = osType;
- return this;
- }
-
- public Builder cpuHotPlug(boolean cpuHotPlug) {
- this.cpuHotPlug = cpuHotPlug;
- return this;
- }
-
- public Builder cpuHotUnPlug(boolean cpuHotUnPlug) {
- this.cpuHotUnPlug = cpuHotUnPlug;
- return this;
- }
-
- public Builder discVirtioHotPlug(boolean discVirtioHotPlug) {
- this.discVirtioHotPlug = discVirtioHotPlug;
- return this;
- }
-
- public Builder discVirtioHotUnPlug(boolean discVirtioHotUnPlug) {
- this.discVirtioHotUnPlug = discVirtioHotUnPlug;
- return this;
- }
-
- public Builder ramHotPlug(boolean ramHotPlug) {
- this.ramHotPlug = ramHotPlug;
- return this;
- }
-
- public Builder ramHotUnPlug(boolean ramHotUnPlug) {
- this.ramHotUnPlug = ramHotUnPlug;
- return this;
- }
-
- public Builder nicHotPlug(boolean nicHotPlug) {
- this.nicHotPlug = nicHotPlug;
- return this;
- }
-
- public Builder nicHotUnPlug(boolean nicHotUnPlug) {
- this.nicHotUnPlug = nicHotUnPlug;
- return this;
- }
-
- public Builder location(Location location) {
- this.location = location;
- return this;
+ public Builder isBootable(boolean bootable) {
+ this.bootable = bootable;
+ return this;
}
private Builder fromSnapshot(Snapshot in) {
- return this.id(in.id()).name(in.name()).size(in.size()).creationTime(in.creationTime())
- .lastModificationTime(in.lastModificationTime()).state(in.state()).bootable(in.bootable()).description(in.description())
- .cpuHotPlug(in.cpuHotPlug()).cpuHotUnPlug(in.cpuHotUnPlug()).discVirtioHotPlug(in.discVirtioHotPlug())
- .discVirtioHotUnPlug(in.discVirtioHotUnPlug()).ramHotPlug(in.ramHotPlug()).ramHotUnPlug(in.ramHotUnPlug())
- .nicHotPlug(in.nicHotPlug()).nicHotUnPlug(in.nicHotUnPlug());
+ return this.id(in.id()).name(in.name()).size(in.size()).creationTime(in.creationTime())
+ .lastModificationTime(in.lastModificationTime()).state(in.state()).isBootable(in.bootable())
+ .description(in.description()).isCpuHotPlug(in.isCpuHotPlug()).isCpuHotUnPlug(in.isCpuHotUnPlug())
+ .isDiscVirtioHotPlug(in.isDiscVirtioHotPlug()).isDiscVirtioHotUnPlug(in.isDiscVirtioHotUnPlug())
+ .isRamHotPlug(in.isRamHotPlug()).isRamHotUnPlug(in.isRamHotUnPlug())
+ .isNicHotPlug(in.isNicHotPlug()).isNicHotUnPlug(in.isNicHotUnPlug());
}
+ @Override
public Snapshot build() {
- return Snapshot.create(id, name, size, bootable, description, osType, cpuHotPlug, cpuHotUnPlug, discVirtioHotPlug, discVirtioHotUnPlug, ramHotPlug, ramHotUnPlug, nicHotPlug, nicHotUnPlug, creationTime, lastModificationTime, state, location);
+ return Snapshot.create(id, name, size, bootable, description, osType, cpuHotPlug, cpuHotUnPlug,
+ discVirtioHotPlug, discVirtioHotUnPlug, ramHotPlug, ramHotUnPlug, nicHotPlug, nicHotUnPlug,
+ creationTime, lastModificationTime, state, location);
+ }
+
+ @Override
+ public Builder self() {
+ return this;
}
}
public static final class Request {
public static CreatePayload.Builder creatingBuilder() {
- return new CreatePayload.Builder();
+ return new CreatePayload.Builder();
}
public static UpdatePayload.Builder updatingBuilder() {
- return new UpdatePayload.Builder();
+ return new UpdatePayload.Builder();
}
public static RollbackPayload.Builder rollbackBuilder() {
- return new RollbackPayload.Builder();
+ return new RollbackPayload.Builder();
}
@AutoValue
public abstract static class CreatePayload {
- public abstract String storageId();
+ public abstract String storageId();
- public abstract String description();
+ public abstract String description();
- public abstract String name();
+ public abstract String name();
- public static CreatePayload create(String storageId, String description, String name) {
- return new AutoValue_Snapshot_Request_CreatePayload(storageId, description, name);
- }
+ public static CreatePayload create(String storageId, String description, String name) {
+ return new AutoValue_Snapshot_Request_CreatePayload(storageId, description, name);
+ }
- public static class Builder {
+ public static class Builder {
- private String storageId;
- private String description;
- private String name;
+ private String storageId;
+ private String description;
+ private String name;
- public Builder storageId(String storageId) {
- this.storageId = storageId;
- return this;
- }
+ public Builder storageId(String storageId) {
+ this.storageId = storageId;
+ return this;
+ }
- public Builder description(String description) {
- this.description = description;
- return this;
- }
+ public Builder description(String description) {
+ this.description = description;
+ return this;
+ }
- public Builder name(String name) {
- this.name = name;
- return this;
- }
+ public Builder name(String name) {
+ this.name = name;
+ return this;
+ }
- public CreatePayload build() {
- return CreatePayload.create(storageId, description, name);
- }
- }
+ public CreatePayload build() {
+ return CreatePayload.create(storageId, description, name);
+ }
+ }
}
@AutoValue
- public abstract static class UpdatePayload {
-
- public abstract String snapshotId();
-
- public abstract String description();
-
- public abstract String name();
-
- public abstract boolean bootable();
-
- @Nullable
- public abstract OsType osType();
-
- public abstract boolean cpuHotplug();
-
- public abstract boolean cpuHotunplug();
-
- public abstract boolean ramHotplug();
-
- public abstract boolean ramHotunplug();
-
- public abstract boolean nicHotplug();
-
- public abstract boolean nicHotunplug();
-
- public abstract boolean discVirtioHotplug();
-
- public abstract boolean discVirtioHotunplug();
-
- public static UpdatePayload create(String snapshotId, String description, String name, boolean bootable, OsType osType, boolean cpuHotplug, boolean cpuHotunplug, boolean ramHotplug, boolean ramHotunplug, boolean nicHotplug, boolean nicHotunplug, boolean discVirtioHotplug, boolean discVirtioHotunplug) {
- return new AutoValue_Snapshot_Request_UpdatePayload(snapshotId, description, name, bootable, osType, cpuHotplug, cpuHotunplug, ramHotplug, ramHotunplug, nicHotplug, nicHotunplug, discVirtioHotplug, discVirtioHotunplug);
- }
-
- public static class Builder {
-
- private String snapshotId;
-
- @Nullable
- private String description;
-
- @Nullable
- private String name;
-
- private boolean bootable;
-
- private OsType osType;
-
- private boolean cpuHotplug;
-
- private boolean cpuHotunplug;
-
- private boolean ramHotplug;
+ public abstract static class UpdatePayload implements HotPluggable {
- private boolean ramHotunplug;
+ public abstract String snapshotId();
- private boolean nicHotplug;
+ public abstract String description();
- private boolean nicHotunplug;
+ public abstract String name();
- private boolean discVirtioHotplug;
+ public abstract boolean bootable();
- private boolean discVirtioHotunplug;
+ @Nullable
+ public abstract OsType osType();
- public Builder snapshotId(String snapshotId) {
- this.snapshotId = snapshotId;
- return this;
- }
+ public static UpdatePayload create(String snapshotId, String description, String name, boolean bootable,
+ OsType osType, Boolean cpuHotplug, Boolean cpuHotunplug, Boolean ramHotplug, Boolean ramHotunplug,
+ Boolean nicHotplug, Boolean nicHotunplug, Boolean discVirtioHotplug, Boolean discVirtioHotunplug) {
+ return new AutoValue_Snapshot_Request_UpdatePayload(
+ cpuHotplug, cpuHotunplug, ramHotplug, ramHotunplug, nicHotplug, nicHotunplug, discVirtioHotplug,
+ discVirtioHotunplug, snapshotId, description, name, bootable, osType);
+ }
- public Builder description(String description) {
- this.description = description;
- return this;
- }
+ public static class Builder extends HotPluggable.Builder<Builder, UpdatePayload> {
- public Builder name(String name) {
- this.name = name;
- return this;
- }
+ private String snapshotId;
- public Builder bootable(boolean bootable) {
- this.bootable = bootable;
- return this;
- }
+ @Nullable
+ private String description;
- public Builder osType(OsType osType) {
- this.osType = osType;
- return this;
- }
+ @Nullable
+ private String name;
- public Builder cpuHotplug(boolean cpuHotplug) {
- this.cpuHotplug = cpuHotplug;
- return this;
- }
+ private boolean bootable;
- public Builder cpuHotunplug(boolean cpuHotunplug) {
- this.cpuHotunplug = cpuHotunplug;
- return this;
- }
+ private OsType osType;
- public Builder ramHotplug(boolean ramHotplug) {
- this.ramHotplug = ramHotplug;
- return this;
- }
+ public Builder snapshotId(String snapshotId) {
+ this.snapshotId = snapshotId;
+ return this;
+ }
- public Builder ramHotunplug(boolean ramHotunplug) {
- this.ramHotunplug = ramHotunplug;
- return this;
- }
+ public Builder description(String description) {
+ this.description = description;
+ return this;
+ }
- public Builder nicHotplug(boolean nicHotplug) {
- this.nicHotplug = nicHotplug;
- return this;
- }
+ public Builder name(String name) {
+ this.name = name;
+ return this;
+ }
- public Builder nicHotunplug(boolean nicHotunplug) {
- this.nicHotunplug = nicHotunplug;
- return this;
- }
+ public Builder bootable(boolean bootable) {
+ this.bootable = bootable;
+ return this;
+ }
- public Builder discVirtioHotplug(boolean discVirtioHotplug) {
- this.discVirtioHotplug = discVirtioHotplug;
- return this;
- }
+ public Builder osType(OsType osType) {
+ this.osType = osType;
+ return this;
+ }
- public Builder discVirtioHotunplug(boolean discVirtioHotunplug) {
- this.discVirtioHotunplug = discVirtioHotunplug;
- return this;
- }
+ @Override
+ public UpdatePayload build() {
+ return UpdatePayload.create(snapshotId, description, name, bootable, osType, cpuHotPlug, cpuHotUnPlug,
+ ramHotPlug, ramHotUnPlug, nicHotUnPlug, nicHotUnPlug, discVirtioHotPlug, discVirtioHotUnPlug);
+ }
- public UpdatePayload build() {
- return UpdatePayload.create(snapshotId, description, name, bootable, osType, cpuHotplug, cpuHotunplug, ramHotplug, ramHotunplug, nicHotplug, nicHotunplug, discVirtioHotplug, discVirtioHotunplug);
- }
- }
+ @Override
+ public Builder self() {
+ return this;
+ }
+ }
}
@AutoValue
public abstract static class RollbackPayload {
- public abstract String snapshotId();
+ public abstract String snapshotId();
- public abstract String storageId();
+ public abstract String storageId();
- public static RollbackPayload create(String snapshotId, String storageId) {
- return new AutoValue_Snapshot_Request_RollbackPayload(snapshotId, storageId);
- }
+ public static RollbackPayload create(String snapshotId, String storageId) {
+ return new AutoValue_Snapshot_Request_RollbackPayload(snapshotId, storageId);
+ }
- public static class Builder {
+ public static class Builder {
- private String snapshotId;
+ private String snapshotId;
- private String storageId;
+ private String storageId;
- public Builder snapshotId(String snapshotId) {
- this.snapshotId = snapshotId;
- return this;
- }
+ public Builder snapshotId(String snapshotId) {
+ this.snapshotId = snapshotId;
+ return this;
+ }
- public Builder storageId(String storageId) {
- this.storageId = storageId;
- return this;
- }
+ public Builder storageId(String storageId) {
+ this.storageId = storageId;
+ return this;
+ }
- public RollbackPayload build() {
- return RollbackPayload.create(snapshotId, storageId);
- }
- }
+ public RollbackPayload build() {
+ return RollbackPayload.create(snapshotId, storageId);
+ }
+ }
}
}
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Storage.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Storage.java b/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Storage.java
index 827217b..21664a5 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Storage.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Storage.java
@@ -28,6 +28,7 @@ import org.jclouds.javax.annotation.Nullable;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
+import static org.jclouds.profitbricks.util.Passwords.isValidPassword;
@AutoValue
public abstract class Storage {
@@ -194,7 +195,8 @@ public abstract class Storage {
public abstract String profitBricksImagePassword();
public static CreatePayload create(String dataCenterId, float size, String name, String mountImageId, String imagePassword) {
- validateSize(size);
+ checkSize(size);
+ checkPassword(imagePassword);
return new AutoValue_Storage_Request_CreatePayload(dataCenterId, size, name, mountImageId, imagePassword);
}
@@ -258,7 +260,7 @@ public abstract class Storage {
public abstract String mountImageId();
public static UpdatePayload create(String id, Float size, String name, String mountImageId) {
- validateSize(size);
+ checkSize(size);
return new AutoValue_Storage_Request_UpdatePayload(id, size, name, mountImageId);
}
@@ -346,10 +348,15 @@ public abstract class Storage {
}
}
- private static void validateSize(Float size) {
+ private static void checkSize(Float size) {
if (size != null)
checkArgument(size > 1, "Storage size must be > 1GB");
+ }
+ private static void checkPassword(String password) {
+ if (password != null)
+ checkArgument(isValidPassword(password), "Password must be between 8 and 50 characters, "
+ + "only a-z, A-Z, 0-9 without characters i, I, l, o, O, w, W, y, Y, z, Z and 1, 0");
}
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/domain/internal/HotPluggable.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/domain/internal/HotPluggable.java b/profitbricks/src/main/java/org/jclouds/profitbricks/domain/internal/HotPluggable.java
new file mode 100644
index 0000000..98faf41
--- /dev/null
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/domain/internal/HotPluggable.java
@@ -0,0 +1,102 @@
+/*
+ * 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.jclouds.profitbricks.domain.internal;
+
+import org.jclouds.javax.annotation.Nullable;
+
+public interface HotPluggable {
+
+ @Nullable
+ Boolean isCpuHotPlug();
+
+ @Nullable
+ Boolean isCpuHotUnPlug();
+
+ @Nullable
+ Boolean isRamHotPlug();
+
+ @Nullable
+ Boolean isRamHotUnPlug();
+
+ @Nullable
+ Boolean isNicHotPlug();
+
+ @Nullable
+ Boolean isNicHotUnPlug();
+
+ @Nullable
+ Boolean isDiscVirtioHotPlug();
+
+ @Nullable
+ Boolean isDiscVirtioHotUnPlug();
+
+ public abstract static class Builder<B extends Builder, D extends HotPluggable> {
+
+ protected Boolean cpuHotPlug;
+ protected Boolean cpuHotUnPlug;
+ protected Boolean ramHotPlug;
+ protected Boolean ramHotUnPlug;
+ protected Boolean nicHotPlug;
+ protected Boolean nicHotUnPlug;
+ protected Boolean discVirtioHotPlug;
+ protected Boolean discVirtioHotUnPlug;
+
+ public B isCpuHotPlug(Boolean cpuHotPlug) {
+ this.cpuHotPlug = cpuHotPlug;
+ return self();
+ }
+
+ public B isCpuHotUnPlug(Boolean cpuHotUnplug) {
+ this.cpuHotUnPlug = cpuHotUnplug;
+ return self();
+ }
+
+ public B isRamHotPlug(Boolean ramHotPlug) {
+ this.ramHotPlug = ramHotPlug;
+ return self();
+ }
+
+ public B isRamHotUnPlug(Boolean ramHotUnplug) {
+ this.ramHotUnPlug = ramHotUnplug;
+ return self();
+ }
+
+ public B isNicHotPlug(Boolean nicHotPlug) {
+ this.nicHotPlug = nicHotPlug;
+ return self();
+ }
+
+ public B isNicHotUnPlug(Boolean nicHotUnPlug) {
+ this.nicHotUnPlug = nicHotUnPlug;
+ return self();
+ }
+
+ public B isDiscVirtioHotPlug(Boolean discVirtioHotPlug) {
+ this.discVirtioHotPlug = discVirtioHotPlug;
+ return self();
+ }
+
+ public B isDiscVirtioHotUnPlug(Boolean discVirtioHotUnPlug) {
+ this.discVirtioHotUnPlug = discVirtioHotUnPlug;
+ return self();
+ }
+
+ public abstract B self();
+
+ public abstract D build();
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/domain/internal/Provisionable.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/domain/internal/Provisionable.java b/profitbricks/src/main/java/org/jclouds/profitbricks/domain/internal/Provisionable.java
new file mode 100644
index 0000000..b81dc3b
--- /dev/null
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/domain/internal/Provisionable.java
@@ -0,0 +1,67 @@
+/*
+ * 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.jclouds.profitbricks.domain.internal;
+
+import org.jclouds.profitbricks.domain.Location;
+import org.jclouds.profitbricks.domain.OsType;
+
+public interface Provisionable extends HotPluggable {
+
+ String id();
+
+ String name();
+
+ float size(); // MB
+
+ Location location();
+
+ OsType osType();
+
+ public abstract static class Builder<B extends Builder, D extends Provisionable> extends HotPluggable.Builder<B, D> {
+
+ protected String id;
+ protected String name;
+ protected float size;
+ protected Location location;
+ protected OsType osType;
+
+ public B id(String id) {
+ this.id = id;
+ return self();
+ }
+
+ public B name(String name) {
+ this.name = name;
+ return self();
+ }
+
+ public B size(float size) {
+ this.size = size;
+ return self();
+ }
+
+ public B location(Location location) {
+ this.location = location;
+ return self();
+ }
+
+ public B osType(OsType osType) {
+ this.osType = osType;
+ return self();
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/domain/internal/ServerCommonProperties.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/domain/internal/ServerCommonProperties.java b/profitbricks/src/main/java/org/jclouds/profitbricks/domain/internal/ServerCommonProperties.java
index 7366fb1..382f2cf 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/domain/internal/ServerCommonProperties.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/domain/internal/ServerCommonProperties.java
@@ -16,30 +16,10 @@
*/
package org.jclouds.profitbricks.domain.internal;
-import org.jclouds.javax.annotation.Nullable;
-
/**
* An interface used as common data type for {@link org.jclouds.profitbricks.domain.Server.Builder}
*/
-public interface ServerCommonProperties {
-
- @Nullable
- Boolean isCpuHotPlug();
-
- @Nullable
- Boolean isRamHotPlug();
-
- @Nullable
- Boolean isNicHotPlug();
-
- @Nullable
- Boolean isNicHotUnPlug();
-
- @Nullable
- Boolean isDiscVirtioHotPlug();
-
- @Nullable
- Boolean isDiscVirtioHotUnPlug();
+public interface ServerCommonProperties extends HotPluggable {
String name();
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/features/LoadBalancerApi.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/features/LoadBalancerApi.java b/profitbricks/src/main/java/org/jclouds/profitbricks/features/LoadBalancerApi.java
index cbac54a..3d37183 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/features/LoadBalancerApi.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/features/LoadBalancerApi.java
@@ -80,7 +80,7 @@ public interface LoadBalancerApi {
@POST
@Named("loadbalancer:delete")
@Payload("<ws:deleteLoadBalancer><loadBalancerId>{id}</loadBalancerId></ws:deleteLoadBalancer>")
- boolean deleteLoadbalancer(@PayloadParam("id") String id);
+ boolean deleteLoadBalancer(@PayloadParam("id") String id);
@POST
@Named("loadbalancer:update")
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/firewall/FirewallListResponseHandler.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/firewall/FirewallListResponseHandler.java b/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/firewall/FirewallListResponseHandler.java
index b654801..df0d3e0 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/firewall/FirewallListResponseHandler.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/firewall/FirewallListResponseHandler.java
@@ -16,15 +16,15 @@
*/
package org.jclouds.profitbricks.http.parser.firewall;
-import com.google.common.collect.Lists;
-import com.google.inject.Inject;
-
import java.util.List;
import org.jclouds.profitbricks.domain.Firewall;
import org.jclouds.profitbricks.http.parser.firewall.rule.FirewallRuleListResponseHandler;
import org.xml.sax.SAXException;
+import com.google.inject.Inject;
+import com.google.common.collect.Lists;
+
public class FirewallListResponseHandler extends BaseFirewallResponseHandler<List<Firewall>> {
private List<Firewall> firewalls;
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/ipblock/IpBlockListResponseHandler.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/ipblock/IpBlockListResponseHandler.java b/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/ipblock/IpBlockListResponseHandler.java
index 6a0b419..3ef85b3 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/ipblock/IpBlockListResponseHandler.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/ipblock/IpBlockListResponseHandler.java
@@ -16,15 +16,15 @@
*/
package org.jclouds.profitbricks.http.parser.ipblock;
-import com.google.common.collect.Lists;
-import com.google.inject.Inject;
-
import java.util.List;
import org.jclouds.profitbricks.domain.IpBlock;
import org.jclouds.profitbricks.http.parser.publicip.PublicIpListResponseHandler;
import org.xml.sax.SAXException;
+import com.google.inject.Inject;
+import com.google.common.collect.Lists;
+
public class IpBlockListResponseHandler extends BaseIpBlockResponseHandler<List<IpBlock>> {
private final List<IpBlock> ipBlocks;
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/loadbalancer/BaseLoadBalancerResponseHandler.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/loadbalancer/BaseLoadBalancerResponseHandler.java b/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/loadbalancer/BaseLoadBalancerResponseHandler.java
index e093977..96256bb 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/loadbalancer/BaseLoadBalancerResponseHandler.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/loadbalancer/BaseLoadBalancerResponseHandler.java
@@ -16,9 +16,12 @@
*/
package org.jclouds.profitbricks.http.parser.loadbalancer;
+import static com.google.common.base.Preconditions.checkNotNull;
+
import java.util.Date;
-import org.jclouds.date.DateCodec;
-import org.jclouds.date.DateCodecFactory;
+
+import org.jclouds.date.DateService;
+import org.jclouds.profitbricks.domain.DataCenter;
import org.jclouds.profitbricks.domain.LoadBalancer;
import org.jclouds.profitbricks.domain.LoadBalancer.Algorithm;
import org.jclouds.profitbricks.domain.ProvisioningState;
@@ -34,23 +37,23 @@ public abstract class BaseLoadBalancerResponseHandler<T> extends BaseProfitBrick
protected final FirewallListResponseHandler firewallListResponseHandler;
protected LoadBalancer.Builder builder;
- protected final DateCodec dateCodec;
+ protected DataCenter.Builder dataCenterBuilder;
+
+ protected final DateService dateService;
protected boolean useBalancedServerParser = false;
protected boolean useFirewallParser = false;
- protected BaseLoadBalancerResponseHandler(DateCodecFactory dateCodec,
+ protected BaseLoadBalancerResponseHandler(DateService dateService,
ServerListResponseHandler balancedServerResponseHandler, FirewallListResponseHandler firewallResponseHandler) {
- if (dateCodec == null)
- throw new NullPointerException("DateCodecFactory cannot be null");
- if (balancedServerResponseHandler == null)
- throw new NullPointerException("BalancedServerResponseHandler cannot be null");
- if (firewallResponseHandler == null)
- throw new NullPointerException("FirewallListResponseHandler cannot be null");
+ checkNotNull(dateService, "DateService cannot be null");
+ checkNotNull(balancedServerResponseHandler, "BalancedServerResponseHandler cannot be null");
+ checkNotNull(firewallResponseHandler, "FirewallListResponseHandler cannot be null");
- this.dateCodec = dateCodec.iso8601();
+ this.dateService = dateService;
this.builder = LoadBalancer.builder();
+ this.dataCenterBuilder = DataCenter.builder();
this.balancedServerResponseHandler = balancedServerResponseHandler;
this.firewallListResponseHandler = firewallResponseHandler;
@@ -80,7 +83,7 @@ public abstract class BaseLoadBalancerResponseHandler<T> extends BaseProfitBrick
}
protected final Date textToIso8601Date() {
- return dateCodec.toDate(textToStringValue());
+ return dateService.iso8601DateOrSecondsDateParse(textToStringValue());
}
@Override
@@ -90,11 +93,11 @@ public abstract class BaseLoadBalancerResponseHandler<T> extends BaseProfitBrick
else if ("loadBalancerName".equals(qName))
builder.name(textToStringValue());
else if ("loadBalancerAlgorithm".equals(qName))
- builder.loadBalancerAlgorithm(Algorithm.fromValue(textToStringValue()));
+ builder.algorithm(Algorithm.fromValue(textToStringValue()));
else if ("dataCenterId".equals(qName))
- builder.dataCenterId(textToStringValue());
+ dataCenterBuilder.id(textToStringValue());
else if ("dataCenterVersion".equals(qName))
- builder.dataCenterVersion(textToStringValue());
+ dataCenterBuilder.version(textToIntValue());
else if ("internetAccess".equals(qName))
builder.internetAccess(textToBooleanValue());
else if ("ip".equals(qName))
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/loadbalancer/LoadBalancerListResponseHandler.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/loadbalancer/LoadBalancerListResponseHandler.java b/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/loadbalancer/LoadBalancerListResponseHandler.java
index 50c1bea..9c60d33 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/loadbalancer/LoadBalancerListResponseHandler.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/loadbalancer/LoadBalancerListResponseHandler.java
@@ -21,7 +21,8 @@ import com.google.inject.Inject;
import java.util.List;
-import org.jclouds.date.DateCodecFactory;
+import org.jclouds.date.DateService;
+import org.jclouds.profitbricks.domain.DataCenter;
import org.jclouds.profitbricks.domain.LoadBalancer;
import org.jclouds.profitbricks.http.parser.firewall.FirewallListResponseHandler;
import org.jclouds.profitbricks.http.parser.server.ServerListResponseHandler;
@@ -32,40 +33,46 @@ public class LoadBalancerListResponseHandler extends BaseLoadBalancerResponseHan
private final List<LoadBalancer> loadBalancers;
@Inject
- LoadBalancerListResponseHandler(DateCodecFactory dateCodec, ServerListResponseHandler balancedServerResponseHandler, FirewallListResponseHandler firewallListResponseHandler) {
- super(dateCodec, balancedServerResponseHandler, firewallListResponseHandler);
+ LoadBalancerListResponseHandler(DateService dateService, ServerListResponseHandler balancedServerResponseHandler, FirewallListResponseHandler firewallListResponseHandler) {
+ super(dateService, balancedServerResponseHandler, firewallListResponseHandler);
this.loadBalancers = Lists.newArrayList();
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
- if (useBalancedServerParser) {
+ if (useBalancedServerParser)
balancedServerResponseHandler.endElement(uri, localName, qName);
- } else if (useFirewallParser) {
+ else if (useFirewallParser)
firewallListResponseHandler.endElement(uri, localName, qName);
- } else {
+ else {
setPropertyOnEndTag(qName);
if ("return".equals(qName)) {
loadBalancers.add(builder
+ .dataCenter(dataCenterBuilder.build())
.firewalls(firewallListResponseHandler.getResult())
.balancedServers(balancedServerResponseHandler.getResult())
.build());
balancedServerResponseHandler.reset();
firewallListResponseHandler.reset();
+
builder = LoadBalancer.builder();
}
clearTextBuffer();
}
- if ("firewall".equals(qName)) {
+ if ("firewall".equals(qName))
useFirewallParser = false;
- } else if ("balancedServers".equals(qName)) {
+ else if ("balancedServers".equals(qName))
useBalancedServerParser = false;
- }
}
@Override
+ public void reset() {
+ this.dataCenterBuilder = DataCenter.builder();
+ }
+
+ @Override
public List<LoadBalancer> getResult() {
return loadBalancers;
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/loadbalancer/LoadBalancerResponseHandler.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/loadbalancer/LoadBalancerResponseHandler.java b/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/loadbalancer/LoadBalancerResponseHandler.java
index 8c79512..4a17535 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/loadbalancer/LoadBalancerResponseHandler.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/loadbalancer/LoadBalancerResponseHandler.java
@@ -17,7 +17,8 @@
package org.jclouds.profitbricks.http.parser.loadbalancer;
import com.google.inject.Inject;
-import org.jclouds.date.DateCodecFactory;
+
+import org.jclouds.date.DateService;
import org.jclouds.profitbricks.domain.LoadBalancer;
import org.jclouds.profitbricks.http.parser.firewall.FirewallListResponseHandler;
import org.jclouds.profitbricks.http.parser.server.ServerListResponseHandler;
@@ -28,8 +29,9 @@ public class LoadBalancerResponseHandler extends BaseLoadBalancerResponseHandler
private boolean done = false;
@Inject
- LoadBalancerResponseHandler(DateCodecFactory dateCodec, ServerListResponseHandler serverListResponseHandler, FirewallListResponseHandler firewallListResponseHandler) {
- super(dateCodec, serverListResponseHandler, firewallListResponseHandler);
+ LoadBalancerResponseHandler(DateService dateService, ServerListResponseHandler serverListResponseHandler,
+ FirewallListResponseHandler firewallListResponseHandler) {
+ super(dateService, serverListResponseHandler, firewallListResponseHandler);
}
@Override
@@ -45,8 +47,9 @@ public class LoadBalancerResponseHandler extends BaseLoadBalancerResponseHandler
setPropertyOnEndTag(qName);
if ("return".equals(qName)) {
done = true;
- builder.balancedServers(balancedServerResponseHandler.getResult());
- builder.firewalls(firewallListResponseHandler.getResult());
+ builder.dataCenter(dataCenterBuilder.build())
+ .balancedServers(balancedServerResponseHandler.getResult())
+ .firewalls(firewallListResponseHandler.getResult());
}
clearTextBuffer();
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/BaseServerResponseHandler.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/BaseServerResponseHandler.java b/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/BaseServerResponseHandler.java
index 60fb4bf..37aabd5 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/BaseServerResponseHandler.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/BaseServerResponseHandler.java
@@ -16,10 +16,13 @@
*/
package org.jclouds.profitbricks.http.parser.server;
+import static com.google.common.base.Preconditions.checkNotNull;
+
import java.util.Date;
-import org.jclouds.date.DateCodec;
-import org.jclouds.date.DateCodecFactory;
+
+import org.jclouds.date.DateService;
import org.jclouds.profitbricks.domain.AvailabilityZone;
+import org.jclouds.profitbricks.domain.DataCenter;
import org.jclouds.profitbricks.domain.OsType;
import org.jclouds.profitbricks.domain.ProvisioningState;
import org.jclouds.profitbricks.domain.Server;
@@ -31,29 +34,28 @@ import org.xml.sax.SAXException;
public abstract class BaseServerResponseHandler<T> extends BaseProfitBricksResponseHandler<T> {
- protected StorageListResponseHandler storageListResponseHandler;
- protected NicListResponseHandler nicListResponseHandler;
+ protected final StorageListResponseHandler storageListResponseHandler;
+ protected final NicListResponseHandler nicListResponseHandler;
+ protected DataCenter.Builder dataCenterBuilder;
protected Server.DescribingBuilder builder;
- protected final DateCodec dateCodec;
+ protected final DateService dateService;
protected boolean useStorageParser = false;
protected boolean useNicParser = false;
- BaseServerResponseHandler(DateCodecFactory dateCodec, StorageListResponseHandler storageListResponseHandler,
+ BaseServerResponseHandler(DateService dateService, StorageListResponseHandler storageListResponseHandler,
NicListResponseHandler nicListResponseHandler) {
- if (dateCodec == null)
- throw new NullPointerException("DateCodecFactory cannot be null");
- if (storageListResponseHandler == null)
- throw new NullPointerException("StorageListResponseHandler cannot be null");
- if (nicListResponseHandler == null)
- throw new NullPointerException("NicListResponseHandler cannot be null");
-
- this.dateCodec = dateCodec.iso8601();
+ checkNotNull(dateService, "DateService cannot be null");
+ checkNotNull(storageListResponseHandler, "StorageListResponseHandler cannot be null");
+ checkNotNull(nicListResponseHandler, "NicListResponseHandler cannot be null");
+
+ this.dateService = dateService;
this.storageListResponseHandler = storageListResponseHandler;
this.nicListResponseHandler = nicListResponseHandler;
this.builder = Server.builder();
+ this.dataCenterBuilder = DataCenter.builder();
}
@Override
@@ -82,12 +84,16 @@ public abstract class BaseServerResponseHandler<T> extends BaseProfitBricksRespo
}
protected final Date textToIso8601Date() {
- return dateCodec.toDate(textToStringValue());
+ return dateService.iso8601DateOrSecondsDateParse(textToStringValue());
}
@Override
protected void setPropertyOnEndTag(String qName) {
- if ("serverId".equals(qName))
+ if ("dataCenterId".equals(qName))
+ dataCenterBuilder.id(textToStringValue());
+ else if ("dataCenterVersion".equals(qName))
+ dataCenterBuilder.version(textToIntValue());
+ else if ("serverId".equals(qName))
builder.id(textToStringValue());
else if ("serverName".equals(qName))
builder.name(textToStringValue());
@@ -122,7 +128,7 @@ public abstract class BaseServerResponseHandler<T> extends BaseProfitBricksRespo
else if ("discVirtioHotUnPlug".equals(qName))
builder.isDiscVirtioHotUnPlug(textToBooleanValue());
else if ("activate".equals(qName))
- builder.activate(textToBooleanValue());
+ builder.loadBalanced(textToBooleanValue());
else if ("balancedNicId".equals(qName))
builder.balancedNicId(textToStringValue());
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/ServerInfoResponseHandler.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/ServerInfoResponseHandler.java b/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/ServerInfoResponseHandler.java
index 68ee696..016e164 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/ServerInfoResponseHandler.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/ServerInfoResponseHandler.java
@@ -18,7 +18,7 @@ package org.jclouds.profitbricks.http.parser.server;
import com.google.inject.Inject;
-import org.jclouds.date.DateCodecFactory;
+import org.jclouds.date.DateService;
import org.jclouds.profitbricks.domain.Server;
import org.jclouds.profitbricks.http.parser.nic.NicListResponseHandler;
import org.jclouds.profitbricks.http.parser.storage.StorageListResponseHandler;
@@ -29,9 +29,9 @@ public class ServerInfoResponseHandler extends BaseServerResponseHandler<Server>
private boolean done = false;
@Inject
- ServerInfoResponseHandler(DateCodecFactory dateCodec, StorageListResponseHandler storageListResponseHandler,
+ ServerInfoResponseHandler(DateService dateService, StorageListResponseHandler storageListResponseHandler,
NicListResponseHandler nicListResponseHandler) {
- super(dateCodec, storageListResponseHandler, nicListResponseHandler);
+ super(dateService, storageListResponseHandler, nicListResponseHandler);
}
@Override
@@ -48,6 +48,7 @@ public class ServerInfoResponseHandler extends BaseServerResponseHandler<Server>
if ("return".equals(qName)) {
done = true;
builder
+ .dataCenter(dataCenterBuilder.build())
.storages(storageListResponseHandler.getResult())
.nics(nicListResponseHandler.getResult());
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/ServerListResponseHandler.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/ServerListResponseHandler.java b/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/ServerListResponseHandler.java
index 362e378..24a5daa 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/ServerListResponseHandler.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/server/ServerListResponseHandler.java
@@ -21,7 +21,8 @@ import com.google.inject.Inject;
import java.util.List;
-import org.jclouds.date.DateCodecFactory;
+import org.jclouds.date.DateService;
+import org.jclouds.profitbricks.domain.DataCenter;
import org.jclouds.profitbricks.domain.Server;
import org.jclouds.profitbricks.http.parser.nic.NicListResponseHandler;
import org.jclouds.profitbricks.http.parser.storage.StorageListResponseHandler;
@@ -32,9 +33,9 @@ public class ServerListResponseHandler extends BaseServerResponseHandler<List<Se
private List<Server> servers;
@Inject
- ServerListResponseHandler(DateCodecFactory dateCodec, StorageListResponseHandler storageListResponseHandler,
+ ServerListResponseHandler(DateService dateService, StorageListResponseHandler storageListResponseHandler,
NicListResponseHandler nicListResponseHandler) {
- super(dateCodec, storageListResponseHandler, nicListResponseHandler);
+ super(dateService, storageListResponseHandler, nicListResponseHandler);
this.servers = Lists.newArrayList();
}
@@ -48,10 +49,18 @@ public class ServerListResponseHandler extends BaseServerResponseHandler<List<Se
else {
setPropertyOnEndTag(qName);
if ("return".equals(qName) || "servers".equals(qName) || "balancedServers".equals(qName)) {
- servers.add(builder
- .storages(storageListResponseHandler.getResult())
- .nics(nicListResponseHandler.getResult())
- .build());
+ Server.DescribingBuilder sdb = null;
+ try {
+ sdb = builder
+ .storages(storageListResponseHandler.getResult())
+ .nics(nicListResponseHandler.getResult());
+ servers.add(sdb
+ // For LoadBalancer's case, there's no DataCenter (may throw NPE on #build()).
+ .dataCenter(dataCenterBuilder.build())
+ .build());
+ } catch (NullPointerException ex) {
+ servers.add(sdb.build());
+ }
storageListResponseHandler.reset();
nicListResponseHandler.reset();
@@ -69,6 +78,7 @@ public class ServerListResponseHandler extends BaseServerResponseHandler<List<Se
@Override
public void reset() {
this.servers = Lists.newArrayList();
+ this.dataCenterBuilder = DataCenter.builder();
}
@Override
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/snapshot/BaseSnapshotResponseHandler.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/snapshot/BaseSnapshotResponseHandler.java b/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/snapshot/BaseSnapshotResponseHandler.java
index 0fa7fd6..aa27199 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/snapshot/BaseSnapshotResponseHandler.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/snapshot/BaseSnapshotResponseHandler.java
@@ -17,8 +17,8 @@
package org.jclouds.profitbricks.http.parser.snapshot;
import java.util.Date;
-import org.jclouds.date.DateCodec;
-import org.jclouds.date.DateCodecFactory;
+
+import org.jclouds.date.DateService;
import org.jclouds.profitbricks.domain.Location;
import org.jclouds.profitbricks.domain.OsType;
import org.jclouds.profitbricks.domain.ProvisioningState;
@@ -29,55 +29,55 @@ public abstract class BaseSnapshotResponseHandler<T> extends BaseProfitBricksRes
protected Snapshot.Builder builder;
- protected final DateCodec dateCodec;
+ protected final DateService dateService;
- BaseSnapshotResponseHandler(DateCodecFactory dateCodec) {
- this.dateCodec = dateCodec.iso8601();
+ BaseSnapshotResponseHandler(DateService dateService) {
+ this.dateService = dateService;
this.builder = Snapshot.builder();
}
protected final Date textToIso8601Date() {
- return dateCodec.toDate(textToStringValue());
+ return dateService.iso8601DateOrSecondsDateParse(textToStringValue());
}
@Override
protected void setPropertyOnEndTag(String qName) {
if ("snapshotId".equals(qName))
- builder.id(textToStringValue());
+ builder.id(textToStringValue());
else if ("snapshotName".equals(qName))
- builder.name(textToStringValue());
+ builder.name(textToStringValue());
else if ("snapshotSize".equals(qName))
- builder.size(textToFloatValue());
+ builder.size(textToFloatValue());
else if ("osType".equals(qName))
- builder.osType(OsType.fromValue(textToStringValue()));
+ builder.osType(OsType.fromValue(textToStringValue()));
else if ("location".equals(qName))
- builder.location(Location.fromId(textToStringValue()));
+ builder.location(Location.fromId(textToStringValue()));
else if ("description".equals(qName))
- builder.description(qName);
+ builder.description(qName);
else if ("bootable".equals(qName))
- builder.bootable(textToBooleanValue());
+ builder.isBootable(textToBooleanValue());
else if ("cpuHotPlug".equals(qName))
- builder.cpuHotPlug(textToBooleanValue());
+ builder.isCpuHotPlug(textToBooleanValue());
else if ("cpuHotUnPlug".equals(qName))
- builder.cpuHotUnPlug(textToBooleanValue());
+ builder.isCpuHotUnPlug(textToBooleanValue());
else if ("ramHotPlug".equals(qName))
- builder.ramHotPlug(textToBooleanValue());
+ builder.isRamHotPlug(textToBooleanValue());
else if ("ramHotUnPlug".equals(qName))
- builder.ramHotUnPlug(textToBooleanValue());
+ builder.isRamHotUnPlug(textToBooleanValue());
else if ("nicHotPlug".equals(qName))
- builder.nicHotPlug(textToBooleanValue());
+ builder.isNicHotPlug(textToBooleanValue());
else if ("nicHotUnPlug".equals(qName))
- builder.nicHotUnPlug(textToBooleanValue());
+ builder.isNicHotUnPlug(textToBooleanValue());
else if ("discVirtioHotPlug".equals(qName))
- builder.discVirtioHotPlug(textToBooleanValue());
+ builder.isDiscVirtioHotPlug(textToBooleanValue());
else if ("discVirtioHotUnPlug".equals(qName))
- builder.discVirtioHotUnPlug(textToBooleanValue());
+ builder.isDiscVirtioHotUnPlug(textToBooleanValue());
else if ("provisioningState".equals(qName))
- builder.state(ProvisioningState.fromValue(textToStringValue()));
+ builder.state(ProvisioningState.fromValue(textToStringValue()));
else if ("creationTimestamp".equals(qName))
- builder.creationTime(textToIso8601Date());
+ builder.creationTime(textToIso8601Date());
else if ("modificationTimestamp".equals(qName))
- builder.lastModificationTime(textToIso8601Date());
+ builder.lastModificationTime(textToIso8601Date());
}
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/snapshot/SnapshotListResponseHandler.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/snapshot/SnapshotListResponseHandler.java b/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/snapshot/SnapshotListResponseHandler.java
index ae7a355..27e8583 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/snapshot/SnapshotListResponseHandler.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/snapshot/SnapshotListResponseHandler.java
@@ -18,19 +18,21 @@ package org.jclouds.profitbricks.http.parser.snapshot;
import com.google.common.collect.Lists;
import com.google.inject.Inject;
+
import org.jclouds.profitbricks.domain.Snapshot;
import org.xml.sax.SAXException;
import java.util.List;
-import org.jclouds.date.DateCodecFactory;
+
+import org.jclouds.date.DateService;
public class SnapshotListResponseHandler extends BaseSnapshotResponseHandler<List<Snapshot>> {
private final List<Snapshot> snapshots;
@Inject
- SnapshotListResponseHandler(DateCodecFactory dateCodec) {
- super(dateCodec);
+ SnapshotListResponseHandler(DateService dateService) {
+ super(dateService);
this.snapshots = Lists.newArrayList();
}
@@ -38,8 +40,8 @@ public class SnapshotListResponseHandler extends BaseSnapshotResponseHandler<Lis
public void endElement(String uri, String localName, String qName) throws SAXException {
setPropertyOnEndTag(qName);
if ("return".equals(qName)) {
- snapshots.add(builder.build());
- builder = Snapshot.builder();
+ snapshots.add(builder.build());
+ builder = Snapshot.builder();
}
clearTextBuffer();
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d07fcb17/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/snapshot/SnapshotResponseHandler.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/snapshot/SnapshotResponseHandler.java b/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/snapshot/SnapshotResponseHandler.java
index 84316f8..c57e385 100644
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/snapshot/SnapshotResponseHandler.java
+++ b/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/snapshot/SnapshotResponseHandler.java
@@ -17,7 +17,8 @@
package org.jclouds.profitbricks.http.parser.snapshot;
import com.google.inject.Inject;
-import org.jclouds.date.DateCodecFactory;
+
+import org.jclouds.date.DateService;
import org.jclouds.profitbricks.domain.Snapshot;
import org.xml.sax.SAXException;
@@ -26,17 +27,17 @@ public class SnapshotResponseHandler extends BaseSnapshotResponseHandler<Snapsho
private boolean done = false;
@Inject
- SnapshotResponseHandler(DateCodecFactory dateCodec) {
- super(dateCodec);
+ SnapshotResponseHandler(DateService dateService) {
+ super(dateService);
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if (done)
- return;
+ return;
setPropertyOnEndTag(qName);
if ("return".equals(qName))
- done = true;
+ done = true;
clearTextBuffer();
}