On Tue, 2011-01-25 at 22:04 +0200, [email protected] wrote:
From: marios<[email protected]>
ACK, with a few nits.
diff --git a/server/lib/deltacloud/drivers/azure/azure_driver.rb
b/server/lib/deltacloud/drivers/azure/azure_driver.rb
index abbd353..8d7b1e6 100644
--- a/server/lib/deltacloud/drivers/azure/azure_driver.rb
+++ b/server/lib/deltacloud/drivers/azure/azure_driver.rb
@@ -94,23 +94,28 @@ class AzureDriver< Deltacloud::BaseDriver
#--
# Create Blob
#--
- def create_blob(credentials, bucket_id, blob_id, blob_data, opts=nil)
+ def create_blob(credentials, bucket_id, blob_id, blob_data, opts={})
azure_connect(credentials)
- #get a handle to the bucket in order to put there
- the_bucket = WAZ::Blobs::Container.find(bucket_id)
- the_bucket.store(blob_id, blob_data[:tempfile], blob_data[:type])
+ #insert azure-specific header for user metadata ... x-ms-meta-kEY = VALUE
+ opts.gsub_keys("HTTP_X_Deltacloud_Blobmeta_", "x-ms-meta-")
+ safely do
+ #get a handle to the bucket in order to put there
+ the_bucket = WAZ::Blobs::Container.find(bucket_id)
+ the_bucket.store(blob_id, blob_data[:tempfile], blob_data[:type], opts)
+ end
Blob.new( { :id => blob_id,
:bucket => bucket_id,
:content_lengh => blob_data[:tempfile].length,
:content_type => blob_data[:type],
- :last_modified => ''
+ :last_modified => '',
+ :user_metadata => opts.select{|k,v| k.match(/^x-ms-meta-/)}
This sets user_metadata to an array of pairs, i.e. sth like [[:a, 1],
[:b, 2]] instead of a hash. Also, the key names will still have the
x-ms-meta prefix - shouldn't that be stripped ?
diff --git a/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
b/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
index 7a4b394..c9e5319 100644
--- a/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
+++ b/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
@@ -354,25 +354,29 @@ module Deltacloud
#--
# Create Blob
#--
- def create_blob(credentials, bucket_id, blob_id, data = nil, opts =
nil)
+ def create_blob(credentials, bucket_id, blob_id, data = nil, opts = {})
s3_client = new_client(credentials, :s3)
#data is a construct with the temporary file created by server
@.tempfile
#also file[:type] will give us the content-type
res = nil
# File stream needs to be reopened in binary mode for whatever
reason
file = File::open(data[:tempfile].path, 'rb')
+ #insert ec2-specific header for user metadata ... x-amz-meta-KEY =
VALUE
+ opts.gsub_keys('HTTP_X_Deltacloud_Blobmeta_', 'x-amz-meta-')
+ opts["Content-Type"] = data[:type]
safely do
res = s3_client.interface.put(bucket_id,
blob_id,
file,
- {"Content-Type" => data[:type]})
+ opts)
end
#create a new Blob object and return that
Blob.new( { :id => blob_id,
:bucket => bucket_id,
:content_length => data[:tempfile].length,
:content_type => data[:type],
- :last_modified => ''
+ :last_modified => '',
+ :user_metadata => opts.select{|k,v|
k.match(/^x-amz-meta-/)}
Same comment as for Azure.
diff --git a/server/views/blobs/new.html.haml b/server/views/blobs/new.html.haml
index feb94e5..a9817d5 100644
--- a/server/views/blobs/new.html.haml
+++ b/server/views/blobs/new.html.haml
@@ -4,7 +4,23 @@
%label
Blob Name:
%input{ :name => 'blob_id', :size => 512}/
+ %label
Blob Data:
- %input{ :type => "file", :name => 'blob_data', :size => 50}/
%br
+ %input{ :type => "file", :name => 'blob_data', :size => 50}/
+ %br
+ %br
+ %input{ :type => "hidden", :name => "meta_params", :value => "0"}
+ %a{ :href => "javascript:;", :onclick => "more_fields();"} Add Metadata
+ %div{ :id => "metadata_holder", :style => "display: none;"}
+ %label
+ Metadata Name:
Minor nit: shouldn't we call that a metadata key ? Seems that's the
general nomenclature.
diff --git a/server/views/blobs/show.html.haml
b/server/views/blobs/show.html.haml
index e5c2cee..29025c0 100644
--- a/server/views/blobs/show.html.haml
+++ b/server/views/blobs/show.html.haml
@@ -19,6 +19,9 @@
%dt Content
%dd
=link_to 'Blob content', bucket_url(@blob.bucket) + '/' + @blob.id +
'/content'
+ %dt User_Metadata
+ %dd
+ = @blob.user_metadata.inspect
Another nit: maybe we should format this more friendly than with
inspect ;)
diff --git a/server/views/blobs/show.xml.haml b/server/views/blobs/show.xml.haml
index bc499ca..1b9ea55 100644
--- a/server/views/blobs/show.xml.haml
+++ b/server/views/blobs/show.xml.haml
@@ -1,7 +1,9 @@
!!! XML
%blob{:href => bucket_url(@blob.bucket) + '/' + @blob.id, :id => @blob.id}
- - @blob.attributes.select{ |attr| attr!=:id}.each do |attribute|
+ - @blob.attributes.select{ |attr| (attr!=:id&& attr!=:user_metadata) }.each
do |attribute|
- unless attribute == :content
- haml_tag(attribute, :<) do
- haml_concat @blob.send(attribute)
+ - @blob.user_metadata.each do |k, v|
+ %user_metadata{:name => k, :value => v}
Do we need to worry about the size of v and possibly that it might
contain illegal characters here ? Might be safer to make the value the
content of the tag, possibly in a CDATA section.
Also, I'd prefer if the metadata is inside a container tag, like
<user_metadata>
<entry key="artist">John Lennon</entry>
...
<user_metadata>
David