You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by na...@apache.org on 2016/01/21 01:03:34 UTC

[10/19] jclouds git commit: JCLOUDS-1025: Add support for metadata and tags in the ComputeService

JCLOUDS-1025: Add support for metadata and tags in the ComputeService


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

Branch: refs/heads/master
Commit: 4596471bb258c391af06b7bde6f017af02e965db
Parents: 200e0e1
Author: Ignasi Barrera <na...@apache.org>
Authored: Fri Oct 23 00:18:45 2015 +0200
Committer: Ignasi Barrera <na...@apache.org>
Committed: Fri Oct 23 00:18:45 2015 +0200

----------------------------------------------------------------------
 .../DigitalOcean2ComputeServiceAdapter.java     | 21 ++++++++++++++++-
 .../compute/functions/RegionToLocation.java     |  2 ++
 .../domain/options/CreateDropletOptions.java    | 24 ++++++++++++++++++++
 .../DigitalOcean2ComputeServiceLiveTest.java    |  4 ++--
 .../compute/functions/RegionToLocationTest.java | 10 +++++---
 5 files changed, 55 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/4596471b/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/compute/DigitalOcean2ComputeServiceAdapter.java
----------------------------------------------------------------------
diff --git a/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/compute/DigitalOcean2ComputeServiceAdapter.java b/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/compute/DigitalOcean2ComputeServiceAdapter.java
index f1f5919..43b1585 100644
--- a/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/compute/DigitalOcean2ComputeServiceAdapter.java
+++ b/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/compute/DigitalOcean2ComputeServiceAdapter.java
@@ -27,7 +27,10 @@ import static com.google.common.collect.Sets.newHashSet;
 import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_RUNNING;
 import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_SUSPENDED;
 import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_TERMINATED;
+import static org.jclouds.compute.util.ComputeServiceUtils.metadataAndTagsAsCommaDelimitedValue;
 
+import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import javax.annotation.Resource;
@@ -48,6 +51,7 @@ import org.jclouds.digitalocean2.domain.Region;
 import org.jclouds.digitalocean2.domain.Size;
 import org.jclouds.digitalocean2.domain.options.CreateDropletOptions;
 import org.jclouds.domain.LoginCredentials;
+import org.jclouds.json.Json;
 import org.jclouds.logging.Logger;
 
 import com.google.common.base.Function;
@@ -67,15 +71,18 @@ public class DigitalOcean2ComputeServiceAdapter implements ComputeServiceAdapter
    private final Predicate<Integer> nodeRunningPredicate;
    private final Predicate<Integer> nodeStoppedPredicate;
    private final Predicate<Integer> nodeTerminatedPredicate;
+   private final Json json;
 
    @Inject DigitalOcean2ComputeServiceAdapter(DigitalOcean2Api api,
          @Named(TIMEOUT_NODE_RUNNING) Predicate<Integer> nodeRunningPredicate,
          @Named(TIMEOUT_NODE_SUSPENDED) Predicate<Integer> nodeStoppedPredicate,
-         @Named(TIMEOUT_NODE_TERMINATED) Predicate<Integer> nodeTerminatedPredicate) {
+         @Named(TIMEOUT_NODE_TERMINATED) Predicate<Integer> nodeTerminatedPredicate,
+         Json json) {
       this.api = api;
       this.nodeRunningPredicate = nodeRunningPredicate;
       this.nodeStoppedPredicate = nodeStoppedPredicate;
       this.nodeTerminatedPredicate = nodeTerminatedPredicate;
+      this.json = json;
    }
 
    @Override
@@ -91,6 +98,18 @@ public class DigitalOcean2ComputeServiceAdapter implements ComputeServiceAdapter
          options.addSshKeyIds(templateOptions.getSshKeyIds());
       }
 
+      Map<String, String> metadataAndTags = metadataAndTagsAsCommaDelimitedValue(templateOptions);
+      if (!metadataAndTags.isEmpty()) {
+         @SuppressWarnings("unchecked")
+         List<String> regionFeatures = (List<String>) template.getLocation().getMetadata().get("features");
+         if (regionFeatures.contains("metadata")) {
+            options.userData(json.toJson(metadataAndTags));
+         } else {
+            logger.debug(">> region %s does not support metadata, ignoring provided user data", template.getLocation()
+                  .getId());
+         }
+      }
+
       DropletCreate dropletCreated = api.dropletApi().create(name,
             template.getLocation().getId(),
             template.getHardware().getProviderId(),

http://git-wip-us.apache.org/repos/asf/jclouds/blob/4596471b/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/compute/functions/RegionToLocation.java
----------------------------------------------------------------------
diff --git a/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/compute/functions/RegionToLocation.java b/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/compute/functions/RegionToLocation.java
index 4adf240..adde1b7 100644
--- a/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/compute/functions/RegionToLocation.java
+++ b/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/compute/functions/RegionToLocation.java
@@ -29,6 +29,7 @@ import org.jclouds.domain.LocationScope;
 import org.jclouds.location.suppliers.all.JustProvider;
 
 import com.google.common.base.Function;
+import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 
 /**
@@ -52,6 +53,7 @@ public class RegionToLocation implements Function<Region, Location> {
       builder.scope(LocationScope.REGION);
       builder.parent(getOnlyElement(justProvider.get()));
       builder.iso3166Codes(ImmutableSet.<String> of());
+      builder.metadata(ImmutableMap.<String, Object> of("available", input.available(), "features", input.features()));
       return builder.build();
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/4596471b/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/options/CreateDropletOptions.java
----------------------------------------------------------------------
diff --git a/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/options/CreateDropletOptions.java b/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/options/CreateDropletOptions.java
index b20fc96..91fb090 100644
--- a/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/options/CreateDropletOptions.java
+++ b/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/options/CreateDropletOptions.java
@@ -104,6 +104,14 @@ public class CreateDropletOptions implements MapBinder {
       return backupsEnabled;
    }
 
+   public boolean isIpv6Enabled() {
+      return ipv6Enabled;
+   }
+
+   public String getUserData() {
+      return userData;
+   }
+
    public static Builder builder() {
       return new Builder();
    }
@@ -148,6 +156,22 @@ public class CreateDropletOptions implements MapBinder {
          return this;
       }
 
+      /**
+       * Sets the user data for the droplet.
+       */
+      public Builder userData(String userData) {
+         this.userData = userData;
+         return this;
+      }
+
+      /**
+       * Enables/disables IPv6 for the droplet.
+       */
+      public Builder ipv6Enabled(boolean ipv6Enabled) {
+         this.ipv6Enabled = ipv6Enabled;
+         return this;
+      }
+
       public CreateDropletOptions build() {
          return new CreateDropletOptions(sshKeyIds.build(), backupsEnabled, ipv6Enabled, privateNetworking, userData);
       }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/4596471b/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/compute/DigitalOcean2ComputeServiceLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/compute/DigitalOcean2ComputeServiceLiveTest.java b/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/compute/DigitalOcean2ComputeServiceLiveTest.java
index b1dcc1b..b8fbbe7 100644
--- a/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/compute/DigitalOcean2ComputeServiceLiveTest.java
+++ b/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/compute/DigitalOcean2ComputeServiceLiveTest.java
@@ -47,12 +47,12 @@ public class DigitalOcean2ComputeServiceLiveTest extends BaseComputeServiceLiveT
 
    @Override
    protected void checkTagsInNodeEquals(NodeMetadata node, ImmutableSet<String> tags) {
-      // DigitalOcean does not support tags
+      // We encode the tags in the user data but the DigitalOcean API does not return it
    }
 
    @Override
    protected void checkUserMetadataContains(NodeMetadata node, ImmutableMap<String, String> userMetadata) {
-      // DigitalOcean does not support user metadata
+      // The DigitalOcean API does not return the user data
    }
 
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/4596471b/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/compute/functions/RegionToLocationTest.java
----------------------------------------------------------------------
diff --git a/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/compute/functions/RegionToLocationTest.java b/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/compute/functions/RegionToLocationTest.java
index 879091b..7e6ecea 100644
--- a/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/compute/functions/RegionToLocationTest.java
+++ b/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/compute/functions/RegionToLocationTest.java
@@ -42,11 +42,15 @@ public class RegionToLocationTest {
       JustProvider locationsSupplier = new JustProvider(metadata.getId(), Suppliers.<URI> ofInstance(URI
             .create(metadata.getEndpoint())), ImmutableSet.<String> of());
 
-      Region region = Region.create("reg1", "Region1", ImmutableList.<String> of(), true, ImmutableList.<String> of());
+      Region region = Region.create("reg1", "Region1", ImmutableList.<String> of(), true,
+            ImmutableList.<String> of("virtio", "metadata"));
       Location expected = new LocationBuilder().id("reg1").description("reg1/Region 1")
             .parent(getOnlyElement(locationsSupplier.get())).scope(LocationScope.REGION).build();
 
-      RegionToLocation function = new RegionToLocation(locationsSupplier);
-      assertEquals(function.apply(region), expected);
+      Location location = new RegionToLocation(locationsSupplier).apply(region);
+
+      assertEquals(location, expected);
+      assertEquals(location.getMetadata().get("available"), true);
+      assertEquals(location.getMetadata().get("features"), ImmutableList.of("virtio", "metadata"));
    }
 }