You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ab...@apache.org on 2013/07/29 19:36:52 UTC
[8/8] git commit: JCLOUDS-192. Move GCE to API v1beta15 - no new APIs
added other than Zone/GlobalOperations,
which are needed for zone-scoping changes.
JCLOUDS-192. Move GCE to API v1beta15 - no new APIs added other than Zone/GlobalOperations, which are needed for zone-scoping changes.
Project: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/commit/1b30e222
Tree: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/tree/1b30e222
Diff: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/diff/1b30e222
Branch: refs/heads/1.6.x
Commit: 1b30e222f476f27151543ed26bb2d6a825fc4a1c
Parents: 8439e57
Author: Andrew Bayer <an...@gmail.com>
Authored: Wed Jul 24 12:51:28 2013 -0700
Committer: Andrew Bayer <an...@gmail.com>
Committed: Fri Jul 26 16:40:10 2013 -0700
----------------------------------------------------------------------
google-compute-engine/pom.xml | 4 +-
.../GoogleComputeEngineApi.java | 31 ++-
.../GoogleComputeEngineApiMetadata.java | 32 +--
.../GoogleComputeEngineConstants.java | 8 +-
.../compute/GoogleComputeEngineService.java | 44 ++--
.../GoogleComputeEngineServiceAdapter.java | 168 +++++++++----
...GoogleComputeEngineServiceContextModule.java | 149 +++++++-----
.../functions/BuildInstanceMetadata.java | 11 +-
.../GoogleComputeEngineImageToImage.java | 25 +-
.../functions/InstanceInZoneToNodeMetadata.java | 117 +++++++++
.../functions/InstanceToNodeMetadata.java | 111 ---------
.../functions/MachineTypeInZoneToHardware.java | 100 ++++++++
.../functions/MachineTypeToHardware.java | 57 -----
.../functions/OrphanedGroupsFromDeadNodes.java | 12 +-
.../compute/functions/ZoneToLocation.java | 9 +-
.../GoogleComputeEngineTemplateOptions.java | 17 +-
.../predicates/AllNodesInGroupTerminated.java | 13 +-
...desWithGroupEncodedIntoNameThenAddToSet.java | 48 ++--
...DefaultLoginCredentialsForImageStrategy.java | 18 +-
...eNodeCredentialsButOverrideFromTemplate.java | 9 +-
.../GoogleComputeEngineHttpApiModule.java | 60 +++--
.../config/GoogleComputeEngineParserModule.java | 56 ++---
.../config/OAuthModuleWithoutTypeAdapters.java | 19 +-
.../googlecomputeengine/config/UserProject.java | 3 +-
.../domain/AbstractDisk.java | 122 ++++++++++
.../googlecomputeengine/domain/Disk.java | 71 ++----
.../googlecomputeengine/domain/Firewall.java | 26 +-
.../googlecomputeengine/domain/Image.java | 218 +++++++++++++++--
.../googlecomputeengine/domain/Instance.java | 193 ++++++++++++---
.../domain/InstanceInZone.java | 55 +++++
.../domain/InstanceTemplate.java | 80 +------
.../googlecomputeengine/domain/Kernel.java | 6 +-
.../googlecomputeengine/domain/ListPage.java | 17 +-
.../googlecomputeengine/domain/MachineType.java | 119 +++++-----
.../domain/MachineTypeInZone.java | 55 +++++
.../googlecomputeengine/domain/Network.java | 12 +-
.../googlecomputeengine/domain/Operation.java | 77 ++++--
.../googlecomputeengine/domain/Project.java | 19 +-
.../googlecomputeengine/domain/Resource.java | 31 ++-
.../domain/SlashEncodedIds.java | 86 +++++++
.../googlecomputeengine/domain/Zone.java | 23 +-
.../googlecomputeengine/features/DiskApi.java | 56 ++---
.../features/FirewallApi.java | 34 +--
.../features/GlobalOperationApi.java | 235 +++++++++++++++++++
.../googlecomputeengine/features/ImageApi.java | 20 +-
.../features/InstanceApi.java | 214 ++++++++++++++---
.../googlecomputeengine/features/KernelApi.java | 16 +-
.../features/MachineTypeApi.java | 43 ++--
.../features/NetworkApi.java | 29 ++-
.../features/OperationApi.java | 159 -------------
.../features/ProjectApi.java | 6 +-
.../googlecomputeengine/features/ZoneApi.java | 2 +-
.../features/ZoneOperationApi.java | 164 +++++++++++++
.../functions/internal/BaseToPagedIterable.java | 15 +-
.../internal/BaseWithZoneToPagedIterable.java | 76 ++++++
.../functions/internal/PATCH.java | 3 +-
.../functions/internal/ParseDisks.java | 22 +-
.../functions/internal/ParseFirewalls.java | 14 +-
.../internal/ParseGlobalOperations.java | 66 ++++++
.../functions/internal/ParseImages.java | 14 +-
.../functions/internal/ParseInstances.java | 22 +-
.../functions/internal/ParseKernels.java | 14 +-
.../functions/internal/ParseMachineTypes.java | 19 +-
.../functions/internal/ParseNetworks.java | 14 +-
.../functions/internal/ParseOperations.java | 64 -----
.../functions/internal/ParseZoneOperations.java | 68 ++++++
.../functions/internal/ParseZones.java | 14 +-
.../handlers/FirewallBinder.java | 13 +-
.../GoogleComputeEngineErrorHandler.java | 8 +-
.../handlers/InstanceBinder.java | 24 +-
.../handlers/MetadataBinder.java | 11 +-
.../options/AttachDiskOptions.java | 113 +++++++++
.../options/FirewallOptions.java | 9 +-
.../options/ListOptions.java | 8 +-
.../GlobalOperationDonePredicate.java | 61 +++++
.../predicates/OperationDonePredicate.java | 60 -----
.../predicates/ZoneOperationDonePredicate.java | 71 ++++++
.../GoogleComputeEngineApiMetadataTest.java | 5 +-
.../PageSystemExpectTest.java | 14 +-
.../GoogleComputeEngineServiceExpectTest.java | 202 ++++++++--------
.../GoogleComputeEngineServiceLiveTest.java | 4 +-
.../GoogleComputeEngineImageToImageTest.java | 10 +-
.../OrphanedGroupsFromDeadNodesTest.java | 23 +-
.../features/DiskApiExpectTest.java | 51 ++--
.../features/DiskApiLiveTest.java | 15 +-
.../features/FirewallApiExpectTest.java | 62 ++---
.../features/FirewallApiLiveTest.java | 33 +--
.../features/GlobalOperationApiExpectTest.java | 161 +++++++++++++
.../features/GlobalOperationApiLiveTest.java | 94 ++++++++
.../features/ImageApiExpectTest.java | 33 ++-
.../features/ImageApiLiveTest.java | 19 +-
.../features/InstanceApiExpectTest.java | 100 ++++----
.../features/InstanceApiLiveTest.java | 56 +++--
.../features/KernelApiExpectTest.java | 18 +-
.../features/KernelApiLiveTest.java | 19 +-
.../features/MachineTypeApiExpectTest.java | 36 ++-
.../features/MachineTypeApiLiveTest.java | 23 +-
.../features/NetworkApiExpectTest.java | 30 +--
.../features/NetworkApiLiveTest.java | 4 +-
.../features/OperationApiExpectTest.java | 161 -------------
.../features/OperationApiLiveTest.java | 93 --------
.../features/ProjectApiExpectTest.java | 36 +--
.../features/ProjectApiLiveTest.java | 19 +-
.../features/ZoneApiExpectTest.java | 16 +-
.../features/ZoneApiLiveTest.java | 19 +-
.../features/ZoneOperationApiExpectTest.java | 196 ++++++++++++++++
.../GoogleComputeEngineErrorHandlerTest.java | 18 +-
.../BaseGoogleComputeEngineApiExpectTest.java | 4 +-
.../BaseGoogleComputeEngineApiLiveTest.java | 50 ++--
.../BaseGoogleComputeEngineExpectTest.java | 73 +++---
.../BaseGoogleComputeEngineParseTest.java | 5 +-
...leComputeEngineServiceContextExpectTest.java | 7 +-
.../parse/ParseDiskListTest.java | 18 +-
.../parse/ParseDiskTest.java | 13 +-
.../parse/ParseFirewallListTest.java | 16 +-
.../parse/ParseFirewallTest.java | 17 +-
.../parse/ParseImageListTest.java | 22 +-
.../parse/ParseImageTest.java | 13 +-
.../parse/ParseInstanceListTest.java | 14 +-
.../parse/ParseInstanceSerialOutputTest.java | 6 +-
.../parse/ParseInstanceTest.java | 24 +-
.../parse/ParseKernelListTest.java | 18 +-
.../parse/ParseKernelTest.java | 11 +-
.../parse/ParseMachineTypeListTest.java | 39 ++-
.../parse/ParseMachineTypeTest.java | 16 +-
.../parse/ParseMetadataTest.java | 7 +-
.../parse/ParseNetworkListTest.java | 12 +-
.../parse/ParseNetworkTest.java | 11 +-
.../parse/ParseOperationListTest.java | 15 +-
.../parse/ParseOperationTest.java | 16 +-
.../parse/ParseProjectTest.java | 14 +-
.../parse/ParseQuotaTest.java | 6 +-
.../parse/ParseZoneListTest.java | 18 +-
.../parse/ParseZoneTest.java | 11 +-
.../src/test/resources/disk_get.json | 16 +-
.../src/test/resources/disk_insert.json | 2 +-
.../src/test/resources/disk_list.json | 30 +--
.../src/test/resources/firewall_get.json | 52 ++--
.../src/test/resources/firewall_insert.json | 2 +-
.../src/test/resources/firewall_list.json | 106 ++++-----
.../src/test/resources/global_operation.json | 15 ++
.../test/resources/global_operation_list.json | 22 ++
.../src/test/resources/image_get.json | 26 +-
.../src/test/resources/image_insert.json | 5 +-
.../src/test/resources/image_list.json | 44 ++--
.../resources/image_list_multiple_page_1.json | 106 +++++----
.../resources/image_list_multiple_page_2.json | 98 ++++----
.../test/resources/image_list_single_page.json | 100 ++++----
.../resources/instance_add_access_config.json | 8 +-
.../src/test/resources/instance_get.json | 101 ++++----
.../src/test/resources/instance_insert.json | 2 +-
.../test/resources/instance_insert_simple.json | 2 +-
.../src/test/resources/instance_list.json | 111 ++++-----
.../instance_list_central1b_empty.json | 6 +
.../test/resources/instance_serial_port.json | 4 +-
.../src/test/resources/kernel.json | 12 +-
.../src/test/resources/kernel_list.json | 42 ++--
.../src/test/resources/logback.xml | 41 +++-
.../src/test/resources/machinetype.json | 39 +--
.../src/test/resources/machinetype_list.json | 94 +++++---
.../resources/machinetype_list_central1b.json | 43 ++++
.../machinetype_list_central1b_empty.json | 6 +
.../src/test/resources/network_get.json | 16 +-
.../src/test/resources/network_list.json | 30 +--
.../src/test/resources/operation.json | 10 +-
.../src/test/resources/operation_error.json | 22 +-
.../src/test/resources/operation_list.json | 42 ++--
.../src/test/resources/project.json | 130 +++++-----
.../src/test/resources/region_operation.json | 16 ++
.../test/resources/region_operation_list.json | 23 ++
.../src/test/resources/snapshot_get.json | 11 +
.../src/test/resources/zone_get.json | 30 +--
.../src/test/resources/zone_list.json | 76 +++---
.../src/test/resources/zone_list_short.json | 24 ++
.../src/test/resources/zone_operation.json | 16 ++
.../test/resources/zone_operation_error.json | 25 ++
.../src/test/resources/zone_operation_list.json | 23 ++
177 files changed, 4995 insertions(+), 2792 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/1b30e222/google-compute-engine/pom.xml
----------------------------------------------------------------------
diff --git a/google-compute-engine/pom.xml b/google-compute-engine/pom.xml
index da7ea53..4a9cbbc 100644
--- a/google-compute-engine/pom.xml
+++ b/google-compute-engine/pom.xml
@@ -34,7 +34,8 @@
<properties>
<test.google-compute-engine.identity>Email associated with the Google API client_id</test.google-compute-engine.identity>
<test.google-compute-engine.credential>Private key (PKCS12 file) associated with the Google API client_id</test.google-compute-engine.credential>
- <test.google-compute-engine.api-version>v1beta13</test.google-compute-engine.api-version>
+ <test.google-compute-engine.api-version>v1beta15</test.google-compute-engine.api-version>
+ <test.google-compute-engine.template>osFamily=GCEL,osVersionMatches=1[012].[01][04],locationId=us-central1-a,minRam=2048</test.google-compute-engine.template>
<test.google-compute-engine.build-version />
</properties>
@@ -115,6 +116,7 @@
<test.google-compute-engine.credential>${test.google-compute-engine.credential}</test.google-compute-engine.credential>
<test.google-compute-engine.api-version>${test.google-compute-engine.api-version}</test.google-compute-engine.api-version>
<test.google-compute-engine.build-version>${test.google-compute-engine.build-version}</test.google-compute-engine.build-version>
+ <test.google-compute-engine.template>${test.google-compute-engine.template}</test.google-compute-engine.template>
</systemPropertyVariables>
</configuration>
</execution>
http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/1b30e222/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/GoogleComputeEngineApi.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/GoogleComputeEngineApi.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/GoogleComputeEngineApi.java
index 2567f0b..5756198 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/GoogleComputeEngineApi.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/GoogleComputeEngineApi.java
@@ -23,14 +23,15 @@ import javax.ws.rs.PathParam;
import org.jclouds.googlecomputeengine.features.DiskApi;
import org.jclouds.googlecomputeengine.features.FirewallApi;
+import org.jclouds.googlecomputeengine.features.GlobalOperationApi;
import org.jclouds.googlecomputeengine.features.ImageApi;
import org.jclouds.googlecomputeengine.features.InstanceApi;
import org.jclouds.googlecomputeengine.features.KernelApi;
import org.jclouds.googlecomputeengine.features.MachineTypeApi;
import org.jclouds.googlecomputeengine.features.NetworkApi;
-import org.jclouds.googlecomputeengine.features.OperationApi;
import org.jclouds.googlecomputeengine.features.ProjectApi;
import org.jclouds.googlecomputeengine.features.ZoneApi;
+import org.jclouds.googlecomputeengine.features.ZoneOperationApi;
import org.jclouds.rest.annotations.Delegate;
import com.google.common.annotations.Beta;
@@ -41,7 +42,7 @@ import com.google.common.annotations.Beta;
* <p/>
*
* @author David Alves
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta13">api doc</a>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1beta15">api doc</a>
*/
@Beta
public interface GoogleComputeEngineApi extends Closeable {
@@ -65,6 +66,15 @@ public interface GoogleComputeEngineApi extends Closeable {
FirewallApi getFirewallApiForProject(@PathParam("project") String projectName);
/**
+ * Provides access to Global Operation features
+ *
+ * @param projectName the name of the project
+ */
+ @Delegate
+ @Path("/projects/{project}")
+ GlobalOperationApi getGlobalOperationApiForProject(@PathParam("project") String projectName);
+
+ /**
* Provides access to Image features
*
* @param projectName the name of the project
@@ -110,15 +120,6 @@ public interface GoogleComputeEngineApi extends Closeable {
NetworkApi getNetworkApiForProject(@PathParam("project") String projectName);
/**
- * Provides access to Operation features
- *
- * @param projectName the name of the project
- */
- @Delegate
- @Path("/projects/{project}")
- OperationApi getOperationApiForProject(@PathParam("project") String projectName);
-
- /**
* Provides access to Project features
*/
@Delegate
@@ -133,5 +134,13 @@ public interface GoogleComputeEngineApi extends Closeable {
@Path("/projects/{project}")
ZoneApi getZoneApiForProject(@PathParam("project") String projectName);
+ /**
+ * Provides access to Zone Operation features
+ *
+ * @param projectName the name of the project
+ */
+ @Delegate
+ @Path("/projects/{project}")
+ ZoneOperationApi getZoneOperationApiForProject(@PathParam("project") String projectName);
}
http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/1b30e222/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/GoogleComputeEngineApiMetadata.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/GoogleComputeEngineApiMetadata.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/GoogleComputeEngineApiMetadata.java
index c7e1f2a..0333f6c 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/GoogleComputeEngineApiMetadata.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/GoogleComputeEngineApiMetadata.java
@@ -41,7 +41,7 @@ import com.google.common.collect.ImmutableSet;
import com.google.inject.Module;
/**
- * Implementation of {@link ApiMetadata} for GoogleCompute v1beta13 API
+ * Implementation of {@link ApiMetadata} for GoogleCompute v1beta15 API
*
* @author David Alves
*/
@@ -77,21 +77,21 @@ public class GoogleComputeEngineApiMetadata extends BaseHttpApiMetadata<GoogleCo
protected Builder() {
id(GCE_PROVIDER_NAME)
- .name("Google Compute Engine Api")
- .identityName("Email associated with the Google API client_id")
- .credentialName("Private key literal associated with the Google API client_id")
- .documentation(URI.create("https://developers.google.com/compute/docs"))
- .version("v1beta13")
- .defaultEndpoint("https://www.googleapis.com/compute/v1beta13")
- .defaultProperties(GoogleComputeEngineApiMetadata.defaultProperties())
- .view(typeToken(ComputeServiceContext.class))
- .defaultModules(ImmutableSet.<Class<? extends Module>>builder()
- .add(GoogleComputeEngineHttpApiModule.class)
- .add(GoogleComputeEngineParserModule.class)
- .add(OAuthAuthenticationModule.class)
- .add(OAuthModuleWithoutTypeAdapters.class)
- .add(GoogleComputeEngineServiceContextModule.class)
- .build());
+ .name("Google Compute Engine Api")
+ .identityName("Email associated with the Google API client_id")
+ .credentialName("Private key literal associated with the Google API client_id")
+ .documentation(URI.create("https://developers.google.com/compute/docs"))
+ .version("v1beta15")
+ .defaultEndpoint("https://www.googleapis.com/compute/v1beta15")
+ .defaultProperties(GoogleComputeEngineApiMetadata.defaultProperties())
+ .view(typeToken(ComputeServiceContext.class))
+ .defaultModules(ImmutableSet.<Class<? extends Module>>builder()
+ .add(GoogleComputeEngineHttpApiModule.class)
+ .add(GoogleComputeEngineParserModule.class)
+ .add(OAuthAuthenticationModule.class)
+ .add(OAuthModuleWithoutTypeAdapters.class)
+ .add(GoogleComputeEngineServiceContextModule.class)
+ .build());
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/1b30e222/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/GoogleComputeEngineConstants.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/GoogleComputeEngineConstants.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/GoogleComputeEngineConstants.java
index dd83ce0..1334a32 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/GoogleComputeEngineConstants.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/GoogleComputeEngineConstants.java
@@ -16,11 +16,12 @@
*/
package org.jclouds.googlecomputeengine;
-import com.google.common.annotations.Beta;
import org.jclouds.domain.Location;
import org.jclouds.domain.LocationBuilder;
import org.jclouds.domain.LocationScope;
+import com.google.common.annotations.Beta;
+
/**
* @author David Alves
*/
@@ -37,6 +38,11 @@ public interface GoogleComputeEngineConstants {
public static final String COMPUTE_READONLY_SCOPE = "https://www.googleapis.com/auth/compute.readonly";
+ public static final String STORAGE_READONLY_SCOPE = "https://www.googleapis.com/auth/devstorage.read_only";
+
+ public static final String STORAGE_WRITEONLY_SCOPE = "https://www.googleapis.com/auth/devstorage.write_only";
+
+
/**
* The total time, in msecs, to wait for an operation to complete.
*/
http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/1b30e222/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineService.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineService.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineService.java
index 7e4690c..0d5b800 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineService.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineService.java
@@ -16,11 +16,23 @@
*/
package org.jclouds.googlecomputeengine.compute;
-import com.google.common.base.Function;
-import com.google.common.base.Optional;
-import com.google.common.base.Predicate;
-import com.google.common.base.Supplier;
-import com.google.common.util.concurrent.ListeningExecutorService;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_RUNNING;
+import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_SUSPENDED;
+import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_TERMINATED;
+import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.OPERATION_COMPLETE_INTERVAL;
+import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.OPERATION_COMPLETE_TIMEOUT;
+import static org.jclouds.util.Predicates2.retry;
+
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicReference;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Provider;
+
import org.jclouds.Constants;
import org.jclouds.collect.Memoized;
import org.jclouds.compute.ComputeServiceContext;
@@ -53,21 +65,11 @@ import org.jclouds.googlecomputeengine.domain.Operation;
import org.jclouds.http.HttpResponse;
import org.jclouds.scriptbuilder.functions.InitAdminAccess;
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Provider;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicReference;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static java.util.concurrent.TimeUnit.MILLISECONDS;
-import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_RUNNING;
-import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_SUSPENDED;
-import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_TERMINATED;
-import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.OPERATION_COMPLETE_INTERVAL;
-import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.OPERATION_COMPLETE_TIMEOUT;
-import static org.jclouds.util.Predicates2.retry;
+import com.google.common.base.Function;
+import com.google.common.base.Optional;
+import com.google.common.base.Predicate;
+import com.google.common.base.Supplier;
+import com.google.common.util.concurrent.ListeningExecutorService;
/**
* @author David Alves
@@ -115,7 +117,7 @@ public class GoogleComputeEngineService extends BaseComputeService {
GroupNamingConvention.Factory namingConvention,
GoogleComputeEngineApi api,
@UserProject Supplier<String> project,
- Predicate<AtomicReference<Operation>> operationDonePredicate,
+ @Named("global") Predicate<AtomicReference<Operation>> operationDonePredicate,
@Named(OPERATION_COMPLETE_INTERVAL) Long operationCompleteCheckInterval,
@Named(OPERATION_COMPLETE_TIMEOUT) Long operationCompleteCheckTimeout) {
http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/1b30e222/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceAdapter.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceAdapter.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceAdapter.java
index aaa6271..b949f13 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceAdapter.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceAdapter.java
@@ -16,53 +16,62 @@
*/
package org.jclouds.googlecomputeengine.compute;
-import com.google.common.base.Function;
-import com.google.common.base.Objects;
-import com.google.common.base.Predicate;
-import com.google.common.base.Supplier;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.util.concurrent.UncheckedTimeoutException;
-import com.google.inject.Inject;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.collect.Iterables.contains;
+import static com.google.common.collect.Iterables.filter;
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.GOOGLE_PROJECT;
+import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.OPERATION_COMPLETE_INTERVAL;
+import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.OPERATION_COMPLETE_TIMEOUT;
+import static org.jclouds.googlecomputeengine.domain.Instance.NetworkInterface.AccessConfig.Type;
+import static org.jclouds.util.Predicates2.retry;
+
+import java.net.URI;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
+
+import javax.annotation.Resource;
+import javax.inject.Named;
+
+import org.jclouds.collect.Memoized;
import org.jclouds.compute.ComputeServiceAdapter;
import org.jclouds.compute.domain.Hardware;
import org.jclouds.compute.domain.Template;
import org.jclouds.compute.options.TemplateOptions;
import org.jclouds.compute.reference.ComputeServiceConstants;
+import org.jclouds.domain.Location;
import org.jclouds.domain.LoginCredentials;
import org.jclouds.googlecomputeengine.GoogleComputeEngineApi;
import org.jclouds.googlecomputeengine.compute.options.GoogleComputeEngineTemplateOptions;
import org.jclouds.googlecomputeengine.config.UserProject;
import org.jclouds.googlecomputeengine.domain.Image;
import org.jclouds.googlecomputeengine.domain.Instance;
+import org.jclouds.googlecomputeengine.domain.InstanceInZone;
import org.jclouds.googlecomputeengine.domain.InstanceTemplate;
import org.jclouds.googlecomputeengine.domain.MachineType;
+import org.jclouds.googlecomputeengine.domain.MachineTypeInZone;
import org.jclouds.googlecomputeengine.domain.Operation;
+import org.jclouds.googlecomputeengine.domain.SlashEncodedIds;
import org.jclouds.googlecomputeengine.domain.Zone;
import org.jclouds.http.HttpResponse;
import org.jclouds.logging.Logger;
-import javax.annotation.Resource;
-import javax.inject.Named;
-import java.net.URI;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicReference;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkState;
-import static com.google.common.collect.Iterables.contains;
-import static com.google.common.collect.Iterables.filter;
-import static java.util.concurrent.TimeUnit.MILLISECONDS;
-import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.GOOGLE_PROJECT;
-import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.OPERATION_COMPLETE_INTERVAL;
-import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.OPERATION_COMPLETE_TIMEOUT;
-import static org.jclouds.googlecomputeengine.domain.Instance.NetworkInterface.AccessConfig.Type;
-import static org.jclouds.util.Predicates2.retry;
+import com.google.common.base.Function;
+import com.google.common.base.Objects;
+import com.google.common.base.Predicate;
+import com.google.common.base.Supplier;
+import com.google.common.collect.FluentIterable;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.util.concurrent.UncheckedTimeoutException;
+import com.google.inject.Inject;
/**
* @author David Alves
*/
-public class GoogleComputeEngineServiceAdapter implements ComputeServiceAdapter<Instance, MachineType, Image, Zone> {
+public class GoogleComputeEngineServiceAdapter implements ComputeServiceAdapter<InstanceInZone, MachineTypeInZone, Image, Zone> {
@Resource
@Named(ComputeServiceConstants.COMPUTE_LOGGER)
@@ -70,6 +79,8 @@ public class GoogleComputeEngineServiceAdapter implements ComputeServiceAdapter<
private final GoogleComputeEngineApi api;
private final Supplier<String> userProject;
+ private final Supplier<Map<URI, ? extends Location>> zones;
+ private final Supplier<Map<URI, ? extends Hardware>> hardwareMap;
private final Function<TemplateOptions, ImmutableMap.Builder<String, String>> metatadaFromTemplateOptions;
private final Predicate<AtomicReference<Operation>> retryOperationDonePredicate;
private final long operationCompleteCheckInterval;
@@ -80,9 +91,11 @@ public class GoogleComputeEngineServiceAdapter implements ComputeServiceAdapter<
@UserProject Supplier<String> userProject,
Function<TemplateOptions,
ImmutableMap.Builder<String, String>> metatadaFromTemplateOptions,
- Predicate<AtomicReference<Operation>> operationDonePredicate,
+ @Named("zone") Predicate<AtomicReference<Operation>> operationDonePredicate,
@Named(OPERATION_COMPLETE_INTERVAL) Long operationCompleteCheckInterval,
- @Named(OPERATION_COMPLETE_TIMEOUT) Long operationCompleteCheckTimeout) {
+ @Named(OPERATION_COMPLETE_TIMEOUT) Long operationCompleteCheckTimeout,
+ @Memoized Supplier<Map<URI, ? extends Location>> zones,
+ @Memoized Supplier<Map<URI, ? extends Hardware>> hardwareMap) {
this.api = checkNotNull(api, "google compute api");
this.userProject = checkNotNull(userProject, "user project name");
this.metatadaFromTemplateOptions = checkNotNull(metatadaFromTemplateOptions,
@@ -93,21 +106,24 @@ public class GoogleComputeEngineServiceAdapter implements ComputeServiceAdapter<
"operation completed check timeout");
this.retryOperationDonePredicate = retry(operationDonePredicate, operationCompleteCheckTimeout,
operationCompleteCheckInterval, TimeUnit.MILLISECONDS);
+ this.zones = checkNotNull(zones, "zones");
+ this.hardwareMap = checkNotNull(hardwareMap, "hardwareMap");
}
@Override
- public NodeAndInitialCredentials<Instance> createNodeWithGroupEncodedIntoName(
- final String group, final String name, Template template) {
+ public NodeAndInitialCredentials<InstanceInZone> createNodeWithGroupEncodedIntoName(
+ final String group, final String name, final Template template) {
checkNotNull(template, "template");
GoogleComputeEngineTemplateOptions options = GoogleComputeEngineTemplateOptions.class.cast(template.getOptions()).clone();
checkState(options.getNetwork().isPresent(), "network was not present in template options");
Hardware hardware = checkNotNull(template.getHardware(), "hardware must be set");
- URI machineType = checkNotNull(hardware.getUri(), "hardware uri must be set");
+
+ checkNotNull(hardware.getUri(), "hardware must have a URI");
InstanceTemplate instanceTemplate = InstanceTemplate.builder()
- .forMachineType(machineType);
+ .forMachineType(hardware.getUri());
if (options.isEnableNat()) {
instanceTemplate.addNetworkInterface(options.getNetwork().get(), Type.ONE_TO_ONE_NAT);
@@ -119,12 +135,11 @@ public class GoogleComputeEngineServiceAdapter implements ComputeServiceAdapter<
ImmutableMap.Builder<String, String> metadataBuilder = metatadaFromTemplateOptions.apply(options);
instanceTemplate.metadata(metadataBuilder.build());
- instanceTemplate.tags(options.getTags());
instanceTemplate.serviceAccounts(options.getServiceAccounts());
instanceTemplate.image(checkNotNull(template.getImage().getUri(), "image URI is null"));
Operation operation = api.getInstanceApiForProject(userProject.get())
- .createInZone(name, instanceTemplate, template.getLocation().getId());
+ .createInZone(name, template.getLocation().getId(), instanceTemplate);
if (options.shouldBlockUntilRunning()) {
waitOperationDone(operation);
@@ -136,18 +151,52 @@ public class GoogleComputeEngineServiceAdapter implements ComputeServiceAdapter<
retry(new Predicate<AtomicReference<Instance>>() {
@Override
public boolean apply(AtomicReference<Instance> input) {
- input.set(api.getInstanceApiForProject(userProject.get()).get(name));
+ input.set(api.getInstanceApiForProject(userProject.get()).getInZone(template.getLocation().getId(),
+ name));
return input.get() != null;
}
}, operationCompleteCheckTimeout, operationCompleteCheckInterval, MILLISECONDS).apply(instance);
- return new NodeAndInitialCredentials<Instance>(instance.get(), name, credentials);
+ if (options.getTags().size() > 0) {
+ Operation tagsOperation = api.getInstanceApiForProject(userProject.get()).setTagsInZone(template.getLocation().getId(),
+ name, options.getTags(), instance.get().getTags().getFingerprint());
+
+ waitOperationDone(tagsOperation);
+
+ retry(new Predicate<AtomicReference<Instance>>() {
+ @Override
+ public boolean apply(AtomicReference<Instance> input) {
+ input.set(api.getInstanceApiForProject(userProject.get()).getInZone(template.getLocation().getId(),
+ name));
+ return input.get() != null;
+ }
+ }, operationCompleteCheckTimeout, operationCompleteCheckInterval, MILLISECONDS).apply(instance);
+ }
+
+ InstanceInZone instanceInZone = new InstanceInZone(instance.get(), template.getLocation().getId());
+
+ return new NodeAndInitialCredentials<InstanceInZone>(instanceInZone, instanceInZone.slashEncode(), credentials);
}
@Override
- public Iterable<MachineType> listHardwareProfiles() {
- return api.getMachineTypeApiForProject(userProject.get()).list().concat();
+ public Iterable<MachineTypeInZone> listHardwareProfiles() {
+ ImmutableSet.Builder<MachineTypeInZone> builder = ImmutableSet.builder();
+
+ for (final Location zone : zones.get().values()) {
+ builder.addAll(api.getMachineTypeApiForProject(userProject.get())
+ .listInZone(zone.getId())
+ .concat()
+ .transform(new Function<MachineType, MachineTypeInZone>() {
+
+ @Override
+ public MachineTypeInZone apply(MachineType arg0) {
+ return new MachineTypeInZone(arg0, arg0.getZone());
+ }
+ }));
+ }
+
+ return builder.build();
}
@Override
@@ -170,34 +219,57 @@ public class GoogleComputeEngineServiceAdapter implements ComputeServiceAdapter<
}
@Override
- public Instance getNode(String name) {
- return api.getInstanceApiForProject(userProject.get()).get(name);
+ public InstanceInZone getNode(String name) {
+ SlashEncodedIds slashEncodedIds = SlashEncodedIds.fromSlashEncoded(name);
+
+ Instance instance= api.getInstanceApiForProject(userProject.get()).getInZone(slashEncodedIds.getFirstId(),
+ slashEncodedIds.getSecondId());
+
+ return instance == null ? null : new InstanceInZone(instance, slashEncodedIds.getFirstId());
}
@Override
- public Iterable<Instance> listNodes() {
- return api.getInstanceApiForProject(userProject.get()).list().concat();
+ public Iterable<InstanceInZone> listNodes() {
+ return FluentIterable.from(zones.get().values()).transformAndConcat(new Function<Location, ImmutableSet<InstanceInZone>>() {
+ @Override
+ public ImmutableSet<InstanceInZone> apply(final Location input) {
+ return api.getInstanceApiForProject(userProject.get()).listInZone(input.getId()).concat()
+ .transform(new Function<Instance, InstanceInZone>() {
+
+ @Override
+ public InstanceInZone apply(Instance arg0) {
+ return new InstanceInZone(arg0, input.getId());
+ }
+ }).toSet();
+ }
+ }).toSet();
}
@Override
- public Iterable<Instance> listNodesByIds(final Iterable<String> ids) {
- return filter(listNodes(), new Predicate<Instance>() {
+ public Iterable<InstanceInZone> listNodesByIds(final Iterable<String> ids) {
+ return filter(listNodes(), new Predicate<InstanceInZone>() {
@Override
- public boolean apply(Instance instance) {
- return contains(ids, instance.getName());
+ public boolean apply(InstanceInZone instanceInZone) {
+ return contains(ids, instanceInZone.getInstance().getName());
}
});
}
@Override
public void destroyNode(final String name) {
- waitOperationDone(api.getInstanceApiForProject(userProject.get()).delete(name));
+ SlashEncodedIds slashEncodedIds = SlashEncodedIds.fromSlashEncoded(name);
+
+ waitOperationDone(api.getInstanceApiForProject(userProject.get()).deleteInZone(slashEncodedIds.getFirstId(),
+ slashEncodedIds.getSecondId()));
}
@Override
- public void rebootNode(String name) {
- throw new UnsupportedOperationException("reboot is not supported by GCE");
+ public void rebootNode(final String name) {
+ SlashEncodedIds slashEncodedIds = SlashEncodedIds.fromSlashEncoded(name);
+
+ waitOperationDone(api.getInstanceApiForProject(userProject.get()).resetInZone(slashEncodedIds.getFirstId(),
+ slashEncodedIds.getSecondId()));
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/1b30e222/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/config/GoogleComputeEngineServiceContextModule.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/config/GoogleComputeEngineServiceContextModule.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/config/GoogleComputeEngineServiceContextModule.java
index f3ecb6c..b0c04be 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/config/GoogleComputeEngineServiceContextModule.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/config/GoogleComputeEngineServiceContextModule.java
@@ -16,15 +16,19 @@
*/
package org.jclouds.googlecomputeengine.compute.config;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Function;
-import com.google.common.base.Optional;
-import com.google.common.base.Predicate;
-import com.google.common.base.Supplier;
-import com.google.common.collect.ImmutableMap;
-import com.google.inject.Injector;
-import com.google.inject.Provides;
-import com.google.inject.TypeLiteral;
+import static com.google.common.collect.Iterables.transform;
+import static com.google.common.collect.Maps.uniqueIndex;
+import static org.jclouds.Constants.PROPERTY_SESSION_INTERVAL;
+
+import java.net.URI;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
+
+import javax.inject.Named;
+import javax.inject.Singleton;
+
import org.jclouds.collect.Memoized;
import org.jclouds.compute.ComputeService;
import org.jclouds.compute.ComputeServiceAdapter;
@@ -40,8 +44,8 @@ import org.jclouds.googlecomputeengine.compute.GoogleComputeEngineService;
import org.jclouds.googlecomputeengine.compute.GoogleComputeEngineServiceAdapter;
import org.jclouds.googlecomputeengine.compute.functions.BuildInstanceMetadata;
import org.jclouds.googlecomputeengine.compute.functions.GoogleComputeEngineImageToImage;
-import org.jclouds.googlecomputeengine.compute.functions.InstanceToNodeMetadata;
-import org.jclouds.googlecomputeengine.compute.functions.MachineTypeToHardware;
+import org.jclouds.googlecomputeengine.compute.functions.InstanceInZoneToNodeMetadata;
+import org.jclouds.googlecomputeengine.compute.functions.MachineTypeInZoneToHardware;
import org.jclouds.googlecomputeengine.compute.functions.OrphanedGroupsFromDeadNodes;
import org.jclouds.googlecomputeengine.compute.functions.ZoneToLocation;
import org.jclouds.googlecomputeengine.compute.options.GoogleComputeEngineTemplateOptions;
@@ -52,22 +56,27 @@ import org.jclouds.googlecomputeengine.compute.strategy.UseNodeCredentialsButOve
import org.jclouds.googlecomputeengine.config.UserProject;
import org.jclouds.googlecomputeengine.domain.Image;
import org.jclouds.googlecomputeengine.domain.Instance;
-import org.jclouds.googlecomputeengine.domain.MachineType;
+import org.jclouds.googlecomputeengine.domain.InstanceInZone;
+import org.jclouds.googlecomputeengine.domain.MachineTypeInZone;
import org.jclouds.googlecomputeengine.domain.Zone;
+import org.jclouds.rest.AuthorizationException;
+import org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier;
-import javax.inject.Singleton;
-import java.net.URI;
-import java.util.Map;
-import java.util.Set;
-
-import static com.google.common.collect.Iterables.transform;
-import static com.google.common.collect.Maps.uniqueIndex;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Function;
+import com.google.common.base.Optional;
+import com.google.common.base.Predicate;
+import com.google.common.base.Supplier;
+import com.google.common.collect.ImmutableMap;
+import com.google.inject.Injector;
+import com.google.inject.Provides;
+import com.google.inject.TypeLiteral;
/**
* @author David Alves
*/
public class GoogleComputeEngineServiceContextModule
- extends ComputeServiceAdapterContextModule<Instance, MachineType, Image, Zone> {
+ extends ComputeServiceAdapterContextModule<InstanceInZone, MachineTypeInZone, Image, Zone> {
@Override
protected void configure() {
@@ -75,14 +84,14 @@ public class GoogleComputeEngineServiceContextModule
bind(ComputeService.class).to(GoogleComputeEngineService.class);
- bind(new TypeLiteral<ComputeServiceAdapter<Instance, MachineType, Image, Zone>>() {})
+ bind(new TypeLiteral<ComputeServiceAdapter<InstanceInZone, MachineTypeInZone, Image, Zone>>() {})
.to(GoogleComputeEngineServiceAdapter.class);
- bind(new TypeLiteral<Function<Instance, NodeMetadata>>() {})
- .to(InstanceToNodeMetadata.class);
+ bind(new TypeLiteral<Function<InstanceInZone, NodeMetadata>>() {})
+ .to(InstanceInZoneToNodeMetadata.class);
- bind(new TypeLiteral<Function<MachineType, Hardware>>() {})
- .to(MachineTypeToHardware.class);
+ bind(new TypeLiteral<Function<MachineTypeInZone, Hardware>>() {})
+ .to(MachineTypeInZoneToHardware.class);
bind(new TypeLiteral<Function<Image, org.jclouds.compute.domain.Image>>() {})
.to(GoogleComputeEngineImageToImage.class);
@@ -108,7 +117,7 @@ public class GoogleComputeEngineServiceContextModule
bind(PrioritizeCredentialsFromTemplate.class).to(UseNodeCredentialsButOverrideFromTemplate.class);
- install(new LocationsFromComputeServiceAdapterModule<Instance, MachineType, Image, Zone>() {});
+ install(new LocationsFromComputeServiceAdapterModule<InstanceInZone, MachineTypeInZone, Image, Zone>() {});
}
@@ -116,56 +125,68 @@ public class GoogleComputeEngineServiceContextModule
@Singleton
@Memoized
public Supplier<Map<URI, ? extends org.jclouds.compute.domain.Image>> provideImagesMap(
- final Supplier<Set<? extends org.jclouds.compute.domain.Image>> images) {
- return new Supplier<Map<URI, ? extends org.jclouds.compute.domain.Image>>() {
- @Override
- public Map<URI, ? extends org.jclouds.compute.domain.Image> get() {
- return uniqueIndex(images.get(), new Function<org.jclouds.compute.domain.Image, URI>() {
- @Override
- public URI apply(org.jclouds.compute.domain.Image input) {
- return input.getUri();
- }
- });
- }
- };
+ AtomicReference<AuthorizationException> authException,
+ final Supplier<Set<? extends org.jclouds.compute.domain.Image>> images,
+ @Named(PROPERTY_SESSION_INTERVAL) long seconds) {
+ return MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.create(authException,
+ new Supplier<Map<URI, ? extends org.jclouds.compute.domain.Image>>() {
+ @Override
+ public Map<URI, ? extends org.jclouds.compute.domain.Image> get() {
+ return uniqueIndex(images.get(), new Function<org.jclouds.compute.domain.Image, URI>() {
+ @Override
+ public URI apply(org.jclouds.compute.domain.Image input) {
+ return input.getUri();
+ }
+ });
+ }
+ },
+ seconds, TimeUnit.SECONDS);
}
@Provides
@Singleton
@Memoized
public Supplier<Map<URI, ? extends Hardware>> provideHardwaresMap(
- final Supplier<Set<? extends Hardware>> hardwares) {
- return new Supplier<Map<URI, ? extends Hardware>>() {
- @Override
- public Map<URI, ? extends Hardware> get() {
- return uniqueIndex(hardwares.get(), new Function<Hardware, URI>() {
- @Override
- public URI apply(Hardware input) {
- return input.getUri();
- }
- });
- }
- };
+ AtomicReference<AuthorizationException> authException,
+ final Supplier<Set<? extends Hardware>> hardwares,
+ @Named(PROPERTY_SESSION_INTERVAL) long seconds) {
+ return MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.create(authException,
+ new Supplier<Map<URI, ? extends Hardware>>() {
+ @Override
+ public Map<URI, ? extends Hardware> get() {
+ return uniqueIndex(hardwares.get(), new Function<Hardware, URI>() {
+ @Override
+ public URI apply(Hardware input) {
+ return input.getUri();
+ }
+ });
+ }
+ },
+ seconds, TimeUnit.SECONDS);
}
@Provides
@Singleton
@Memoized
- public Supplier<Map<URI, ? extends Location>> provideLocations(
+ public Supplier<Map<URI, ? extends Location>> provideZones(
+ AtomicReference<AuthorizationException> authException,
final GoogleComputeEngineApi api, final Function<Zone, Location> zoneToLocation,
- final @UserProject Supplier<String> userProject) {
- return new Supplier<Map<URI, ? extends Location>>() {
- @Override
- public Map<URI, ? extends Location> get() {
- return uniqueIndex(transform(api.getZoneApiForProject(userProject.get()).list().concat(), zoneToLocation),
- new Function<Location, URI>() {
- @Override
- public URI apply(Location input) {
- return (URI) input.getMetadata().get("selfLink");
- }
- });
- }
- };
+ final @UserProject Supplier<String> userProject,
+ @Named(PROPERTY_SESSION_INTERVAL) long seconds) {
+ return MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.create(authException,
+ new Supplier<Map<URI, ? extends Location>>() {
+ @Override
+ public Map<URI, ? extends Location> get() {
+ return uniqueIndex(transform(api.getZoneApiForProject(userProject.get()).list().concat(), zoneToLocation),
+ new Function<Location, URI>() {
+ @Override
+ public URI apply(Location input) {
+ return (URI) input.getMetadata().get("selfLink");
+ }
+ });
+ }
+ },
+ seconds, TimeUnit.SECONDS);
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/1b30e222/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/BuildInstanceMetadata.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/BuildInstanceMetadata.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/BuildInstanceMetadata.java
index 85837a7..27564e6 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/BuildInstanceMetadata.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/BuildInstanceMetadata.java
@@ -16,14 +16,15 @@
*/
package org.jclouds.googlecomputeengine.compute.functions;
-import com.google.common.base.Function;
-import com.google.common.collect.ImmutableMap;
-import org.jclouds.compute.options.TemplateOptions;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static java.lang.String.format;
import javax.inject.Singleton;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static java.lang.String.format;
+import org.jclouds.compute.options.TemplateOptions;
+
+import com.google.common.base.Function;
+import com.google.common.collect.ImmutableMap;
/**
* Prepares metadata from the provided TemplateOptions
http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/1b30e222/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/GoogleComputeEngineImageToImage.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/GoogleComputeEngineImageToImage.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/GoogleComputeEngineImageToImage.java
index ea5f893..f352879 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/GoogleComputeEngineImageToImage.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/GoogleComputeEngineImageToImage.java
@@ -16,21 +16,22 @@
*/
package org.jclouds.googlecomputeengine.compute.functions;
-import com.google.common.base.Function;
-import com.google.common.collect.Lists;
-import org.jclouds.compute.domain.ImageBuilder;
-import org.jclouds.compute.domain.OperatingSystem;
-import org.jclouds.compute.domain.OsFamily;
-import org.jclouds.googlecomputeengine.domain.Image;
-
-import java.util.List;
-
import static com.google.common.base.Joiner.on;
import static com.google.common.collect.Iterables.getLast;
import static com.google.common.collect.Iterables.limit;
import static com.google.common.collect.Iterables.skip;
import static org.jclouds.compute.domain.Image.Status;
-import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.GOOGLE_PROVIDER_LOCATION;
+
+import java.util.List;
+
+import org.jclouds.compute.domain.ImageBuilder;
+import org.jclouds.compute.domain.OperatingSystem;
+import org.jclouds.compute.domain.OsFamily;
+import org.jclouds.googlecomputeengine.domain.Image;
+
+import com.google.common.base.Function;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
/**
* Transforms a google compute domain specific image to a generic Image object.
@@ -48,7 +49,6 @@ public class GoogleComputeEngineImageToImage implements Function<Image, org.jclo
.providerId(image.getId())
.description(image.getDescription().orNull())
.status(Status.AVAILABLE)
- .location(GOOGLE_PROVIDER_LOCATION)
.uri(image.getSelfLink());
List<String> splits = Lists.newArrayList(image.getName().split("-"));
@@ -65,6 +65,9 @@ public class GoogleComputeEngineImageToImage implements Function<Image, org.jclo
String version = on(".").join(limit(skip(splits, 1), splits.size() - 2));
osBuilder.version(version);
+ if (image.getDeprecated().isPresent()) {
+ builder.userMetadata(ImmutableMap.of("deprecatedState", image.getDeprecated().get().getState().orNull()));
+ }
builder.version(getLast(splits));
return builder.operatingSystem(osBuilder.build()).build();
}
http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/1b30e222/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/InstanceInZoneToNodeMetadata.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/InstanceInZoneToNodeMetadata.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/InstanceInZoneToNodeMetadata.java
new file mode 100644
index 0000000..b59dfcc
--- /dev/null
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/InstanceInZoneToNodeMetadata.java
@@ -0,0 +1,117 @@
+/*
+ * 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.googlecomputeengine.compute.functions;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.net.URI;
+import java.util.Map;
+import java.util.Set;
+
+import javax.inject.Inject;
+
+import org.jclouds.collect.Memoized;
+import org.jclouds.compute.domain.Hardware;
+import org.jclouds.compute.domain.Image;
+import org.jclouds.compute.domain.NodeMetadata;
+import org.jclouds.compute.domain.NodeMetadataBuilder;
+import org.jclouds.compute.functions.GroupNamingConvention;
+import org.jclouds.domain.Location;
+import org.jclouds.googlecomputeengine.domain.Instance;
+import org.jclouds.googlecomputeengine.domain.InstanceInZone;
+import org.jclouds.googlecomputeengine.domain.SlashEncodedIds;
+
+import com.google.common.base.Function;
+import com.google.common.base.Supplier;
+import com.google.common.collect.ImmutableSet;
+
+/**
+ * Transforms a google compute domain Instance into a generic NodeMetatada object.
+ *
+ * @author David Alves
+ */
+public class InstanceInZoneToNodeMetadata implements Function<InstanceInZone, NodeMetadata> {
+
+ private final Map<Instance.Status, NodeMetadata.Status> toPortableNodeStatus;
+ private final GroupNamingConvention nodeNamingConvention;
+ private final Supplier<Map<URI, ? extends Image>> images;
+ private final Supplier<Map<URI, ? extends Hardware>> hardwares;
+ private final Supplier<Map<URI, ? extends Location>> locations;
+
+ @Inject
+ public InstanceInZoneToNodeMetadata(Map<Instance.Status, NodeMetadata.Status> toPortableNodeStatus,
+ GroupNamingConvention.Factory namingConvention,
+ @Memoized Supplier<Map<URI, ? extends Image>> images,
+ @Memoized Supplier<Map<URI, ? extends Hardware>> hardwares,
+ @Memoized Supplier<Map<URI, ? extends Location>> locations) {
+ this.toPortableNodeStatus = toPortableNodeStatus;
+ this.nodeNamingConvention = namingConvention.createWithoutPrefix();
+ this.images = images;
+ this.hardwares = hardwares;
+ this.locations = locations;
+ }
+
+ @Override
+ public NodeMetadata apply(InstanceInZone instanceInZone) {
+ Instance input = instanceInZone.getInstance();
+ Map<URI, ? extends Image> imagesMap = images.get();
+ Image image = checkNotNull(imagesMap.get(checkNotNull(input.getImage(), "image")),
+ "no image for %s. images: %s", input.getImage(), imagesMap.values());
+
+ return new NodeMetadataBuilder()
+ .id(SlashEncodedIds.fromTwoIds(checkNotNull(locations.get().get(input.getZone()), "location for %s", input.getZone()).getId(),
+ input.getName()).slashEncode())
+ .name(input.getName())
+ .providerId(input.getId())
+ .hostname(input.getName())
+ .imageId(image.getId())
+ .location(checkNotNull(locations.get().get(input.getZone()), "location for %s", input.getZone()))
+ .hardware(checkNotNull(hardwares.get().get(input.getMachineType()), "hardware type for %s",
+ input.getMachineType().toString()))
+ .operatingSystem(image.getOperatingSystem())
+ .status(toPortableNodeStatus.get(input.getStatus()))
+ .tags(input.getTags().getItems())
+ .uri(input.getSelfLink())
+ .userMetadata(input.getMetadata())
+ .group(nodeNamingConvention.groupInUniqueNameOrNull(input.getName()))
+ .privateAddresses(collectPrivateAddresses(input))
+ .publicAddresses(collectPublicAddresses(input))
+ .build();
+ }
+
+ private Set<String> collectPrivateAddresses(Instance input) {
+ ImmutableSet.Builder<String> privateAddressesBuilder = ImmutableSet.builder();
+ for (Instance.NetworkInterface networkInterface : input.getNetworkInterfaces()) {
+ if (networkInterface.getNetworkIP().isPresent()) {
+ privateAddressesBuilder.add(networkInterface.getNetworkIP().get());
+ }
+ }
+ return privateAddressesBuilder.build();
+ }
+
+ private Set<String> collectPublicAddresses(Instance input) {
+ ImmutableSet.Builder<String> publicAddressesBuilder = ImmutableSet.builder();
+ for (Instance.NetworkInterface networkInterface : input.getNetworkInterfaces()) {
+ for (Instance.NetworkInterface.AccessConfig accessConfig : networkInterface.getAccessConfigs()) {
+ if (accessConfig.getNatIP().isPresent()) {
+ publicAddressesBuilder.add(accessConfig.getNatIP().get());
+ }
+ }
+ }
+ return publicAddressesBuilder.build();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/1b30e222/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/InstanceToNodeMetadata.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/InstanceToNodeMetadata.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/InstanceToNodeMetadata.java
deleted file mode 100644
index 40be835..0000000
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/InstanceToNodeMetadata.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * 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.googlecomputeengine.compute.functions;
-
-import com.google.common.base.Function;
-import com.google.common.base.Supplier;
-import com.google.common.collect.ImmutableSet;
-import org.jclouds.collect.Memoized;
-import org.jclouds.compute.domain.Hardware;
-import org.jclouds.compute.domain.Image;
-import org.jclouds.compute.domain.NodeMetadata;
-import org.jclouds.compute.domain.NodeMetadataBuilder;
-import org.jclouds.compute.functions.GroupNamingConvention;
-import org.jclouds.domain.Location;
-import org.jclouds.googlecomputeengine.domain.Instance;
-
-import javax.inject.Inject;
-import java.net.URI;
-import java.util.Map;
-import java.util.Set;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * Transforms a google compute domain Instance into a generic NodeMetatada object.
- *
- * @author David Alves
- */
-public class InstanceToNodeMetadata implements Function<Instance, NodeMetadata> {
-
- private final Map<Instance.Status, NodeMetadata.Status> toPortableNodeStatus;
- private final GroupNamingConvention nodeNamingConvention;
- private final Supplier<Map<URI, ? extends Image>> images;
- private final Supplier<Map<URI, ? extends Hardware>> hardwares;
- private final Supplier<Map<URI, ? extends Location>> locations;
-
- @Inject
- public InstanceToNodeMetadata(Map<Instance.Status, NodeMetadata.Status> toPortableNodeStatus,
- GroupNamingConvention.Factory namingConvention,
- @Memoized Supplier<Map<URI, ? extends Image>> images,
- @Memoized Supplier<Map<URI, ? extends Hardware>> hardwares,
- @Memoized Supplier<Map<URI, ? extends Location>> locations) {
- this.toPortableNodeStatus = toPortableNodeStatus;
- this.nodeNamingConvention = namingConvention.createWithoutPrefix();
- this.images = images;
- this.hardwares = hardwares;
- this.locations = locations;
- }
-
- @Override
- public NodeMetadata apply(Instance input) {
- Map<URI, ? extends Image> imagesMap = images.get();
- Image image = checkNotNull(imagesMap.get(checkNotNull(input.getImage(), "image")),
- "no image for %s. images: %s", input.getImage(), imagesMap.values());
-
- return new NodeMetadataBuilder()
- .id(input.getName())
- .name(input.getName())
- .providerId(input.getId())
- .hostname(input.getName())
- .imageId(image.getId())
- .location(checkNotNull(locations.get().get(input.getZone()), "location for %s", input.getZone()))
- .hardware(checkNotNull(hardwares.get().get(input.getMachineType()), "hardware type for %s",
- input.getMachineType().toString()))
- .operatingSystem(image.getOperatingSystem())
- .status(toPortableNodeStatus.get(input.getStatus()))
- .tags(input.getTags())
- .uri(input.getSelfLink())
- .userMetadata(input.getMetadata())
- .group(nodeNamingConvention.groupInUniqueNameOrNull(input.getName()))
- .privateAddresses(collectPrivateAddresses(input))
- .publicAddresses(collectPublicAddresses(input))
- .build();
- }
-
- private Set<String> collectPrivateAddresses(Instance input) {
- ImmutableSet.Builder<String> privateAddressesBuilder = ImmutableSet.builder();
- for (Instance.NetworkInterface networkInterface : input.getNetworkInterfaces()) {
- if (networkInterface.getNetworkIP().isPresent()) {
- privateAddressesBuilder.add(networkInterface.getNetworkIP().get());
- }
- }
- return privateAddressesBuilder.build();
- }
-
- private Set<String> collectPublicAddresses(Instance input) {
- ImmutableSet.Builder<String> publicAddressesBuilder = ImmutableSet.builder();
- for (Instance.NetworkInterface networkInterface : input.getNetworkInterfaces()) {
- for (Instance.NetworkInterface.AccessConfig accessConfig : networkInterface.getAccessConfigs()) {
- if (accessConfig.getNatIP().isPresent()) {
- publicAddressesBuilder.add(accessConfig.getNatIP().get());
- }
- }
- }
- return publicAddressesBuilder.build();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/1b30e222/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/MachineTypeInZoneToHardware.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/MachineTypeInZoneToHardware.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/MachineTypeInZoneToHardware.java
new file mode 100644
index 0000000..959ad24
--- /dev/null
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/MachineTypeInZoneToHardware.java
@@ -0,0 +1,100 @@
+/*
+ * 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.googlecomputeengine.compute.functions;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.Iterables.filter;
+import static com.google.common.collect.Iterables.getOnlyElement;
+
+import java.net.URI;
+import java.util.Map;
+
+import org.jclouds.collect.Memoized;
+import org.jclouds.compute.domain.Hardware;
+import org.jclouds.compute.domain.HardwareBuilder;
+import org.jclouds.compute.domain.Image;
+import org.jclouds.compute.domain.Processor;
+import org.jclouds.compute.domain.Volume;
+import org.jclouds.compute.domain.VolumeBuilder;
+import org.jclouds.domain.Location;
+import org.jclouds.googlecomputeengine.domain.MachineType;
+import org.jclouds.googlecomputeengine.domain.MachineTypeInZone;
+import org.jclouds.googlecomputeengine.domain.SlashEncodedIds;
+
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.base.Supplier;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.inject.Inject;
+
+/**
+ * Transforms a google compute domain specific machine type to a generic Hardware object.
+ *
+ * @author David Alves
+ */
+public class MachineTypeInZoneToHardware implements Function<MachineTypeInZone, Hardware> {
+
+ private final Supplier<Map<URI, ? extends Location>> locations;
+
+ @Inject
+ public MachineTypeInZoneToHardware(@Memoized Supplier<Map<URI, ? extends Location>> locations) {
+ this.locations = locations;
+ }
+
+ @Override
+ public Hardware apply(final MachineTypeInZone input) {
+ Iterable<? extends Location> zonesForMachineType = filter(locations.get().values(), new Predicate<Location>() {
+ @Override
+ public boolean apply(Location l) {
+ return l.getId().equals(input.getMachineType().getZone());
+ }
+ });
+
+ Location location = checkNotNull(getOnlyElement(zonesForMachineType),
+ "location for %s",
+ input.getMachineType().getZone());
+ return new HardwareBuilder()
+ .id(SlashEncodedIds.fromTwoIds(input.getMachineType().getZone(), input.getMachineType().getName()).slashEncode())
+ .location(location)
+ .name(input.getMachineType().getName())
+ .hypervisor("kvm")
+ .processor(new Processor(input.getMachineType().getGuestCpus(), 1.0))
+ .providerId(input.getMachineType().getId())
+ .ram(input.getMachineType().getMemoryMb())
+ .uri(input.getMachineType().getSelfLink())
+ .userMetadata(ImmutableMap.of("imageSpaceGb", Integer.toString(input.getMachineType().getImageSpaceGb())))
+ .volumes(collectVolumes(input.getMachineType()))
+ .supportsImage(input.getMachineType().getImageSpaceGb() > 0
+ ? Predicates.<Image>alwaysTrue()
+ : Predicates.<Image>alwaysFalse())
+ .build();
+ }
+
+ private Iterable<Volume> collectVolumes(MachineType input) {
+ ImmutableSet.Builder<Volume> volumes = ImmutableSet.builder();
+ for (MachineType.ScratchDisk disk : input.getScratchDisks()) {
+ volumes.add(new VolumeBuilder()
+ .type(Volume.Type.LOCAL)
+ .size(new Integer(disk.getDiskGb()).floatValue())
+ .bootDevice(true)
+ .durable(false).build());
+ }
+ return volumes.build();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/1b30e222/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/MachineTypeToHardware.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/MachineTypeToHardware.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/MachineTypeToHardware.java
deleted file mode 100644
index 410c7ea..0000000
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/MachineTypeToHardware.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * 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.googlecomputeengine.compute.functions;
-
-import com.google.common.base.Function;
-import com.google.common.collect.ImmutableSet;
-import org.jclouds.compute.domain.Hardware;
-import org.jclouds.compute.domain.HardwareBuilder;
-import org.jclouds.compute.domain.Processor;
-import org.jclouds.compute.domain.Volume;
-import org.jclouds.compute.domain.internal.VolumeImpl;
-import org.jclouds.googlecomputeengine.domain.MachineType;
-
-/**
- * Transforms a google compute domain specific machine type to a generic Hardware object.
- *
- * @author David Alves
- */
-public class MachineTypeToHardware implements Function<MachineType, Hardware> {
-
- @Override
- public Hardware apply(MachineType input) {
- return new HardwareBuilder()
- .id(input.getName())
- .name(input.getName())
- .hypervisor("kvm")
- .processor(new Processor(input.getGuestCpus(), 1.0))
- .providerId(input.getId())
- .ram(input.getMemoryMb())
- .uri(input.getSelfLink())
- .volumes(collectVolumes(input))
- .build();
- }
-
- private Iterable<Volume> collectVolumes(MachineType input) {
- ImmutableSet.Builder<Volume> volumes = ImmutableSet.builder();
- for (MachineType.EphemeralDisk disk : input.getEphemeralDisks()) {
- volumes.add(new VolumeImpl(null, Volume.Type.LOCAL, new Integer(disk.getDiskGb()).floatValue(), null, true,
- false));
- }
- return volumes.build();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/1b30e222/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/OrphanedGroupsFromDeadNodes.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/OrphanedGroupsFromDeadNodes.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/OrphanedGroupsFromDeadNodes.java
index 9314298..f919697 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/OrphanedGroupsFromDeadNodes.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/OrphanedGroupsFromDeadNodes.java
@@ -16,14 +16,16 @@
*/
package org.jclouds.googlecomputeengine.compute.functions;
-import com.google.common.base.Function;
-import com.google.common.base.Predicate;
-import com.google.common.collect.Sets;
-import org.jclouds.compute.domain.NodeMetadata;
+import java.util.Set;
import javax.inject.Inject;
import javax.inject.Singleton;
-import java.util.Set;
+
+import org.jclouds.compute.domain.NodeMetadata;
+
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Sets;
/**
* @author David Alves
http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/1b30e222/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/ZoneToLocation.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/ZoneToLocation.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/ZoneToLocation.java
index 56dde56..be2df66 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/ZoneToLocation.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/ZoneToLocation.java
@@ -16,15 +16,16 @@
*/
package org.jclouds.googlecomputeengine.compute.functions;
-import com.google.common.base.Function;
-import com.google.common.collect.ImmutableMap;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.GOOGLE_PROVIDER_LOCATION;
+
import org.jclouds.domain.Location;
import org.jclouds.domain.LocationBuilder;
import org.jclouds.domain.LocationScope;
import org.jclouds.googlecomputeengine.domain.Zone;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.GOOGLE_PROVIDER_LOCATION;
+import com.google.common.base.Function;
+import com.google.common.collect.ImmutableMap;
/**
* Transforms a google compute domain specific zone to a generic Zone object.
http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/1b30e222/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/options/GoogleComputeEngineTemplateOptions.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/options/GoogleComputeEngineTemplateOptions.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/options/GoogleComputeEngineTemplateOptions.java
index 9d74d3c..b5d74ed 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/options/GoogleComputeEngineTemplateOptions.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/options/GoogleComputeEngineTemplateOptions.java
@@ -16,19 +16,20 @@
*/
package org.jclouds.googlecomputeengine.compute.options;
-import com.google.common.base.Optional;
-import com.google.common.collect.Sets;
-import org.jclouds.compute.options.TemplateOptions;
-import org.jclouds.domain.LoginCredentials;
-import org.jclouds.googlecomputeengine.domain.Instance;
-import org.jclouds.scriptbuilder.domain.Statement;
+import static com.google.common.base.Optional.fromNullable;
+import static org.jclouds.googlecomputeengine.domain.Instance.ServiceAccount;
import java.net.URI;
import java.util.Map;
import java.util.Set;
-import static com.google.common.base.Optional.fromNullable;
-import static org.jclouds.googlecomputeengine.domain.Instance.ServiceAccount;
+import org.jclouds.compute.options.TemplateOptions;
+import org.jclouds.domain.LoginCredentials;
+import org.jclouds.googlecomputeengine.domain.Instance;
+import org.jclouds.scriptbuilder.domain.Statement;
+
+import com.google.common.base.Optional;
+import com.google.common.collect.Sets;
/**
* Instance options specific to Google Compute Engine.
http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/1b30e222/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/predicates/AllNodesInGroupTerminated.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/predicates/AllNodesInGroupTerminated.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/predicates/AllNodesInGroupTerminated.java
index 72d0371..a52f9b0 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/predicates/AllNodesInGroupTerminated.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/predicates/AllNodesInGroupTerminated.java
@@ -16,12 +16,6 @@
*/
package org.jclouds.googlecomputeengine.compute.predicates;
-import com.google.common.base.Predicate;
-import org.jclouds.compute.ComputeService;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.collect.Iterables.all;
import static com.google.common.collect.Sets.filter;
@@ -29,6 +23,13 @@ import static org.jclouds.compute.predicates.NodePredicates.TERMINATED;
import static org.jclouds.compute.predicates.NodePredicates.all;
import static org.jclouds.compute.predicates.NodePredicates.inGroup;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import org.jclouds.compute.ComputeService;
+
+import com.google.common.base.Predicate;
+
/**
* @author David Alves
*/
http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/1b30e222/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/strategy/CreateNodesWithGroupEncodedIntoNameThenAddToSet.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/strategy/CreateNodesWithGroupEncodedIntoNameThenAddToSet.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/strategy/CreateNodesWithGroupEncodedIntoNameThenAddToSet.java
index b680607..5380313 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/strategy/CreateNodesWithGroupEncodedIntoNameThenAddToSet.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/strategy/CreateNodesWithGroupEncodedIntoNameThenAddToSet.java
@@ -16,12 +16,21 @@
*/
package org.jclouds.googlecomputeengine.compute.strategy;
-import com.google.common.base.Predicate;
-import com.google.common.base.Supplier;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Multimap;
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.ListeningExecutorService;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.collect.ImmutableSet.of;
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.OPERATION_COMPLETE_INTERVAL;
+import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.OPERATION_COMPLETE_TIMEOUT;
+import static org.jclouds.util.Predicates2.retry;
+
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicReference;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
import org.jclouds.Constants;
import org.jclouds.compute.config.CustomizationResponse;
import org.jclouds.compute.domain.NodeMetadata;
@@ -38,19 +47,12 @@ import org.jclouds.googlecomputeengine.domain.Network;
import org.jclouds.googlecomputeengine.domain.Operation;
import org.jclouds.googlecomputeengine.options.FirewallOptions;
-import javax.inject.Inject;
-import javax.inject.Named;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicReference;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkState;
-import static com.google.common.collect.ImmutableSet.of;
-import static java.util.concurrent.TimeUnit.MILLISECONDS;
-import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.OPERATION_COMPLETE_INTERVAL;
-import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.OPERATION_COMPLETE_TIMEOUT;
-import static org.jclouds.util.Predicates2.retry;
+import com.google.common.base.Predicate;
+import com.google.common.base.Supplier;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Multimap;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningExecutorService;
/**
* @author David Alves
@@ -78,7 +80,7 @@ public class CreateNodesWithGroupEncodedIntoNameThenAddToSet extends
customizeNodeAndAddToGoodMapOrPutExceptionIntoBadMapFactory,
GoogleComputeEngineApi api,
@UserProject Supplier<String> userProject,
- Predicate<AtomicReference<Operation>> operationDonePredicate,
+ @Named("global") Predicate<AtomicReference<Operation>> operationDonePredicate,
@Named(OPERATION_COMPLETE_INTERVAL) Long operationCompleteCheckInterval,
@Named(OPERATION_COMPLETE_TIMEOUT) Long operationCompleteCheckTimeout) {
super(addNodeWithGroupStrategy, listNodesStrategy, namingConvention, userExecutor,
@@ -127,7 +129,7 @@ public class CreateNodesWithGroupEncodedIntoNameThenAddToSet extends
if (network != null) {
return network;
} else if (templateOptions.getNetwork().isPresent()) {
- throw new IllegalArgumentException("requested network " + networkName + " does not exist");
+ throw new IllegalArgumentException("requested network " + networkName + " does not exist");
}
AtomicReference<Operation> operation = new AtomicReference<Operation>(api.getNetworkApiForProject(userProject
@@ -135,7 +137,7 @@ public class CreateNodesWithGroupEncodedIntoNameThenAddToSet extends
retry(operationDonePredicate, operationCompleteCheckTimeout, operationCompleteCheckInterval,
MILLISECONDS).apply(operation);
- checkState(!operation.get().getHttpError().isPresent(),"Could not create network, operation failed" + operation);
+ checkState(!operation.get().getHttpError().isPresent(), "Could not create network, operation failed" + operation);
return checkNotNull(api.getNetworkApiForProject(userProject.get()).get(sharedResourceName),
"no network with name %s was found", sharedResourceName);
@@ -186,7 +188,7 @@ public class CreateNodesWithGroupEncodedIntoNameThenAddToSet extends
retry(operationDonePredicate, operationCompleteCheckTimeout, operationCompleteCheckInterval,
MILLISECONDS).apply(operation);
- checkState(!operation.get().getHttpError().isPresent(),"Could not create firewall, operation failed" + operation);
+ checkState(!operation.get().getHttpError().isPresent(), "Could not create firewall, operation failed" + operation);
}