You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltacloud.apache.org by ma...@apache.org on 2010/11/26 10:34:03 UTC

svn commit: r1039280 - in /incubator/deltacloud/trunk/server: lib/deltacloud/base_driver/base_driver.rb lib/deltacloud/drivers/ec2/ec2_driver.rb server.rb views/blobs/new.html.haml views/blobs/show.html.haml views/buckets/show.html.haml

Author: marios
Date: Fri Nov 26 09:34:02 2010
New Revision: 1039280

URL: http://svn.apache.org/viewvc?rev=1039280&view=rev
Log:
Adds create blob and delete blob operations for blobstore API:

 * Functionality is added only for Amazon driver (ie S3) for now - Rackspace, Azure to follow.
 * Simple upload from client --> deltacloud for now (not stream) but streaming from deltacloud --> s3
 * Adds appropriate haml for creating blob over html form
 * Uses the sinatra :method_override hack for Delete operation over HTML form (using post).

Added:
    incubator/deltacloud/trunk/server/views/blobs/new.html.haml
Modified:
    incubator/deltacloud/trunk/server/lib/deltacloud/base_driver/base_driver.rb
    incubator/deltacloud/trunk/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
    incubator/deltacloud/trunk/server/server.rb
    incubator/deltacloud/trunk/server/views/blobs/show.html.haml
    incubator/deltacloud/trunk/server/views/buckets/show.html.haml

Modified: incubator/deltacloud/trunk/server/lib/deltacloud/base_driver/base_driver.rb
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/lib/deltacloud/base_driver/base_driver.rb?rev=1039280&r1=1039279&r2=1039280&view=diff
==============================================================================
--- incubator/deltacloud/trunk/server/lib/deltacloud/base_driver/base_driver.rb (original)
+++ incubator/deltacloud/trunk/server/lib/deltacloud/base_driver/base_driver.rb Fri Nov 26 09:34:02 2010
@@ -215,6 +215,12 @@ module Deltacloud
     def blob_data(credentials, bucket_id, blob_id, opts)
     end
 
+    def create_blob(credentials, bucket_id, blob_id, blob_data, opts=nil)  
+    end
+    
+    def delete_blob(credentials, bucket_id, blob_id, opts=nil)
+    end
+ 
     def filter_on(collection, attribute, opts)
       return collection if opts.nil?
       return collection if opts[attribute].nil?

Modified: incubator/deltacloud/trunk/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/lib/deltacloud/drivers/ec2/ec2_driver.rb?rev=1039280&r1=1039279&r2=1039280&view=diff
==============================================================================
--- incubator/deltacloud/trunk/server/lib/deltacloud/drivers/ec2/ec2_driver.rb (original)
+++ incubator/deltacloud/trunk/server/lib/deltacloud/drivers/ec2/ec2_driver.rb Fri Nov 26 09:34:02 2010
@@ -401,6 +401,32 @@ class EC2Driver < Deltacloud::BaseDriver
     end
   end
 
+#--
+# Create Blob
+#--
+  def create_blob(credentials, bucket_id, blob_id, data = nil, opts = nil)
+    s3_client = s3_client(credentials)
+    #data is a construct with the temporary file created by server @.tempfile
+    #also file[:type] will give us the content-type
+    res = s3_client.interface.put(bucket_id, blob_id, data.tempfile, {"Content-Type" => data[:type]})
+    #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 => ''
+              }
+            )
+  end
+
+#--
+# Delete Blob
+#--  
+  def delete_blob(credentials, bucket_id, blob_id, opts=nil)
+    s3_client = s3_client(credentials)
+    s3_client.interface.delete(bucket_id, blob_id)
+  end
+
   def load_balancer(credentials, opts={})
     load_balancers(credentials, {
       :load_balancer_names => [opts[:id]]

Modified: incubator/deltacloud/trunk/server/server.rb
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/server.rb?rev=1039280&r1=1039279&r2=1039280&view=diff
==============================================================================
--- incubator/deltacloud/trunk/server/server.rb (original)
+++ incubator/deltacloud/trunk/server/server.rb Fri Nov 26 09:34:02 2010
@@ -458,6 +458,35 @@ collection :keys do
 
 end
 
+#get html form for creating a new blob
+get '/api/buckets/:bucket/new_blob' do
+  @bucket_id = params[:bucket]
+  respond_to do |format|
+    format.html {haml :"blobs/new"}
+  end
+end
+
+#create a new blob
+post '/api/buckets/:bucket' do
+  bucket_id = params[:bucket]
+  blob_id = params['blob_id']
+  blob_data = params['blob_data']
+  @blob = driver.create_blob(credentials, bucket_id, blob_id, blob_data )
+  respond_to do |format|
+    format.html { haml :"blobs/show"}
+    format.xml { haml :"blobs/show" }
+  end
+end
+
+#delete a blob
+delete '/api/buckets/:bucket/:blob' do
+  bucket_id = params[:bucket]
+  blob_id = params[:blob]
+  driver.delete_blob(credentials, bucket_id, blob_id)
+  redirect(bucket_url(bucket_id))
+end
+
+#Get a particular blob's particulars (not actual blob data)
 get '/api/buckets/:bucket/:blob' do
   @blob = driver.blob(credentials, { :id => params[:blob], 'bucket' => params[:bucket]})
   if @blob
@@ -471,13 +500,7 @@ get '/api/buckets/:bucket/:blob' do
   end
 end
 
-get '/api/buckets/new' do
-  respond_to do |format|
-    format.html { haml :"buckets/new" }
-  end
-end
-
-
+#get the content of a particular blob
 get '/api/buckets/:bucket/:blob/content' do
   @blob = driver.blob(credentials, { :id => params[:blob], 'bucket' => params[:bucket]})
   params['content_length'] = @blob.content_length
@@ -485,6 +508,13 @@ get '/api/buckets/:bucket/:blob/content'
   BlobStream.call(env, credentials, params)
 end
 
+#Get html form for creating a new bucket
+get '/api/buckets/new' do
+  respond_to do |format|
+    format.html { haml :"buckets/new" }
+  end
+end
+
 collection :buckets do
   description "Cloud Storage buckets - aka buckets|directories|folders"
 

Added: incubator/deltacloud/trunk/server/views/blobs/new.html.haml
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/views/blobs/new.html.haml?rev=1039280&view=auto
==============================================================================
--- incubator/deltacloud/trunk/server/views/blobs/new.html.haml (added)
+++ incubator/deltacloud/trunk/server/views/blobs/new.html.haml Fri Nov 26 09:34:02 2010
@@ -0,0 +1,10 @@
+%h1 New Blob
+
+%form{ :action => bucket_url(@bucket_id), :method => :post, :enctype => 'multipart/form-data'}
+  %label
+    Blob Name:
+    %input{ :name => 'blob_id', :size => 512}/
+    Blob Data:
+    %input{ :type => "file", :name => 'blob_data',  :size => 50}/
+    %br
+  %input{ :type => :submit, :name => "commit", :value => "create"}/

Modified: incubator/deltacloud/trunk/server/views/blobs/show.html.haml
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/views/blobs/show.html.haml?rev=1039280&r1=1039279&r2=1039280&view=diff
==============================================================================
--- incubator/deltacloud/trunk/server/views/blobs/show.html.haml (original)
+++ incubator/deltacloud/trunk/server/views/blobs/show.html.haml Fri Nov 26 09:34:02 2010
@@ -3,18 +3,24 @@
   = @blob.id
 
 %dl
-  %dt bucket
-  %dd
-    = @blob.bucket
-  %dt Content_Length
-  %dd
-    = @blob.content_length
-  %dt Content_Type
-  %dd
-    = @blob.content_type
-  %dt Last_Modified
-  %dd
-    = @blob.last_modified
-  %dt Content
-  %dd
-    =link_to 'Blob content', bucket_url(@blob.bucket) + '/' + @blob.id + '/content'
+  %di
+    %dt Bucket
+    %dd
+      = @blob.bucket
+    %dt Content_Length
+    %dd
+      = @blob.content_length
+    %dt Content_Type
+    %dd
+      = @blob.content_type
+    %dt Last_Modified
+    %dd
+      = @blob.last_modified
+    %dt Content
+    %dd
+      =link_to 'Blob content', bucket_url(@blob.bucket) + '/' + @blob.id + '/content'
+    %dt Delete this Blob
+    %dd
+      %form{ :action => bucket_url(@blob.bucket) + '/' + @blob.id , :method => :post }
+        %input{ :type => "hidden", :name => "_method", :value => "delete"}
+        %input{ :type => :submit, :value => "Delete"}/

Modified: incubator/deltacloud/trunk/server/views/buckets/show.html.haml
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/views/buckets/show.html.haml?rev=1039280&r1=1039279&r2=1039280&view=diff
==============================================================================
--- incubator/deltacloud/trunk/server/views/buckets/show.html.haml (original)
+++ incubator/deltacloud/trunk/server/views/buckets/show.html.haml Fri Nov 26 09:34:02 2010
@@ -14,6 +14,9 @@
     %dd
       -@bucket.blob_list.each do |blob|
         = link_to blob, bucket_url(@bucket.name) + '/' + blob
-    %dt delete bucket (must be empty)
+    %dt Delete bucket (must be empty)
     %dd
       =link_to 'Delete', destroy_bucket_url(@bucket.name), :class => 'delete'
+    %dt Create a new blob
+    %dd
+      =link_to 'Create Blob', bucket_url(@bucket.name) + '/new_blob'
\ No newline at end of file