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/12/13 19:43:17 UTC
[5/5] git commit: JCLOUDS-393. Move to GCE API v1.
JCLOUDS-393. Move to GCE API v1.
Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/commit/2aa7340a
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/tree/2aa7340a
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/diff/2aa7340a
Branch: refs/heads/master
Commit: 2aa7340a92f91e43386d373484fd7b03a4c719a2
Parents: 91ff9a9
Author: Andrew Bayer <an...@gmail.com>
Authored: Tue Dec 3 08:57:15 2013 -0800
Committer: Andrew Bayer <an...@gmail.com>
Committed: Thu Dec 12 17:07:05 2013 -0800
----------------------------------------------------------------------
google-compute-engine/pom.xml | 4 +-
.../GoogleComputeEngineApi.java | 12 +-
.../GoogleComputeEngineApiMetadata.java | 6 +-
.../GoogleComputeEngineConstants.java | 19 ++
.../GoogleComputeEngineServiceAdapter.java | 104 +++++++++--
.../functions/InstanceInZoneToNodeMetadata.java | 52 ++++--
.../GoogleComputeEngineTemplateOptions.java | 61 +++++++
.../config/GoogleComputeEngineParserModule.java | 8 +-
.../domain/AbstractDisk.java | 2 +-
.../googlecomputeengine/domain/Address.java | 2 +-
.../googlecomputeengine/domain/Disk.java | 2 +-
.../googlecomputeengine/domain/Firewall.java | 4 +-
.../googlecomputeengine/domain/Image.java | 30 +---
.../googlecomputeengine/domain/Instance.java | 79 +++++----
.../domain/InstanceTemplate.java | 45 ++++-
.../googlecomputeengine/domain/Kernel.java | 91 ----------
.../googlecomputeengine/domain/MachineType.java | 2 +-
.../googlecomputeengine/domain/Network.java | 2 +-
.../googlecomputeengine/domain/Operation.java | 2 +-
.../googlecomputeengine/domain/Quota.java | 2 +-
.../googlecomputeengine/domain/Region.java | 2 +-
.../googlecomputeengine/domain/Resource.java | 2 -
.../googlecomputeengine/domain/Route.java | 2 +-
.../googlecomputeengine/domain/Snapshot.java | 2 +-
.../googlecomputeengine/domain/Zone.java | 4 +-
.../features/AddressApi.java | 2 +-
.../googlecomputeengine/features/DiskApi.java | 46 ++++-
.../features/FirewallApi.java | 2 +-
.../features/GlobalOperationApi.java | 2 +-
.../googlecomputeengine/features/ImageApi.java | 2 +-
.../features/InstanceApi.java | 2 +-
.../googlecomputeengine/features/KernelApi.java | 140 ---------------
.../features/MachineTypeApi.java | 2 +-
.../features/NetworkApi.java | 2 +-
.../features/ProjectApi.java | 2 +-
.../googlecomputeengine/features/RegionApi.java | 2 +-
.../features/RegionOperationApi.java | 2 +-
.../googlecomputeengine/features/RouteApi.java | 2 +-
.../features/SnapshotApi.java | 2 +-
.../googlecomputeengine/features/ZoneApi.java | 2 +-
.../features/ZoneOperationApi.java | 2 +-
.../functions/internal/ParseKernels.java | 66 -------
.../options/ListOptions.java | 2 +-
.../predicates/InstancePredicates.java | 33 ++++
.../PageSystemExpectTest.java | 8 +-
.../GoogleComputeEngineServiceExpectTest.java | 174 ++++++++++++++-----
.../functions/FirewallToIpPermissionTest.java | 4 +-
.../functions/NetworkToSecurityGroupTest.java | 4 +-
.../loaders/FindNetworkOrCreateTest.java | 4 +-
.../features/AddressApiExpectTest.java | 14 +-
.../features/DiskApiExpectTest.java | 40 ++++-
.../features/FirewallApiExpectTest.java | 24 +--
.../features/GlobalOperationApiExpectTest.java | 2 +-
.../features/ImageApiExpectTest.java | 30 ++--
.../features/ImageApiLiveTest.java | 2 +-
.../features/InstanceApiExpectTest.java | 48 +++--
.../features/InstanceApiLiveTest.java | 65 +++++--
.../features/KernelApiExpectTest.java | 109 ------------
.../features/KernelApiLiveTest.java | 77 --------
.../features/MachineTypeApiExpectTest.java | 8 +-
.../features/NetworkApiExpectTest.java | 14 +-
.../features/ProjectApiExpectTest.java | 2 +-
.../features/RegionApiExpectTest.java | 2 +-
.../features/RegionOperationApiExpectTest.java | 12 +-
.../features/RouteApiExpectTest.java | 18 +-
.../features/SnapshotApiExpectTest.java | 2 +-
.../features/ZoneApiExpectTest.java | 2 +-
.../features/ZoneOperationApiExpectTest.java | 10 +-
.../functions/CreateNetworkIfNeededTest.java | 4 +-
.../GoogleComputeEngineErrorHandlerTest.java | 2 +-
.../BaseGoogleComputeEngineApiLiveTest.java | 2 +-
.../parse/ParseAddressListTest.java | 6 +-
.../parse/ParseAddressTest.java | 4 +-
.../parse/ParseDiskListTest.java | 6 +-
.../parse/ParseDiskTest.java | 4 +-
.../parse/ParseFirewallListTest.java | 6 +-
.../parse/ParseFirewallTest.java | 4 +-
.../parse/ParseImageListTest.java | 10 +-
.../parse/ParseImageTest.java | 4 +-
.../parse/ParseInstanceListTest.java | 2 +-
.../parse/ParseInstanceTest.java | 18 +-
.../parse/ParseKernelListTest.java | 75 --------
.../parse/ParseKernelTest.java | 51 ------
.../parse/ParseMachineTypeListTest.java | 8 +-
.../parse/ParseMachineTypeTest.java | 2 +-
.../parse/ParseNetworkListTest.java | 2 +-
.../parse/ParseNetworkTest.java | 2 +-
.../parse/ParseOperationListTest.java | 2 +-
.../parse/ParseOperationTest.java | 4 +-
.../parse/ParseProjectTest.java | 2 +-
.../parse/ParseRegionListTest.java | 6 +-
.../parse/ParseRegionTest.java | 6 +-
.../parse/ParseRouteListTest.java | 8 +-
.../parse/ParseRouteTest.java | 6 +-
.../parse/ParseSnapshotListTest.java | 6 +-
.../parse/ParseSnapshotTest.java | 4 +-
.../parse/ParseZoneListTest.java | 4 +-
.../parse/ParseZoneTest.java | 2 +-
.../NetworkFirewallPredicatesTest.java | 8 +-
.../firewall_list.json | 6 +-
.../network_get.json | 2 +-
.../src/test/resources/address_get.json | 4 +-
.../src/test/resources/address_list.json | 10 +-
.../src/test/resources/disk_get.json | 4 +-
.../src/test/resources/disk_list.json | 6 +-
.../src/test/resources/firewall_get.json | 4 +-
.../src/test/resources/firewall_insert.json | 2 +-
.../src/test/resources/firewall_list.json | 10 +-
.../src/test/resources/global_operation.json | 4 +-
.../test/resources/global_operation_list.json | 6 +-
.../src/test/resources/image_get.json | 3 +-
.../src/test/resources/image_list.json | 9 +-
.../src/test/resources/image_list_empty.json | 6 +
.../resources/image_list_multiple_page_1.json | 17 +-
.../resources/image_list_multiple_page_2.json | 13 +-
.../test/resources/image_list_single_page.json | 15 +-
.../resources/instance_add_access_config.json | 2 +-
.../test/resources/instance_attach_disk.json | 2 +-
.../src/test/resources/instance_get.json | 22 ++-
.../src/test/resources/instance_insert.json | 2 +-
.../test/resources/instance_insert_simple.json | 2 +-
.../src/test/resources/instance_list.json | 24 ++-
.../instance_list_central1b_empty.json | 2 +-
.../src/test/resources/kernel.json | 8 -
.../src/test/resources/kernel_list.json | 27 ---
.../src/test/resources/machinetype.json | 2 +-
.../src/test/resources/machinetype_list.json | 8 +-
.../resources/machinetype_list_central1b.json | 6 +-
.../machinetype_list_central1b_empty.json | 2 +-
.../src/test/resources/network_get.json | 2 +-
.../src/test/resources/network_list.json | 4 +-
.../src/test/resources/operation.json | 8 +-
.../src/test/resources/operation_error.json | 8 +-
.../src/test/resources/operation_list.json | 10 +-
.../src/test/resources/project.json | 2 +-
.../src/test/resources/region_get.json | 6 +-
.../src/test/resources/region_list.json | 12 +-
.../src/test/resources/region_operation.json | 6 +-
.../test/resources/region_operation_list.json | 8 +-
.../src/test/resources/route_get.json | 6 +-
.../src/test/resources/route_insert.json | 2 +-
.../src/test/resources/route_list.json | 14 +-
.../src/test/resources/snapshot_get.json | 4 +-
.../src/test/resources/snapshot_list.json | 10 +-
.../src/test/resources/zone_get.json | 2 +-
.../src/test/resources/zone_list.json | 6 +-
.../src/test/resources/zone_list_short.json | 4 +-
.../src/test/resources/zone_operation.json | 6 +-
.../test/resources/zone_operation_error.json | 6 +-
.../src/test/resources/zone_operation_list.json | 8 +-
150 files changed, 973 insertions(+), 1192 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/google-compute-engine/pom.xml
----------------------------------------------------------------------
diff --git a/google-compute-engine/pom.xml b/google-compute-engine/pom.xml
index f440a0f..9edc75e 100644
--- a/google-compute-engine/pom.xml
+++ b/google-compute-engine/pom.xml
@@ -37,9 +37,9 @@
</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>v1beta16</test.google-compute-engine.api-version>
+ <test.google-compute-engine.api-version>v1</test.google-compute-engine.api-version>
<test.google-compute-engine.build-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.template>imageId=debian-7-wheezy-v20131120,locationId=us-central1-a,minRam=2048</test.google-compute-engine.template>
</properties>
<dependencies>
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/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 6589c4d..6918d27 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
@@ -27,7 +27,6 @@ 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.ProjectApi;
@@ -47,7 +46,7 @@ import com.google.common.annotations.Beta;
* <p/>
*
* @author David Alves
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16">api doc</a>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1">api doc</a>
*/
@Beta
public interface GoogleComputeEngineApi extends Closeable {
@@ -107,15 +106,6 @@ public interface GoogleComputeEngineApi extends Closeable {
InstanceApi getInstanceApiForProject(@PathParam("project") String projectName);
/**
- * Provides access to Kernel features
- *
- * @param projectName the name of the project
- */
- @Delegate
- @Path("/projects/{project}")
- KernelApi getKernelApiForProject(@PathParam("project") String projectName);
-
- /**
* Provides access to MachineType features
*
* @param projectName the name of the project
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/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 564f869..d6bb755 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
@@ -40,7 +40,7 @@ import com.google.common.collect.ImmutableSet;
import com.google.inject.Module;
/**
- * Implementation of {@link ApiMetadata} for GoogleCompute v1beta16 API
+ * Implementation of {@link ApiMetadata} for GoogleCompute v1 API
*
* @author David Alves
*/
@@ -80,8 +80,8 @@ public class GoogleComputeEngineApiMetadata extends BaseHttpApiMetadata<GoogleCo
.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("v1beta16")
- .defaultEndpoint("https://www.googleapis.com/compute/v1beta16")
+ .version("v1")
+ .defaultEndpoint("https://www.googleapis.com/compute/v1")
.defaultProperties(GoogleComputeEngineApiMetadata.defaultProperties())
.view(typeToken(ComputeServiceContext.class))
.defaultModules(ImmutableSet.<Class<? extends Module>>builder()
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/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 1334a32..0bf6b6f 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
@@ -34,6 +34,10 @@ public interface GoogleComputeEngineConstants {
*/
public static final String GOOGLE_PROJECT = "google";
+ public static final String CENTOS_PROJECT = "centos-cloud";
+
+ public static final String DEBIAN_PROJECT = "debian-cloud";
+
public static final String COMPUTE_SCOPE = "https://www.googleapis.com/auth/compute";
public static final String COMPUTE_READONLY_SCOPE = "https://www.googleapis.com/auth/compute.readonly";
@@ -58,4 +62,19 @@ public interface GoogleComputeEngineConstants {
public static final Location GOOGLE_PROVIDER_LOCATION = new LocationBuilder().scope(LocationScope.PROVIDER).id
(GCE_PROVIDER_NAME).description(GCE_PROVIDER_NAME).build();
+
+ /**
+ * The key we look for in instance metadata for the URI for the image the instance was created from.
+ */
+ public static final String GCE_IMAGE_METADATA_KEY = "jclouds-image";
+
+ /**
+ * Metadata key to check for whether we should delete an instance's boot disk when we delete the instance.
+ */
+ public static final String GCE_DELETE_BOOT_DISK_METADATA_KEY = "jclouds-delete-boot-disk";
+
+ /**
+ * The suffix we append to auto-created boot disk names.
+ */
+ public static final String GCE_BOOT_DISK_SUFFIX = "boot-disk";
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/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 f4495c0..62d3914 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
@@ -20,14 +20,21 @@ 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 com.google.common.collect.Iterables.tryFind;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
-import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.GOOGLE_PROJECT;
+import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.CENTOS_PROJECT;
+import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.DEBIAN_PROJECT;
+import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.GCE_BOOT_DISK_SUFFIX;
+import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.GCE_DELETE_BOOT_DISK_METADATA_KEY;
+import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.GCE_IMAGE_METADATA_KEY;
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.googlecomputeengine.predicates.InstancePredicates.isBootDisk;
import static org.jclouds.util.Predicates2.retry;
import java.net.URI;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@@ -36,7 +43,6 @@ import java.util.concurrent.atomic.AtomicReference;
import javax.annotation.Resource;
import javax.inject.Named;
-import com.google.common.primitives.Ints;
import org.jclouds.collect.Memoized;
import org.jclouds.compute.ComputeServiceAdapter;
import org.jclouds.compute.domain.Hardware;
@@ -49,10 +55,15 @@ import org.jclouds.googlecomputeengine.GoogleComputeEngineApi;
import org.jclouds.googlecomputeengine.compute.functions.FirewallTagNamingConvention;
import org.jclouds.googlecomputeengine.compute.options.GoogleComputeEngineTemplateOptions;
import org.jclouds.googlecomputeengine.config.UserProject;
+import org.jclouds.googlecomputeengine.domain.Disk;
import org.jclouds.googlecomputeengine.domain.Image;
import org.jclouds.googlecomputeengine.domain.Instance;
+import org.jclouds.googlecomputeengine.domain.Instance.AttachedDisk;
+import org.jclouds.googlecomputeengine.domain.Instance.PersistentAttachedDisk;
import org.jclouds.googlecomputeengine.domain.InstanceInZone;
import org.jclouds.googlecomputeengine.domain.InstanceTemplate;
+import org.jclouds.googlecomputeengine.domain.InstanceTemplate.PersistentDisk;
+import org.jclouds.googlecomputeengine.domain.InstanceTemplate.PersistentDisk.Mode;
import org.jclouds.googlecomputeengine.domain.MachineType;
import org.jclouds.googlecomputeengine.domain.MachineTypeInZone;
import org.jclouds.googlecomputeengine.domain.Operation;
@@ -64,11 +75,14 @@ import org.jclouds.logging.Logger;
import com.google.common.base.Function;
import com.google.common.base.Objects;
+import com.google.common.base.Optional;
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.collect.Lists;
+import com.google.common.primitives.Ints;
import com.google.common.util.concurrent.Atomics;
import com.google.common.util.concurrent.UncheckedTimeoutException;
import com.google.inject.Inject;
@@ -85,7 +99,6 @@ 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;
@@ -101,7 +114,6 @@ public class GoogleComputeEngineServiceAdapter implements ComputeServiceAdapter<
@Named(OPERATION_COMPLETE_INTERVAL) Long operationCompleteCheckInterval,
@Named(OPERATION_COMPLETE_TIMEOUT) Long operationCompleteCheckTimeout,
@Memoized Supplier<Map<URI, ? extends Location>> zones,
- @Memoized Supplier<Map<URI, ? extends Hardware>> hardwareMap,
FirewallTagNamingConvention.Factory firewallTagNamingConvention) {
this.api = checkNotNull(api, "google compute api");
this.userProject = checkNotNull(userProject, "user project name");
@@ -110,11 +122,10 @@ public class GoogleComputeEngineServiceAdapter implements ComputeServiceAdapter<
this.operationCompleteCheckInterval = checkNotNull(operationCompleteCheckInterval,
"operation completed check interval");
this.operationCompleteCheckTimeout = checkNotNull(operationCompleteCheckTimeout,
- "operation completed check timeout");
+ "operation completed check timeout");
this.retryOperationDonePredicate = retry(operationDonePredicate, operationCompleteCheckTimeout,
- operationCompleteCheckInterval, TimeUnit.MILLISECONDS);
+ operationCompleteCheckInterval, TimeUnit.MILLISECONDS);
this.zones = checkNotNull(zones, "zones");
- this.hardwareMap = checkNotNull(hardwareMap, "hardwareMap");
this.firewallTagNamingConvention = checkNotNull(firewallTagNamingConvention, "firewallTagNamingConvention");
}
@@ -129,6 +140,22 @@ public class GoogleComputeEngineServiceAdapter implements ComputeServiceAdapter<
Hardware hardware = checkNotNull(template.getHardware(), "hardware must be set");
checkNotNull(hardware.getUri(), "hardware must have a URI");
+ checkNotNull(template.getImage().getUri(), "image URI is null");
+
+ // Note that the ordering is significant here - the first disk must be the boot disk.
+ List<PersistentDisk> disks = Lists.newArrayList();
+
+ if (!tryFind(options.getDisks(), isBootDisk()).isPresent()) {
+ Disk bootDisk = createBootDisk(template, name);
+
+ disks.add(new PersistentDisk(Mode.READ_WRITE,
+ bootDisk.getSelfLink(),
+ null,
+ true,
+ true));
+ }
+
+ disks.addAll(options.getDisks());
InstanceTemplate instanceTemplate = InstanceTemplate.builder()
.forMachineType(hardware.getUri());
@@ -139,12 +166,20 @@ public class GoogleComputeEngineServiceAdapter implements ComputeServiceAdapter<
instanceTemplate.addNetworkInterface(options.getNetwork().get());
}
+ instanceTemplate.disks(disks);
+
LoginCredentials credentials = getFromImageAndOverrideIfRequired(template.getImage(), options);
ImmutableMap.Builder<String, String> metadataBuilder = metatadaFromTemplateOptions.apply(options);
+
+ metadataBuilder.put(GCE_IMAGE_METADATA_KEY, template.getImage().getUri().toString());
+
+ if (!options.shouldKeepBootDisk()) {
+ metadataBuilder.put(GCE_DELETE_BOOT_DISK_METADATA_KEY, Boolean.TRUE.toString());
+ }
+
instanceTemplate.metadata(metadataBuilder.build());
instanceTemplate.serviceAccounts(options.getServiceAccounts());
- instanceTemplate.image(checkNotNull(template.getImage().getUri(), "image URI is null"));
final InstanceApi instanceApi = api.getInstanceApiForProject(userProject.get());
final String zone = template.getLocation().getId();
@@ -199,6 +234,26 @@ public class GoogleComputeEngineServiceAdapter implements ComputeServiceAdapter<
return new NodeAndInitialCredentials<InstanceInZone>(instanceInZone, instanceInZone.slashEncode(), credentials);
}
+ private Disk createBootDisk(Template template, String instanceName) {
+ URI imageUri = template.getImage().getUri();
+
+ GoogleComputeEngineTemplateOptions options = GoogleComputeEngineTemplateOptions.class.cast(template.getOptions()).clone();
+
+ int diskSize = options.getBootDiskSize().or(10l).intValue();
+
+ String diskName = instanceName + "-" + GCE_BOOT_DISK_SUFFIX;
+
+ Operation diskOperation = api.getDiskApiForProject(userProject.get())
+ .createFromImageWithSizeInZone(imageUri.toString(),
+ diskName,
+ diskSize,
+ template.getLocation().getId());
+
+ waitOperationDone(diskOperation);
+
+ return api.getDiskApiForProject(userProject.get()).getInZone(template.getLocation().getId(),
+ diskName);
+ }
@Override
public Iterable<MachineTypeInZone> listHardwareProfiles() {
@@ -224,14 +279,17 @@ public class GoogleComputeEngineServiceAdapter implements ComputeServiceAdapter<
public Iterable<Image> listImages() {
return ImmutableSet.<Image>builder()
.addAll(api.getImageApiForProject(userProject.get()).list().concat())
- .addAll(api.getImageApiForProject(GOOGLE_PROJECT).list().concat())
+ .addAll(api.getImageApiForProject(DEBIAN_PROJECT).list().concat())
+ .addAll(api.getImageApiForProject(CENTOS_PROJECT).list().concat())
.build();
}
@Override
public Image getImage(String id) {
return Objects.firstNonNull(api.getImageApiForProject(userProject.get()).get(id),
- api.getImageApiForProject(GOOGLE_PROJECT).get(id));
+ Objects.firstNonNull(api.getImageApiForProject(DEBIAN_PROJECT).get(id),
+ api.getImageApiForProject(CENTOS_PROJECT).get(id)));
+
}
@Override
@@ -280,9 +338,33 @@ public class GoogleComputeEngineServiceAdapter implements ComputeServiceAdapter<
@Override
public void destroyNode(final String name) {
SlashEncodedIds slashEncodedIds = SlashEncodedIds.fromSlashEncoded(name);
-
+ String diskName = null;
+ try {
+ Instance instance = api.getInstanceApiForProject(userProject.get()).getInZone(slashEncodedIds.getFirstId(),
+ slashEncodedIds.getSecondId());
+ if (instance.getMetadata().getItems().get(GCE_DELETE_BOOT_DISK_METADATA_KEY).equals("true")) {
+ Optional<AttachedDisk> disk = tryFind(instance.getDisks(), new Predicate<AttachedDisk>() {
+ @Override
+ public boolean apply(AttachedDisk input) {
+ return PersistentAttachedDisk.class.isInstance(input) &&
+ PersistentAttachedDisk.class.cast(input).isBoot();
+ }
+ });
+ if (disk.isPresent()) {
+ diskName = PersistentAttachedDisk.class.cast(disk.get()).getSourceDiskName();
+ }
+ }
+ } catch (Exception e) {
+ // TODO: what exception actually gets thrown here if the instance doesn't really exist?
+ }
waitOperationDone(api.getInstanceApiForProject(userProject.get()).deleteInZone(slashEncodedIds.getFirstId(),
slashEncodedIds.getSecondId()));
+
+ if (diskName != null) {
+ waitOperationDone(api.getDiskApiForProject(userProject.get()).deleteInZone(slashEncodedIds.getFirstId(),
+ diskName));
+ }
+
}
@Override
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/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
index 98b9a14..4c4c600 100644
--- 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
@@ -18,6 +18,7 @@ package org.jclouds.googlecomputeengine.compute.functions;
import static com.google.common.base.Preconditions.checkNotNull;
import static org.jclouds.compute.util.ComputeServiceUtils.groupFromMapOrName;
+import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.GCE_IMAGE_METADATA_KEY;
import java.net.URI;
import java.util.Map;
@@ -32,6 +33,8 @@ 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.GoogleComputeEngineApi;
+import org.jclouds.googlecomputeengine.config.UserProject;
import org.jclouds.googlecomputeengine.domain.Instance;
import org.jclouds.googlecomputeengine.domain.InstanceInZone;
import org.jclouds.googlecomputeengine.domain.SlashEncodedIds;
@@ -55,6 +58,8 @@ public class InstanceInZoneToNodeMetadata implements Function<InstanceInZone, No
private final Supplier<Map<URI, ? extends Hardware>> hardwares;
private final Supplier<Map<URI, ? extends Location>> locations;
private final FirewallTagNamingConvention.Factory firewallTagNamingConvention;
+ private final GoogleComputeEngineApi api;
+ private final Supplier<String> userProject;
@Inject
public InstanceInZoneToNodeMetadata(Map<Instance.Status, NodeMetadata.Status> toPortableNodeStatus,
@@ -62,47 +67,64 @@ public class InstanceInZoneToNodeMetadata implements Function<InstanceInZone, No
@Memoized Supplier<Map<URI, ? extends Image>> images,
@Memoized Supplier<Map<URI, ? extends Hardware>> hardwares,
@Memoized Supplier<Map<URI, ? extends Location>> locations,
- FirewallTagNamingConvention.Factory firewallTagNamingConvention) {
+ FirewallTagNamingConvention.Factory firewallTagNamingConvention,
+ GoogleComputeEngineApi api,
+ @UserProject Supplier<String> userProject) {
this.toPortableNodeStatus = toPortableNodeStatus;
this.nodeNamingConvention = namingConvention.createWithoutPrefix();
this.images = images;
this.hardwares = hardwares;
this.locations = locations;
this.firewallTagNamingConvention = checkNotNull(firewallTagNamingConvention, "firewallTagNamingConvention");
+ this.api = checkNotNull(api, "api");
+ this.userProject = checkNotNull(userProject, "userProject");
}
@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());
String group = groupFromMapOrName(input.getMetadata().getItems(),
- input.getName(), nodeNamingConvention);
-
+ input.getName(), nodeNamingConvention);
FluentIterable<String> tags = FluentIterable.from(input.getTags().getItems())
- .filter(Predicates.not(firewallTagNamingConvention.get(group).isFirewallTag()));
+ .filter(Predicates.not(firewallTagNamingConvention.get(group).isFirewallTag()));
+
+ NodeMetadataBuilder builder = new NodeMetadataBuilder();
- return new NodeMetadataBuilder()
- .id(SlashEncodedIds.fromTwoIds(checkNotNull(locations.get().get(input.getZone()), "location for %s", input.getZone()).getId(),
- input.getName()).slashEncode())
+ builder.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())
+ input.getMachineType().toString()))
.status(toPortableNodeStatus.get(input.getStatus()))
.tags(tags)
.uri(input.getSelfLink())
.userMetadata(input.getMetadata().getItems())
.group(group)
.privateAddresses(collectPrivateAddresses(input))
- .publicAddresses(collectPublicAddresses(input))
- .build();
+ .publicAddresses(collectPublicAddresses(input));
+
+ if (input.getMetadata().getItems().containsKey(GCE_IMAGE_METADATA_KEY)) {
+ try {
+ URI imageUri = URI.create(input.getMetadata().getItems()
+ .get(GCE_IMAGE_METADATA_KEY));
+
+ Map<URI, ? extends Image> imagesMap = images.get();
+
+ Image image = checkNotNull(imagesMap.get(imageUri),
+ "no image for %s. images: %s", imageUri,
+ imagesMap.values());
+ builder.imageId(image.getId());
+ } catch (IllegalArgumentException e) {
+ // Swallow any exception here - it just means we don't actually have a valid image URI, so we skip it.
+ }
+ }
+
+ return builder.build();
}
private Set<String> collectPrivateAddresses(Instance input) {
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/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 04ebaf4..63e3685 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
@@ -26,6 +26,7 @@ import java.util.Set;
import org.jclouds.compute.options.TemplateOptions;
import org.jclouds.domain.LoginCredentials;
import org.jclouds.googlecomputeengine.domain.Instance;
+import org.jclouds.googlecomputeengine.domain.InstanceTemplate.PersistentDisk;
import org.jclouds.scriptbuilder.domain.Statement;
import com.google.common.base.Optional;
@@ -42,6 +43,9 @@ public class GoogleComputeEngineTemplateOptions extends TemplateOptions {
private Optional<String> networkName = Optional.absent();
private Set<Instance.ServiceAccount> serviceAccounts = Sets.newLinkedHashSet();
private boolean enableNat = true;
+ private Set<PersistentDisk> disks = Sets.newLinkedHashSet();
+ private Optional<Long> bootDiskSize = Optional.absent();
+ private boolean keepBootDisk = false;
@Override
public GoogleComputeEngineTemplateOptions clone() {
@@ -59,6 +63,8 @@ public class GoogleComputeEngineTemplateOptions extends TemplateOptions {
eTo.network(getNetworkName().orNull());
eTo.serviceAccounts(getServiceAccounts());
eTo.enableNat(isEnableNat());
+ eTo.disks(getDisks());
+ eTo.keepBootDisk(shouldKeepBootDisk());
}
}
@@ -97,6 +103,24 @@ public class GoogleComputeEngineTemplateOptions extends TemplateOptions {
}
/**
+ * @see #getDisks()
+ * @see org.jclouds.googlecomputeengine.domain.InstanceTemplate.PersistentDisk
+ */
+ public GoogleComputeEngineTemplateOptions addDisk(PersistentDisk disk) {
+ this.disks.add(disk);
+ return this;
+ }
+
+ /**
+ * @see #getDisks()
+ * @see org.jclouds.googlecomputeengine.domain.InstanceTemplate.PersistentDisk
+ */
+ public GoogleComputeEngineTemplateOptions disks(Set<PersistentDisk> disks) {
+ this.disks = Sets.newLinkedHashSet(disks);
+ return this;
+ }
+
+ /**
* @see #isEnableNat()
*/
public GoogleComputeEngineTemplateOptions enableNat(boolean enableNat) {
@@ -105,6 +129,22 @@ public class GoogleComputeEngineTemplateOptions extends TemplateOptions {
}
/**
+ * @see #getBootDiskSize()
+ */
+ public GoogleComputeEngineTemplateOptions bootDiskSize(Long bootDiskSize) {
+ this.bootDiskSize = fromNullable(bootDiskSize);
+ return this;
+ }
+
+ /**
+ * @see #shouldKeepBootDisk()
+ */
+ public GoogleComputeEngineTemplateOptions keepBootDisk(boolean keepBootDisk) {
+ this.keepBootDisk = keepBootDisk;
+ return this;
+ }
+
+ /**
* {@inheritDoc}
*/
@Override
@@ -280,6 +320,13 @@ public class GoogleComputeEngineTemplateOptions extends TemplateOptions {
}
/**
+ * @return the PersistentDisks for this instance.
+ */
+ public Set<PersistentDisk> getDisks() {
+ return disks;
+ }
+
+ /**
* @return the URI of an existing network the instances will be attached to. If no network URI or network name are
* provided a new network will be created for the project.
*/
@@ -302,4 +349,18 @@ public class GoogleComputeEngineTemplateOptions extends TemplateOptions {
public boolean isEnableNat() {
return enableNat;
}
+
+ /**
+ * @return the boot disk size, if specified. Defaults to 10gb.
+ */
+ public Optional<Long> getBootDiskSize() {
+ return bootDiskSize;
+ }
+
+ /**
+ * @return whether we should keep the boot disk around when deleting the instance. Defaults to false.
+ */
+ public boolean shouldKeepBootDisk() {
+ return keepBootDisk;
+ }
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/config/GoogleComputeEngineParserModule.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/config/GoogleComputeEngineParserModule.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/config/GoogleComputeEngineParserModule.java
index 6dc0160..2f5f644 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/config/GoogleComputeEngineParserModule.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/config/GoogleComputeEngineParserModule.java
@@ -87,7 +87,7 @@ public class GoogleComputeEngineParserModule extends AbstractModule {
/**
* Parser for operations that unwraps errors avoiding an extra intermediate object.
*
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16/operations"/>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1/operations"/>
*/
@Singleton
private static class OperationTypeAdapter implements JsonDeserializer<Operation> {
@@ -208,14 +208,14 @@ public class GoogleComputeEngineParserModule extends AbstractModule {
private static class InstanceInternal extends Instance {
@ConstructorProperties({
- "id", "creationTimestamp", "selfLink", "name", "description", "tags", "image", "machineType",
+ "id", "creationTimestamp", "selfLink", "name", "description", "tags", "machineType",
"status", "statusMessage", "zone", "networkInterfaces", "metadata", "serviceAccounts"
})
private InstanceInternal(String id, Date creationTimestamp, URI selfLink, String name, String description,
- Tags tags, URI image, URI machineType, Status status, String statusMessage,
+ Tags tags, URI machineType, Status status, String statusMessage,
URI zone, Set<NetworkInterface> networkInterfaces, Metadata metadata,
Set<ServiceAccount> serviceAccounts) {
- super(id, creationTimestamp, selfLink, name, description, tags, image, machineType,
+ super(id, creationTimestamp, selfLink, name, description, tags, machineType,
status, statusMessage, zone, networkInterfaces, null, metadata, serviceAccounts);
}
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/AbstractDisk.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/AbstractDisk.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/AbstractDisk.java
index 44e13a2..045846b 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/AbstractDisk.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/AbstractDisk.java
@@ -28,7 +28,7 @@ import com.google.common.base.Objects;
* A persistent disk resource
*
* @author David Alves
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16/disks"/>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1/disks"/>
*/
@Beta
public abstract class AbstractDisk extends Resource {
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Address.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Address.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Address.java
index 03e6fab..86dde18 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Address.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Address.java
@@ -32,7 +32,7 @@ import com.google.common.base.Optional;
* Represents an Address resource.
*
* @author Andrew Bayer
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16/addresses"/>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1/addresses"/>
*/
@Beta
public final class Address extends Resource {
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Disk.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Disk.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Disk.java
index a986eba..15ecf69 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Disk.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Disk.java
@@ -30,7 +30,7 @@ import com.google.common.base.Objects;
* A persistent disk resource
*
* @author David Alves
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16/disks"/>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1/disks"/>
*/
@Beta
public final class Disk extends AbstractDisk {
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Firewall.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Firewall.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Firewall.java
index 42d66cf..64c9221 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Firewall.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Firewall.java
@@ -40,7 +40,7 @@ import com.google.common.collect.TreeRangeSet;
* Represents a network firewall
*
* @author David Alves
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16/firewalls"/>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1/firewalls"/>
* @see <a href="https://developers.google.com/compute/docs/networking#firewalls"/>
*/
@Beta
@@ -243,7 +243,7 @@ public final class Firewall extends Resource {
* permitted connection.
*
* @author David Alves
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16/firewalls"/>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1/firewalls"/>
*/
public static final class Rule {
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Image.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Image.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Image.java
index b48afee..0c05cc6 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Image.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Image.java
@@ -33,25 +33,23 @@ import com.google.common.base.Optional;
* Represents a disk image to use on an instance.
*
* @author David Alves
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16/images"/>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1/images"/>
*/
@Beta
public final class Image extends Resource {
private final String sourceType;
- private final Optional<URI> preferredKernel;
private final RawDisk rawDisk;
private final Optional<Deprecated> deprecated;
@ConstructorProperties({
- "id", "creationTimestamp", "selfLink", "name", "description", "sourceType", "preferredKernel",
+ "id", "creationTimestamp", "selfLink", "name", "description", "sourceType",
"rawDisk", "deprecated"
})
protected Image(String id, Date creationTimestamp, URI selfLink, String name, String description,
- String sourceType, URI preferredKernel, RawDisk rawDisk, Deprecated deprecated) {
+ String sourceType, RawDisk rawDisk, Deprecated deprecated) {
super(Kind.IMAGE, id, creationTimestamp, selfLink, name, description);
this.sourceType = checkNotNull(sourceType, "sourceType of %s", name);
- this.preferredKernel = fromNullable(preferredKernel);
this.rawDisk = checkNotNull(rawDisk, "rawDisk of %s", name);
this.deprecated = fromNullable(deprecated);
}
@@ -64,13 +62,6 @@ public final class Image extends Resource {
}
/**
- * @return An optional URL of the preferred kernel for use with this disk image.
- */
- public Optional<URI> getPreferredKernel() {
- return preferredKernel;
- }
-
- /**
* @return the raw disk image parameters.
*/
public RawDisk getRawDisk() {
@@ -91,7 +82,6 @@ public final class Image extends Resource {
return super.string()
.omitNullValues()
.add("sourceType", sourceType)
- .add("preferredKernel", preferredKernel.orNull())
.add("rawDisk", rawDisk)
.add("deprecated", deprecated.orNull());
}
@@ -115,7 +105,6 @@ public final class Image extends Resource {
public static final class Builder extends Resource.Builder<Builder> {
private String sourceType;
- private URI preferredKernel;
private RawDisk rawDisk;
private Deprecated deprecated;
@@ -128,14 +117,6 @@ public final class Image extends Resource {
}
/**
- * @see Image#getPreferredKernel()
- */
- public Builder preferredKernel(URI preferredKernel) {
- this.preferredKernel = preferredKernel;
- return this;
- }
-
- /**
* @see Image#getDeprecated()
*/
public Builder deprecated(Deprecated deprecated) {
@@ -158,13 +139,12 @@ public final class Image extends Resource {
public Image build() {
return new Image(super.id, super.creationTimestamp, super.selfLink, super.name,
- super.description, sourceType, preferredKernel, rawDisk, deprecated);
+ super.description, sourceType, rawDisk, deprecated);
}
public Builder fromImage(Image in) {
return super.fromResource(in)
.sourceType(in.getSourceType())
- .preferredKernel(in.getPreferredKernel().orNull())
.rawDisk(in.getRawDisk())
.deprecated(in.getDeprecated().orNull());
}
@@ -175,7 +155,7 @@ public final class Image extends Resource {
* A raw disk image, usually the base for an image.
*
* @author David Alves
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16/images"/>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1/images"/>
*/
public static class RawDisk {
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Instance.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Instance.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Instance.java
index 19c9e52..ee8f356 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Instance.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Instance.java
@@ -20,6 +20,7 @@ import static com.google.common.base.Objects.equal;
import static com.google.common.base.Objects.toStringHelper;
import static com.google.common.base.Optional.fromNullable;
import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.Iterables.getLast;
import java.beans.ConstructorProperties;
import java.net.URI;
@@ -31,13 +32,14 @@ import org.jclouds.javax.annotation.Nullable;
import com.google.common.annotations.Beta;
import com.google.common.base.Objects;
import com.google.common.base.Optional;
+import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableSet;
/**
* Represents a virtual machine.
*
* @author David Alves
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16/instances"/>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1/instances"/>
*/
@Beta
public class Instance extends Resource {
@@ -52,7 +54,6 @@ public class Instance extends Resource {
}
protected final Tags tags;
- protected final URI image;
protected final URI machineType;
protected final Status status;
protected final Optional<String> statusMessage;
@@ -63,12 +64,11 @@ public class Instance extends Resource {
protected final Set<ServiceAccount> serviceAccounts;
protected Instance(String id, Date creationTimestamp, URI selfLink, String name, String description,
- Tags tags, URI image, URI machineType, Status status, String statusMessage,
+ Tags tags, URI machineType, Status status, String statusMessage,
URI zone, Set<NetworkInterface> networkInterfaces, Set<AttachedDisk> disks,
Metadata metadata, Set<ServiceAccount> serviceAccounts) {
super(Kind.INSTANCE, id, creationTimestamp, selfLink, name, description);
this.tags = checkNotNull(tags, "tags");
- this.image = checkNotNull(image, "image");
this.machineType = checkNotNull(machineType, "machineType of %s", name);
this.status = checkNotNull(status, "status");
this.statusMessage = fromNullable(statusMessage);
@@ -90,13 +90,6 @@ public class Instance extends Resource {
}
/**
- * @return the URL of the disk image resource to be to be installed on this instance.
- */
- public URI getImage() {
- return image;
- }
-
- /**
* @return URL of the machine type resource describing which machine type to use to host the instance.
*/
public URI getMachineType() {
@@ -178,7 +171,6 @@ public class Instance extends Resource {
return super.string()
.omitNullValues()
.add("items", tags)
- .add("image", image)
.add("machineType", machineType)
.add("status", status)
.add("statusMessage", statusMessage.orNull())
@@ -208,7 +200,6 @@ public class Instance extends Resource {
public static final class Builder extends Resource.Builder<Builder> {
private Tags tags;
- private URI image;
private URI machineType;
private Status status;
private String statusMessage;
@@ -228,14 +219,6 @@ public class Instance extends Resource {
}
/**
- * @see Instance#getImage()
- */
- public Builder image(URI image) {
- this.image = image;
- return this;
- }
-
- /**
* @see Instance#getMachineType()
*/
public Builder machineType(URI machineType) {
@@ -331,14 +314,13 @@ public class Instance extends Resource {
public Instance build() {
return new Instance(super.id, super.creationTimestamp, super.selfLink, super.name,
- super.description, tags, image, machineType, status, statusMessage, zone,
+ super.description, tags, machineType, status, statusMessage, zone,
networkInterfaces.build(), disks.build(), metadata, serviceAccounts.build());
}
public Builder fromInstance(Instance in) {
return super.fromResource(in)
.tags(in.getTags())
- .image(in.getImage())
.machineType(in.getMachineType())
.status(in.getStatus())
.statusMessage(in.getStatusMessage().orNull())
@@ -469,7 +451,7 @@ public class Instance extends Resource {
/**
* A disk attached to an Instance.
*
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16/instances"/>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1/instances"/>
*/
public static class AttachedDisk {
@@ -537,20 +519,23 @@ public class Instance extends Resource {
READ_ONLY;
}
- @ConstructorProperties({"mode", "source", "deviceName", "index", "deleteOnTerminate"})
+ @ConstructorProperties({"mode", "source", "deviceName", "index", "deleteOnTerminate",
+ "boot"})
public PersistentAttachedDisk(Mode mode, URI source, String deviceName, Integer index,
- boolean deleteOnTerminate) {
+ boolean deleteOnTerminate, boolean boot) {
super(index);
this.mode = checkNotNull(mode, "mode");
this.source = checkNotNull(source, "source");
this.deviceName = fromNullable(deviceName);
this.deleteOnTerminate = deleteOnTerminate;
+ this.boot = boot;
}
private final Mode mode;
private final URI source;
private final boolean deleteOnTerminate;
private final Optional<String> deviceName;
+ private final boolean boot;
@Override
public boolean isPersistent() {
@@ -572,6 +557,13 @@ public class Instance extends Resource {
}
/**
+ * @return the Name of the persistent disk resource
+ */
+ public String getSourceDiskName() {
+ return getLast(Splitter.on("/").split(source.toString()), null);
+ }
+
+ /**
* @return Must be unique within the instance when specified. This represents a unique
* device name that is reflected into the /dev/ tree of a Linux operating system running within the
* instance. If not specified, a default will be chosen by the system.
@@ -588,10 +580,25 @@ public class Instance extends Resource {
return deleteOnTerminate;
}
+ /**
+ * @return If true, this is the boot disk for this instance.
+ */
+ public boolean isBoot() {
+ return boot;
+ }
+
public static Builder builder() {
return new Builder();
}
+ /**
+ * {@inheritDoc}
+ */
+ protected Objects.ToStringHelper string() {
+ return toStringHelper(this).add("boot", boot);
+ }
+
+
public static final class Builder {
private Mode mode;
@@ -599,6 +606,7 @@ public class Instance extends Resource {
private String deviceName;
private Integer index;
private boolean deleteOnTerminate;
+ private boolean boot;
/**
* @see org.jclouds.googlecomputeengine.domain.Instance.PersistentAttachedDisk#getMode()
@@ -640,9 +648,17 @@ public class Instance extends Resource {
return this;
}
+ /**
+ * @see org.jclouds.googlecomputeengine.domain.Instance.PersistentAttachedDisk#isBoot()
+ */
+ public Builder boot(Boolean boot) {
+ this.boot = boot;
+ return this;
+ }
+
public PersistentAttachedDisk build() {
return new PersistentAttachedDisk(this.mode, this.source, this.deviceName, this.index,
- this.deleteOnTerminate);
+ this.deleteOnTerminate, this.boot);
}
public Builder fromPersistentAttachedDisk(PersistentAttachedDisk in) {
@@ -650,7 +666,8 @@ public class Instance extends Resource {
.source(in.getSource())
.deviceName(in.getDeviceName().orNull())
.index(in.getIndex())
- .deleteOnTerminate(in.isDeleteOnTerminate());
+ .deleteOnTerminate(in.isDeleteOnTerminate())
+ .boot(in.isBoot());
}
}
}
@@ -658,7 +675,7 @@ public class Instance extends Resource {
/**
* A network interface for an Instance.
*
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16/instances"/>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1/instances"/>
*/
public static final class NetworkInterface {
@@ -952,7 +969,7 @@ public class Instance extends Resource {
* The output of an instance's serial port;
*
* @author David Alves
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16/instances/serialPort"/>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1/instances/serialPort"/>
*/
public static final class SerialPortOutput {
@@ -1060,7 +1077,7 @@ public class Instance extends Resource {
* A service account for which access tokens are to be made available to the instance through metadata queries.
*
* @author David Alves
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16/instances"/>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1/instances"/>
*/
public static final class ServiceAccount {
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/InstanceTemplate.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/InstanceTemplate.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/InstanceTemplate.java
index a8d52c2..328b0bc 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/InstanceTemplate.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/InstanceTemplate.java
@@ -21,11 +21,13 @@ import static com.google.common.base.Preconditions.checkNotNull;
import static org.jclouds.googlecomputeengine.domain.Instance.NetworkInterface.AccessConfig.Type;
import java.net.URI;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import com.google.common.base.Objects;
import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
@@ -42,7 +44,7 @@ public class InstanceTemplate {
protected URI image;
protected Set<Instance.ServiceAccount> serviceAccounts = Sets.newLinkedHashSet();
- protected transient Set<PersistentDisk> disks = Sets.newLinkedHashSet();
+ protected transient List<PersistentDisk> disks = Lists.newArrayList();
protected transient Set<NetworkInterface> networkInterfaces = Sets.newLinkedHashSet();
protected transient Map<String, String> metadata = Maps.newLinkedHashMap();
protected transient String machineTypeName;
@@ -100,7 +102,15 @@ public class InstanceTemplate {
* @see org.jclouds.googlecomputeengine.domain.Instance#getDisks()
*/
public InstanceTemplate addDisk(PersistentDisk.Mode mode, URI source) {
- this.disks.add(new PersistentDisk(mode, source, null, null));
+ this.disks.add(new PersistentDisk(mode, source, null, false, false));
+ return this;
+ }
+
+ /**
+ * @see org.jclouds.googlecomputeengine.domain.Instance#getDisks()
+ */
+ public InstanceTemplate addDisk(PersistentDisk.Mode mode, URI source, Boolean deleteOnTerminate) {
+ this.disks.add(new PersistentDisk(mode, source, null, deleteOnTerminate, false));
return this;
}
@@ -108,15 +118,24 @@ public class InstanceTemplate {
* @see org.jclouds.googlecomputeengine.domain.Instance#getDisks()
*/
public InstanceTemplate addDisk(PersistentDisk.Mode mode, URI source, String deviceName, Boolean deleteOnTerminate) {
- this.disks.add(new PersistentDisk(mode, source, deviceName, deleteOnTerminate));
+ this.disks.add(new PersistentDisk(mode, source, deviceName, deleteOnTerminate, false));
+ return this;
+ }
+
+ /**
+ * @see org.jclouds.googlecomputeengine.domain.Instance#getDisks()
+ */
+ public InstanceTemplate addDisk(PersistentDisk.Mode mode, URI source, String deviceName,
+ Boolean deleteOnTerminate, Boolean boot) {
+ this.disks.add(new PersistentDisk(mode, source, deviceName, deleteOnTerminate, boot));
return this;
}
/**
* @see org.jclouds.googlecomputeengine.domain.Instance#getDisks()
*/
- public InstanceTemplate disks(Set<PersistentDisk> disks) {
- this.disks = Sets.newLinkedHashSet();
+ public InstanceTemplate disks(List<PersistentDisk> disks) {
+ this.disks = Lists.newArrayList();
this.disks.addAll(checkNotNull(disks, "disks"));
return this;
}
@@ -198,7 +217,7 @@ public class InstanceTemplate {
/**
* @see org.jclouds.googlecomputeengine.domain.Instance#getDisks()
*/
- public Set<PersistentDisk> getDisks() {
+ public List<PersistentDisk> getDisks() {
return disks;
}
@@ -290,17 +309,20 @@ public class InstanceTemplate {
READ_ONLY
}
- public PersistentDisk(Mode mode, URI source, String deviceName, Boolean deleteOnTerminate) {
+ public PersistentDisk(Mode mode, URI source, String deviceName, Boolean deleteOnTerminate,
+ Boolean boot) {
this.mode = checkNotNull(mode, "mode");
this.source = checkNotNull(source, "source");
this.deviceName = deviceName;
- this.deleteOnTerminate = deleteOnTerminate;
+ this.deleteOnTerminate = checkNotNull(deleteOnTerminate, "deleteOnTerminate");
+ this.boot = checkNotNull(boot, "boot");
}
private final Mode mode;
private final URI source;
private final Boolean deleteOnTerminate;
private final String deviceName;
+ private final Boolean boot;
/**
* @return the mode in which to attach this disk, either READ_WRITE or READ_ONLY.
@@ -332,6 +354,13 @@ public class InstanceTemplate {
public boolean isDeleteOnTerminate() {
return deleteOnTerminate;
}
+
+ /**
+ * @return If true, boot from this disk.
+ */
+ public boolean isBoot() {
+ return boot;
+ }
}
public static class NetworkInterface {
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Kernel.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Kernel.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Kernel.java
deleted file mode 100644
index 127ebdd..0000000
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Kernel.java
+++ /dev/null
@@ -1,91 +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.domain;
-
-import static com.google.common.base.Optional.fromNullable;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.beans.ConstructorProperties;
-import java.net.URI;
-import java.util.Date;
-
-import com.google.common.annotations.Beta;
-import com.google.common.base.Optional;
-
-/**
- * Represents a kernel.
- *
- * @author David Alves
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16/kernels"/>
- */
-@Beta
-public final class Kernel extends Resource {
- private final Optional<Deprecated> deprecated;
-
- @ConstructorProperties({
- "id", "creationTimestamp", "selfLink", "name", "description", "deprecated"
- })
- private Kernel(String id, Date creationTimestamp, URI selfLink, String name, String description,
- Deprecated deprecated) {
- super(Kind.KERNEL, id, creationTimestamp, selfLink, name, description);
- this.deprecated = fromNullable(deprecated);
- }
-
- /**
- * @return the deprecation information for this kernel
- */
- public Optional<Deprecated> getDeprecated() {
- return deprecated;
- }
-
- public static Builder builder() {
- return new Builder();
- }
-
- public Builder toBuilder() {
- return new Builder().fromKernel(this);
- }
-
- public static final class Builder extends Resource.Builder<Builder> {
-
- private Deprecated deprecated;
-
- /**
- * @see Kernel#getDeprecated()
- */
- public Builder deprecated(Deprecated deprecated) {
- this.deprecated = checkNotNull(deprecated, "deprecated");
- return this;
- }
-
- @Override
- protected Builder self() {
- return this;
- }
-
- public Kernel build() {
- return new Kernel(super.id, super.creationTimestamp, super.selfLink, super.name,
- super.description, deprecated);
- }
-
- public Builder fromKernel(Kernel in) {
- return super.fromResource(in)
- .deprecated(in.getDeprecated().orNull());
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/MachineType.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/MachineType.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/MachineType.java
index 86b1a2c..c18ec58 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/MachineType.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/MachineType.java
@@ -33,7 +33,7 @@ import com.google.common.collect.ImmutableList;
* Represents a machine type used to host an instance.
*
* @author David Alves
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16/machineTypes"/>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1/machineTypes"/>
*/
@Beta
public final class MachineType extends Resource {
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Network.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Network.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Network.java
index 2235873..166fa89 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Network.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Network.java
@@ -32,7 +32,7 @@ import com.google.common.base.Optional;
* Represents a network used to enable instance communication.
*
* @author David Alves
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16/networks"/>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1/networks"/>
*/
@Beta
public final class Network extends Resource {
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Operation.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Operation.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Operation.java
index b3547ce..ee292cd 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Operation.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Operation.java
@@ -38,7 +38,7 @@ import com.google.common.collect.ImmutableList;
* Describes an operation being executed on some Resource
*
* @author David Alves
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16/operations"/>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1/operations"/>
*/
@Beta
public class Operation extends Resource {
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Quota.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Quota.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Quota.java
index 7b036a0..3c17130 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Quota.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Quota.java
@@ -27,7 +27,7 @@ import com.google.common.base.Objects.ToStringHelper;
/**
* Quotas assigned to a given project or region.
*
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16/projects#resource"/>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1/projects#resource"/>
*/
@Beta
public class Quota {
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Region.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Region.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Region.java
index 4bd260b..c8d8094 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Region.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Region.java
@@ -33,7 +33,7 @@ import com.google.common.collect.ImmutableSet;
* Represents a region resource.
*
* @author David Alves
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16/regions"/>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1/regions"/>
*/
@Beta
public final class Region extends Resource {
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Resource.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Resource.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Resource.java
index 8abb381..98cb368 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Resource.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Resource.java
@@ -57,8 +57,6 @@ public class Resource {
OPERATION_LIST,
INSTANCE,
INSTANCE_LIST,
- KERNEL,
- KERNEL_LIST,
MACHINE_TYPE,
MACHINE_TYPE_LIST,
PROJECT,
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Route.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Route.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Route.java
index 73acd26..a981b75 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Route.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Route.java
@@ -37,7 +37,7 @@ import com.google.common.collect.ImmutableSet;
* Represents a route resource.
*
* @author Andrew Bayer
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16/routes"/>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1/routes"/>
*/
@Beta
public final class Route extends Resource {
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Snapshot.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Snapshot.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Snapshot.java
index 5528047..821eebb 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Snapshot.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Snapshot.java
@@ -31,7 +31,7 @@ import com.google.common.base.Optional;
* A Persistent Disk Snapshot resource.
*
* @author Andrew Bayer
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16/snapshots"/>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1/snapshots"/>
*/
@Beta
public final class Snapshot extends AbstractDisk {
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Zone.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Zone.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Zone.java
index c672222..1bf7df3 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Zone.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Zone.java
@@ -37,7 +37,7 @@ import com.google.common.collect.ImmutableSet;
* Represents a zone resource.
*
* @author David Alves
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16/zones"/>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1/zones"/>
*/
@Beta
public final class Zone extends Resource {
@@ -182,7 +182,7 @@ public final class Zone extends Resource {
* Scheduled maintenance windows for the zone. When the zone is in a maintenance window,
* all resources which reside in the zone will be unavailable.
*
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16/zones"/>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1/zones"/>
*/
public static final class MaintenanceWindow {
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/AddressApi.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/AddressApi.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/AddressApi.java
index 042fc59..abf08eb 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/AddressApi.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/AddressApi.java
@@ -55,7 +55,7 @@ import org.jclouds.rest.binders.BindToJsonPayload;
* Provides access to Addresses via their REST API.
*
* @author Andrew Bayer
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16/addresses"/>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1/addresses"/>
*/
@SkipEncoding({'/', '='})
@RequestFilters(OAuthAuthenticator.class)
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/DiskApi.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/DiskApi.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/DiskApi.java
index 5c49de1..028edbc 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/DiskApi.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/DiskApi.java
@@ -55,7 +55,7 @@ import org.jclouds.rest.binders.BindToJsonPayload;
* Provides access to Disks via their REST API.
*
* @author David Alves
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16/disks"/>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1/disks"/>
*/
@SkipEncoding({'/', '='})
@RequestFilters(OAuthAuthenticator.class)
@@ -98,6 +98,50 @@ public interface DiskApi {
@PathParam("zone") String zone);
/**
+ * Creates a persistent disk resource from the specified image, in the specified project,
+ * specifying the size of the disk.
+ *
+ * @param sourceImage fully qualified URL for the image to be copied.
+ * @param diskName the name of disk.
+ * @param sizeGb the size of the disk
+ * @param zone the name of the zone where the disk is to be created.
+ * @return an Operation resource. To check on the status of an operation, poll the Operations resource returned to
+ * you, and look for the status field.
+ */
+ @Named("Disks:insert")
+ @POST
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ @Path("/zones/{zone}/disks")
+ @OAuthScopes({COMPUTE_SCOPE})
+ @MapBinder(BindToJsonPayload.class)
+ Operation createFromImageWithSizeInZone(@QueryParam("sourceImage") String sourceImage,
+ @PayloadParam("name") String diskName,
+ @PayloadParam("sizeGb") int sizeGb,
+ @PathParam("zone") String zone);
+
+ /**
+ * Creates a persistent disk resource from the specified image, in the specified project,
+ * with the default disk size.
+ *
+ * @param sourceImage fully qualified URL for the image to be copied.
+ * @param diskName the name of disk.
+ * @param zone the name of the zone where the disk is to be created.
+ * @return an Operation resource. To check on the status of an operation, poll the Operations resource returned to
+ * you, and look for the status field.
+ */
+ @Named("Disks:insert")
+ @POST
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ @Path("/zones/{zone}/disks")
+ @OAuthScopes({COMPUTE_SCOPE})
+ @MapBinder(BindToJsonPayload.class)
+ Operation createFromImageInZone(@QueryParam("sourceImage") String sourceImage,
+ @PayloadParam("name") String diskName,
+ @PathParam("zone") String zone);
+
+ /**
* Deletes the specified persistent disk resource.
*
* @param zone the zone the disk is in.
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/FirewallApi.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/FirewallApi.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/FirewallApi.java
index df034e4..3b607e3 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/FirewallApi.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/FirewallApi.java
@@ -63,7 +63,7 @@ import org.jclouds.rest.binders.BindToJsonPayload;
* <p/>
*
* @author David Alves
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16/firewalls"/>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1/firewalls"/>
*/
@SkipEncoding({'/', '='})
@RequestFilters(OAuthAuthenticator.class)
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/GlobalOperationApi.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/GlobalOperationApi.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/GlobalOperationApi.java
index 7a9a5b4..fd0251a 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/GlobalOperationApi.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/GlobalOperationApi.java
@@ -49,7 +49,7 @@ import org.jclouds.rest.annotations.Transform;
* Provides access to Global Operations via their REST API.
*
* @author David Alves
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16/globalOperations"/>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1/globalOperations"/>
*/
@SkipEncoding({'/', '='})
@RequestFilters(OAuthAuthenticator.class)
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/ImageApi.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/ImageApi.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/ImageApi.java
index ff55184..23d3251 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/ImageApi.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/ImageApi.java
@@ -51,7 +51,7 @@ import org.jclouds.rest.annotations.Transform;
* <p/>
*
* @author David Alves
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16/images"/>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1/images"/>
*/
@SkipEncoding({'/', '='})
@RequestFilters(OAuthAuthenticator.class)
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/2aa7340a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/InstanceApi.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/InstanceApi.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/InstanceApi.java
index 88a4f83..dbcc366 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/InstanceApi.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/InstanceApi.java
@@ -63,7 +63,7 @@ import org.jclouds.rest.binders.BindToJsonPayload;
* Provides access to Instances via their REST API.
*
* @author David Alves
- * @see <a href="https://developers.google.com/compute/docs/reference/v1beta16/instances"/>
+ * @see <a href="https://developers.google.com/compute/docs/reference/v1/instances"/>
* @see InstanceApi
*/
@SkipEncoding({'/', '='})