You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by za...@apache.org on 2015/04/09 21:54:40 UTC
jclouds-labs-openstack git commit: Parse image properties when get
image metadata from headers; comments; formatting.
Repository: jclouds-labs-openstack
Updated Branches:
refs/heads/master e7d93f406 -> 32815adb3
Parse image properties when get image metadata from headers; comments; formatting.
Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/commit/32815adb
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/tree/32815adb
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/diff/32815adb
Branch: refs/heads/master
Commit: 32815adb34dd0259a1416d38adf371eb8b225a5d
Parents: e7d93f4
Author: Evgeny Tarasenko <et...@xored.com>
Authored: Fri Mar 27 16:41:31 2015 +0600
Committer: Zack Shoylev <za...@rackspace.com>
Committed: Thu Apr 9 14:53:46 2015 -0500
----------------------------------------------------------------------
.../functions/ParseImageDetailsFromHeaders.java | 21 ++++++++++++++++++++
.../ParseImageDetailsFromHeadersTest.java | 3 +++
2 files changed, 24 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/32815adb/openstack-glance/src/main/java/org/jclouds/openstack/glance/v1_0/functions/ParseImageDetailsFromHeaders.java
----------------------------------------------------------------------
diff --git a/openstack-glance/src/main/java/org/jclouds/openstack/glance/v1_0/functions/ParseImageDetailsFromHeaders.java b/openstack-glance/src/main/java/org/jclouds/openstack/glance/v1_0/functions/ParseImageDetailsFromHeaders.java
index e683a7c..776604d 100644
--- a/openstack-glance/src/main/java/org/jclouds/openstack/glance/v1_0/functions/ParseImageDetailsFromHeaders.java
+++ b/openstack-glance/src/main/java/org/jclouds/openstack/glance/v1_0/functions/ParseImageDetailsFromHeaders.java
@@ -28,12 +28,15 @@ import static org.jclouds.openstack.glance.v1_0.options.ImageField.MIN_DISK;
import static org.jclouds.openstack.glance.v1_0.options.ImageField.MIN_RAM;
import static org.jclouds.openstack.glance.v1_0.options.ImageField.NAME;
import static org.jclouds.openstack.glance.v1_0.options.ImageField.OWNER;
+import static org.jclouds.openstack.glance.v1_0.options.ImageField.PROPERTY;
import static org.jclouds.openstack.glance.v1_0.options.ImageField.SIZE;
import static org.jclouds.openstack.glance.v1_0.options.ImageField.STATUS;
import static org.jclouds.openstack.glance.v1_0.options.ImageField.UPDATED_AT;
import javax.inject.Inject;
+import com.google.common.base.Strings;
+import com.google.common.collect.Maps;
import org.jclouds.date.DateService;
import org.jclouds.http.HttpResponse;
import org.jclouds.openstack.glance.v1_0.domain.ContainerFormat;
@@ -43,6 +46,8 @@ import org.jclouds.openstack.glance.v1_0.domain.ImageDetails;
import com.google.common.base.Function;
+import java.util.Map;
+
/**
* This parses {@link ImageDetails} from HTTP headers.
*/
@@ -79,6 +84,22 @@ public class ParseImageDetailsFromHeaders implements Function<HttpResponse, Imag
if (deletedAt != null) builder.deletedAt(dateService.iso8601SecondsDateParse(deletedAt));
if (size != null) builder.size(Long.parseLong(size));
+ // There may be multiple headers that begin with the prefix x-image-meta-property-. These headers are free-form
+ // key/value pairs that have been saved with the image metadata. The key is the string after
+ // x-image-meta-property- and the value is the value of the header
+ Map<String, String> properties = Maps.newHashMap();
+ String propertyHeader = PROPERTY.asHeader();
+ for (Map.Entry<String, String> headerEntry : from.getHeaders().entries()) {
+ String headerName = headerEntry.getKey();
+ if (!Strings.isNullOrEmpty(headerName) && headerName.startsWith(propertyHeader)
+ && headerName.length() > propertyHeader.length()) {
+ String propertyName = headerName.substring(PROPERTY.asHeader().length() + 1).toLowerCase();
+ String propertyValue = headerEntry.getValue();
+ properties.put(propertyName, propertyValue);
+ }
+ }
+ builder.properties(properties);
+
return builder.build();
}
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/32815adb/openstack-glance/src/test/java/org/jclouds/openstack/glance/v1_0/functions/ParseImageDetailsFromHeadersTest.java
----------------------------------------------------------------------
diff --git a/openstack-glance/src/test/java/org/jclouds/openstack/glance/v1_0/functions/ParseImageDetailsFromHeadersTest.java b/openstack-glance/src/test/java/org/jclouds/openstack/glance/v1_0/functions/ParseImageDetailsFromHeadersTest.java
index bdb64e0..920524c 100644
--- a/openstack-glance/src/test/java/org/jclouds/openstack/glance/v1_0/functions/ParseImageDetailsFromHeadersTest.java
+++ b/openstack-glance/src/test/java/org/jclouds/openstack/glance/v1_0/functions/ParseImageDetailsFromHeadersTest.java
@@ -18,6 +18,7 @@ package org.jclouds.openstack.glance.v1_0.functions;
import static org.testng.Assert.assertEquals;
+import com.google.common.collect.ImmutableMap;
import org.jclouds.date.internal.SimpleDateFormatDateService;
import org.jclouds.http.HttpResponse;
import org.jclouds.openstack.glance.v1_0.domain.ContainerFormat;
@@ -52,6 +53,7 @@ public class ParseImageDetailsFromHeadersTest {
.put("X-Image-Meta-Updated_at", "2012-05-18T18:42:58")
.put("X-Image-Meta-Disk_format", "raw")
.put("X-Image-Meta-Name", "debian")
+ .put("X-Image-Meta-Property-Description", "debian image description")
.put("Location", "http://HOST/v1/images/fcc451d0-f6e4-4824-ad8f-70ec12326d07")
.put("Etag", "233afa7b8809d840679b5f0d36d7350a")
.build())
@@ -65,6 +67,7 @@ public class ParseImageDetailsFromHeadersTest {
return ImageDetails.builder()
.id("fcc451d0-f6e4-4824-ad8f-70ec12326d07")
.name("debian")
+ .properties(ImmutableMap.of("description", "debian image description"))
.containerFormat(ContainerFormat.BARE)
.diskFormat(DiskFormat.RAW)
.checksum("233afa7b8809d840679b5f0d36d7350a")