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"));
}
}