Repository: jclouds Updated Branches: refs/heads/master 87eda1508 -> fdaa3fd72
Wrap Image with Optional in DiskURIToImage Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/fdaa3fd7 Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/fdaa3fd7 Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/fdaa3fd7 Branch: refs/heads/master Commit: fdaa3fd7215ba2916650305f83d5323ae91f8240 Parents: 87eda15 Author: Tomasz WojtunÌ <[email protected]> Authored: Wed Feb 22 08:16:10 2017 +0100 Committer: Ignasi Barrera <[email protected]> Committed: Tue Mar 14 08:40:11 2017 +0100 ---------------------------------------------------------------------- .../GoogleComputeEngineServiceAdapter.java | 5 +++-- ...GoogleComputeEngineServiceContextModule.java | 7 ++++--- .../functions/InstanceToNodeMetadata.java | 11 +++++++---- .../compute/loaders/DiskURIToImage.java | 9 ++++++--- .../GoogleComputeEngineServiceMockTest.java | 20 ++++++++++++++++++++ .../functions/InstanceToNodeMetadataTest.java | 5 +++-- .../disk_get_with_source_snapshot.json | 12 ++++++++++++ 7 files changed, 55 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/fdaa3fd7/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceAdapter.java ---------------------------------------------------------------------- diff --git a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceAdapter.java b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceAdapter.java index 99ec4e7..fe54bdf 100644 --- a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceAdapter.java +++ b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceAdapter.java @@ -62,6 +62,7 @@ import org.jclouds.googlecomputeengine.features.InstanceApi; import org.jclouds.location.suppliers.all.JustProvider; import com.google.common.base.Function; +import com.google.common.base.Optional; import com.google.common.base.Predicate; import com.google.common.base.Splitter; import com.google.common.base.Strings; @@ -96,7 +97,7 @@ public final class GoogleComputeEngineServiceAdapter private final Function<Map<String, ?>, String> windowsPasswordGenerator; private final FirewallTagNamingConvention.Factory firewallTagNamingConvention; private final List<String> imageProjects; - private final LoadingCache<URI, Image> diskURIToImage; + private final LoadingCache<URI, Optional<Image>> diskURIToImage; @Inject GoogleComputeEngineServiceAdapter(JustProvider justProvider, GoogleComputeEngineApi api, Predicate<AtomicReference<Operation>> operationDone, @@ -105,7 +106,7 @@ public final class GoogleComputeEngineServiceAdapter Resources resources, FirewallTagNamingConvention.Factory firewallTagNamingConvention, @Named(IMAGE_PROJECTS) String imageProjects, - LoadingCache<URI, Image> diskURIToImage) { + LoadingCache<URI, Optional<Image>> diskURIToImage) { this.justProvider = justProvider; this.api = api; this.operationDone = operationDone; http://git-wip-us.apache.org/repos/asf/jclouds/blob/fdaa3fd7/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/config/GoogleComputeEngineServiceContextModule.java ---------------------------------------------------------------------- diff --git a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/config/GoogleComputeEngineServiceContextModule.java b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/config/GoogleComputeEngineServiceContextModule.java index 10c4d6e..6a9772e 100644 --- a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/config/GoogleComputeEngineServiceContextModule.java +++ b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/config/GoogleComputeEngineServiceContextModule.java @@ -67,6 +67,7 @@ import org.jclouds.googlecomputeengine.domain.Operation; import org.jclouds.location.suppliers.ImplicitLocationSupplier; import org.jclouds.location.suppliers.implicit.FirstZone; +import com.google.common.base.Optional; import com.google.common.base.Function; import com.google.common.base.Functions; import com.google.common.base.Predicate; @@ -134,7 +135,7 @@ public final class GoogleComputeEngineServiceContextModule bind(FirewallTagNamingConvention.Factory.class).in(Scopes.SINGLETON); - bind(new TypeLiteral<CacheLoader<URI, Image>>() { + bind(new TypeLiteral<CacheLoader<URI, Optional<Image>>>() { }).to(DiskURIToImage.class); bindHttpApi(binder(), Resources.class); @@ -202,8 +203,8 @@ public final class GoogleComputeEngineServiceContextModule @Provides @Singleton - protected LoadingCache<URI, Image> diskURIToImageMap( - CacheLoader<URI, Image> in) { + protected LoadingCache<URI, Optional<Image>> diskURIToImageMap( + CacheLoader<URI, Optional<Image>> in) { return CacheBuilder.newBuilder().build(in); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/fdaa3fd7/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/InstanceToNodeMetadata.java ---------------------------------------------------------------------- diff --git a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/InstanceToNodeMetadata.java b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/InstanceToNodeMetadata.java index 7e7407e..c531f13 100644 --- a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/InstanceToNodeMetadata.java +++ b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/InstanceToNodeMetadata.java @@ -17,6 +17,7 @@ package org.jclouds.googlecomputeengine.compute.functions; import com.google.common.base.Function; +import com.google.common.base.Optional; import com.google.common.base.Splitter; import com.google.common.base.Supplier; import com.google.common.cache.LoadingCache; @@ -44,13 +45,13 @@ public final class InstanceToNodeMetadata implements Function<Instance, NodeMeta private final Map<Instance.Status, NodeMetadata.Status> toPortableNodeStatus; private final GroupNamingConvention nodeNamingConvention; - private final LoadingCache<URI, Image> diskURIToImage; + private final LoadingCache<URI, Optional<Image>> diskURIToImage; private final Supplier<Map<URI, Hardware>> hardwares; private final Supplier<Map<URI, Location>> locationsByUri; @Inject InstanceToNodeMetadata(Map<Instance.Status, NodeMetadata.Status> toPortableNodeStatus, GroupNamingConvention.Factory namingConvention, - LoadingCache<URI, Image> diskURIToImage, + LoadingCache<URI, Optional<Image>> diskURIToImage, @Memoized Supplier<Map<URI, Hardware>> hardwares, @Memoized Supplier<Map<URI, Location>> locationsByUri) { this.toPortableNodeStatus = toPortableNodeStatus; @@ -74,7 +75,9 @@ public final class InstanceToNodeMetadata implements Function<Instance, NodeMeta // // Note: This will be present if we created the node. In the future we could choose to make diskToSourceImage // a loading cache. That would be more expensive, but could ensure this isn't null. - Image image = diskURIToImage.getUnchecked(input.disks().get(0).source()); + + URI diskSource = input.disks().get(0).source(); + Optional<Image> image = diskURIToImage.getUnchecked(diskSource); Hardware hardware; if (isCustomMachineTypeURI(input.machineType())) { @@ -89,7 +92,7 @@ public final class InstanceToNodeMetadata implements Function<Instance, NodeMeta .providerId(input.id()) .hostname(input.name()) .location(zone) - .imageId(image != null ? image.selfLink().toString() : null) + .imageId(image.isPresent() ? image.get().selfLink().toString() : null) .hardware(hardware) .status(input.status() != null ? toPortableNodeStatus.get(input.status()) : Status.UNRECOGNIZED) .tags(input.tags().items()) http://git-wip-us.apache.org/repos/asf/jclouds/blob/fdaa3fd7/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/loaders/DiskURIToImage.java ---------------------------------------------------------------------- diff --git a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/loaders/DiskURIToImage.java b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/loaders/DiskURIToImage.java index 0dccaf4..0f98098 100644 --- a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/loaders/DiskURIToImage.java +++ b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/loaders/DiskURIToImage.java @@ -22,6 +22,7 @@ import javax.inject.Singleton; import java.net.URI; import java.util.concurrent.ExecutionException; +import com.google.common.base.Optional; import com.google.common.cache.CacheLoader; import org.jclouds.googlecomputeengine.compute.functions.Resources; import org.jclouds.googlecomputeengine.domain.Disk; @@ -30,7 +31,7 @@ import org.jclouds.logging.Logger; @Singleton -public class DiskURIToImage extends CacheLoader<URI, Image> { +public class DiskURIToImage extends CacheLoader<URI, Optional<Image>> { @Resource protected Logger logger = Logger.NULL; @@ -42,10 +43,12 @@ public class DiskURIToImage extends CacheLoader<URI, Image> { } @Override - public Image load(URI key) throws ExecutionException { + public Optional<Image> load(URI key) throws ExecutionException { try { Disk disk = resources.disk(key); - return resources.image(disk.sourceImage()); + URI sourceImage = disk.sourceImage(); + Image image = sourceImage != null ? resources.image(sourceImage) : null; + return Optional.fromNullable(image); } catch (Exception e) { throw new ExecutionException(message(key, e), e); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/fdaa3fd7/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceMockTest.java ---------------------------------------------------------------------- diff --git a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceMockTest.java b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceMockTest.java index 4eb7aef..279f09d 100644 --- a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceMockTest.java +++ b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceMockTest.java @@ -148,6 +148,26 @@ public class GoogleComputeEngineServiceMockTest extends BaseGoogleComputeEngineA assertSent(server, "GET", "/projects/party/aggregated/machineTypes"); } + + public void listNodesWithSnapshotSource() throws Exception { + server.enqueue(aggregatedListWithInstanceNetworkAndStatus("test-0", "test-network", RUNNING)); + server.enqueue(singleRegionSingleZoneResponse()); + server.enqueue(jsonResponse("/disk_get_with_source_snapshot.json")); + server.enqueue(jsonResponse("/aggregated_machinetype_list.json")); + + Set<? extends ComputeMetadata> nodes = computeService().listNodes(); + assertEquals(nodes.size(), 1); + NodeMetadata node = (NodeMetadata) nodes.iterator().next(); + String imageId = node.getImageId(); + assertEquals(imageId, null); + assertSent(server, "GET", "/projects/party/aggregated/instances"); + assertSent(server, "GET", "/projects/party/regions"); + assertSent(server, "GET", "/projects/party/zones/us-central1-a/disks/test"); + assertSent(server, "GET", "/projects/party/aggregated/machineTypes"); + } + + + public void createNodeWhenFirewallDoesNotExist() throws Exception { server.enqueue(singleRegionSingleZoneResponse()); server.enqueue(jsonResponse("/image_list.json")); http://git-wip-us.apache.org/repos/asf/jclouds/blob/fdaa3fd7/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/functions/InstanceToNodeMetadataTest.java ---------------------------------------------------------------------- diff --git a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/functions/InstanceToNodeMetadataTest.java b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/functions/InstanceToNodeMetadataTest.java index 93ee6c5..e2d679b 100644 --- a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/functions/InstanceToNodeMetadataTest.java +++ b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/functions/InstanceToNodeMetadataTest.java @@ -18,6 +18,7 @@ package org.jclouds.googlecomputeengine.compute.functions; import com.google.common.base.Function; import com.google.common.base.Functions; +import com.google.common.base.Optional; import com.google.common.base.Predicate; import com.google.common.base.Supplier; import com.google.common.base.Suppliers; @@ -176,8 +177,8 @@ public class InstanceToNodeMetadataTest { } }; - Map<URI, Image> imageMap = ImmutableMap.of(instance.disks().get(0).source(), - new ParseImageTest().expected()); + Map<URI, Optional<Image>> imageMap = ImmutableMap.of(instance.disks().get(0).source(), + Optional.of(new ParseImageTest().expected())); return new InstanceToNodeMetadata( ImmutableMap.<Instance.Status, NodeMetadata.Status>builder() http://git-wip-us.apache.org/repos/asf/jclouds/blob/fdaa3fd7/providers/google-compute-engine/src/test/resources/disk_get_with_source_snapshot.json ---------------------------------------------------------------------- diff --git a/providers/google-compute-engine/src/test/resources/disk_get_with_source_snapshot.json b/providers/google-compute-engine/src/test/resources/disk_get_with_source_snapshot.json new file mode 100644 index 0000000..cf5db84 --- /dev/null +++ b/providers/google-compute-engine/src/test/resources/disk_get_with_source_snapshot.json @@ -0,0 +1,12 @@ +{ + "kind": "compute#disk", + "id": "13050421646334304115", + "creationTimestamp": "2012-11-25T01:38:48.306", + "selfLink": "https://www.googleapis.com/compute/v1/projects/party/zones/us-central1-a/disks/test", + "name": "test", + "sizeGb": "1", + "zone": "https://www.googleapis.com/compute/v1/projects/party/zones/us-central1-a", + "status": "READY", + "type": "https://www.googleapis.com/compute/v1/projects/studied-point-720/zones/us-central1-a/diskTypes/pd-standard", + "sourceSnapshot": "https://www.googleapis.com/compute/v1/projects/party/global/snapshots/snapshot" +} \ No newline at end of file
