# File lib/deltacloud/drivers/google/google_driver.rb, line 100 def blob_data(credentials, bucket_id, blob_id, opts={}) google_client = new_client(credentials) safely do google_client.get_object(bucket_id, blob_id) do |chunk| yield chunk end end end
-
Blob Metadada
-
# File lib/deltacloud/drivers/google/google_driver.rb, line 173 def blob_metadata(credentials, opts = {}) google_client = new_client(credentials) safely do google_blob = google_client.head_object(opts['bucket'], opts[:id]).headers meta_hash = google_blob.inject({}){|result, (k,v)| result[k]=v if k=~/^x-goog-meta-/ ; result} meta_hash.gsub_keys("x-goog-meta-", "") end end
params: {:user,:password,:bucket,:blob,:content_type,:content_length,:metadata}
# File lib/deltacloud/drivers/google/google_driver.rb, line 129 def blob_stream_connection(params) client = Fog::Storage.new({:provider => :google, :google_storage_access_key_id => params[:user], :google_storage_secret_access_key => params[:password]}) google_request_uri = "https://#{client.instance_variable_get(:@host)}" uri = URI.parse(google_request_uri) conn_params = {} # build hash for the Fog signature method conn_params[:headers] = {} #put the metadata here conn_params[:host] = uri.host conn_params[:path] = "#{params[:bucket]}/#{CGI.escape(params[:blob])}" conn_params[:method] = "PUT" timestamp = Fog::Time.now.to_date_header conn_params[:headers]['Date'] = timestamp conn_params[:headers]['Content-Type'] = params[:content_type] metadata = params[:metadata] || {} BlobHelper::rename_metadata_headers(metadata, 'x-goog-meta-') metadata.each{|k,v| conn_params[:headers][k]=v} auth_string = "GOOG1 #{params[:user]}:#{client.signature(conn_params)}" http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE request = Net::HTTP::Put.new("/#{conn_params[:path]}") request['Host'] = conn_params[:host] request['Date'] = conn_params[:headers]['Date'] request['Content-Type'] = conn_params[:headers]['Content-Type'] request['Content-Length'] = params[:content_length] request['Authorization'] = auth_string metadata.each{|k,v| request[k] = v} return http, request end
# File lib/deltacloud/drivers/google/google_driver.rb, line 81 def blobs(credentials, opts={}) blobs = [] google_client = new_client(credentials) safely do google_blob = google_client.head_object(opts['bucket'], opts[:id]).headers meta_hash = google_blob.inject({}){|result, (k,v)| result[k]=v if k=~/^x-goog-meta-/ ; result} meta_hash.gsub_keys("x-goog-meta-", "") blobs << Blob.new({ :id => opts[:id], :bucket => opts['bucket'], :content_length => google_blob['Content-Length'], :content_type => google_blob['Content-Type'], :last_modified => google_blob['Last-Modified'], :user_metadata => meta_hash }) end blobs end
# File lib/deltacloud/drivers/google/google_driver.rb, line 32 def buckets(credentials, opts={}) buckets = [] google_client = new_client(credentials) safely do if opts[:id] bucket = google_client.get_bucket(opts[:id]) buckets << convert_bucket(bucket.body) else google_client.get_service.body['Buckets'].each do |bucket| buckets << Bucket.new({:name => bucket['Name'], :id => bucket['Name']}) end end end buckets = filter_on(buckets, :id, opts) end
# File lib/deltacloud/drivers/google/google_driver.rb, line 112 def create_blob(credentials, bucket_id, blob_id, blob_data, opts={}) google_client = new_client(credentials) safely do dcloud_blob_metadata = BlobHelper::extract_blob_metadata_hash(opts) BlobHelper::rename_metadata_headers(opts, 'x-goog-meta-') opts['Content-Type'] = blob_data[:type] google_client.put_object(bucket_id, blob_id, blob_data[:tempfile], opts) Blob.new({ :id => blob_id, :bucket => bucket_id, :content_length => File.size(blob_data[:tempfile]).to_s, :content_type => blob_data[:type], :last_modified => "", :user_metadata => dcloud_blob_metadata }) end end
# File lib/deltacloud/drivers/google/google_driver.rb, line 51 def create_bucket(credentials, name, opts={}) google_client = new_client(credentials) safely do bucket_location = opts['location'] if (bucket_location && bucket_location.size > 0) res = google_client.put_bucket(name, {"LocationConstraint" => opts['location']}) else google_client.put_bucket(name) end #res.status should be eql 200 - but fog will explode if not all ok... Bucket.new({ :id => name, :name => name, :size => 0, :blob_list => [] }) end end
# File lib/deltacloud/drivers/google/google_driver.rb, line 163 def delete_blob(credentials, bucket_id, blob_id, opts={}) google_client = new_client(credentials) safely do google_client.delete_object(bucket_id, blob_id) end end
# File lib/deltacloud/drivers/google/google_driver.rb, line 71 def delete_bucket(credentials, name, opts={}) google_client = new_client(credentials) safely do google_client.delete_bucket(name) end end
# File lib/deltacloud/drivers/google/google_driver.rb, line 24 def supported_collections; [:buckets] end
-
Update Blob Metadata
-
# File lib/deltacloud/drivers/google/google_driver.rb, line 185 def update_blob_metadata(credentials, opts={}) google_client = new_client(credentials) safely do meta_hash = BlobHelper::rename_metadata_headers(opts['meta_hash'], 'x-goog-meta-') options = {'x-goog-metadata-directive'=>'REPLACE'} options.merge!(meta_hash) bucket = opts['bucket'] blob = opts[:id] google_client.copy_object(bucket, blob, bucket, blob, options) #source,source,target,target,options meta_hash.gsub_keys("x-goog-meta-", "") end end
Generated with the Darkfish Rdoc Generator 2.