Skip to content

Commit ace98de

Browse files
committed
glance: image creation should use metadata headers
In the image creation API the metadata is passed as headers (same as the upload API). Signed-off-by: Federico Simoncelli <fsimonce@redhat.com>
1 parent f852737 commit ace98de

File tree

3 files changed

+42
-16
lines changed

3 files changed

+42
-16
lines changed

glance-client/src/main/java/com/woorea/openstack/glance/ImagesResource.java

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.Calendar;
44
import java.util.Collection;
5+
import java.util.HashMap;
56
import java.util.Map;
67

78
import org.codehaus.jackson.annotate.JsonProperty;
@@ -81,7 +82,10 @@ public List(boolean detail) {
8182
public class Create extends OpenStackRequest<Image> {
8283

8384
public Create(Image image) {
84-
super(CLIENT, HttpMethod.POST, "/images", Entity.json(image), Image.class);
85+
super(CLIENT, HttpMethod.POST, "/images", null, Image.class);
86+
for (Map.Entry<String, String> entry : compose(image).entrySet()) {
87+
header(entry.getKey(), entry.getValue());
88+
}
8589
}
8690

8791
}
@@ -120,19 +124,13 @@ public class Upload extends OpenStackRequest<Image> {
120124

121125
public Upload(ImageUpload imageUpload) {
122126
super(CLIENT, HttpMethod.POST, "/images", Entity.stream(imageUpload.getInputStream()), Image.class);
123-
header("x-image-meta-name", imageUpload.getImage().getName());
124-
header("x-image-meta-disk_format", imageUpload.getImage().getDiskFormat());
125-
header("x-image-meta-container_format", imageUpload.getImage().getContainerFormat());
126-
header("x-image-meta-id", imageUpload.getImage().getId());
127+
128+
for (Map.Entry<String, String> entry : compose(imageUpload.getImage()).entrySet()) {
129+
header(entry.getKey(), entry.getValue());
130+
}
131+
127132
//file,s3,swift
128133
header("x-image-meta-store", imageUpload.getStore());
129-
header("x-image-meta-size", imageUpload.getImage().getSize());
130-
header("x-image-meta-checksum", imageUpload.getImage().getChecksum());
131-
header("x-image-meta-is-public", imageUpload.getImage().isPublic());
132-
header("x-image-meta-owner", imageUpload.getImage().getOwner());
133-
for(String key : imageUpload.getProperties().keySet()) {
134-
imageUpload.getProperties().put("x-image-meta-property-" + key, imageUpload.getProperties().get(key));
135-
}
136134
}
137135

138136
}
@@ -187,7 +185,26 @@ public RemoveMember(String id, String tenantId) {
187185
}
188186

189187
}
190-
188+
189+
public static Map<String, String> compose(Image image) {
190+
Map<String, String> headers = new HashMap<String, String>();
191+
192+
headers.put("X-Image-Meta-Name", image.getName());
193+
headers.put("X-Image-Meta-Disk_format", image.getDiskFormat());
194+
headers.put("X-Image-Meta-Container_format", image.getContainerFormat());
195+
headers.put("X-Image-Meta-Id", image.getId());
196+
headers.put("X-Image-Meta-Size", (image.getSize() != null) ? image.getSize().toString() : null);
197+
headers.put("X-Image-Meta-Checksum", image.getChecksum());
198+
headers.put("X-Image-Meta-Is_public", String.valueOf(image.isPublic()));
199+
headers.put("X-Image-Meta-Owner", image.getOwner());
200+
201+
for(String key : image.getProperties().keySet()) {
202+
image.getProperties().put("x-image-meta-property-" + key, image.getProperties().get(key));
203+
}
204+
205+
return headers;
206+
}
207+
191208
public static Image parse(Map<String, String> headers) {
192209
Image image = new Image();
193210
image.setId(headers.get("X-Image-Meta-Id"));

openstack-client/src/main/java/com/woorea/openstack/base/client/OpenStackRequest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,9 @@ public String path() {
6262
return path.toString();
6363
}
6464

65-
public OpenStackRequest<R> header(String name, Object... values) {
66-
if(values != null) {
67-
headers.put(name, Arrays.asList(values));
65+
public OpenStackRequest<R> header(String name, Object value) {
66+
if(value != null) {
67+
headers.put(name, Arrays.asList(value));
6868
}
6969
return this;
7070
}

openstack-examples/src/main/java/com/woorea/openstack/examples/glance/GlanceListImages.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,20 @@ public static void main(String[] args) {
4141
glance.setTokenProvider(keystone
4242
.getProviderByTenant(ExamplesConfiguration.TENANT_NAME));
4343

44+
// Creating a new image
45+
Image newImage = new Image();
46+
newImage.setDiskFormat("raw");
47+
newImage.setContainerFormat("bare");
48+
newImage.setName("os-java-glance-test");
49+
newImage = glance.images().create(newImage).execute();
50+
4451
Images images = glance.images().list(false).execute();
4552

4653
for (Image image : images) {
4754
System.out.println(glance.images().show(image.getId()).execute());
4855
}
56+
57+
glance.images().delete(newImage.getId()).execute();
4958
}
5059
}
5160

0 commit comments

Comments
 (0)