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 2013/01/09 14:58:22 UTC

[1/4] git commit: CIMI: Adds create/destroy for volume_image collection+model

CIMI: Adds create/destroy for volume_image collection+model


Project: http://git-wip-us.apache.org/repos/asf/deltacloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltacloud/commit/657237f5
Tree: http://git-wip-us.apache.org/repos/asf/deltacloud/tree/657237f5
Diff: http://git-wip-us.apache.org/repos/asf/deltacloud/diff/657237f5

Branch: refs/heads/master
Commit: 657237f538e3fa1e422b6fca1d3f445d13b2ec20
Parents: 12a2543
Author: marios <ma...@redhat.com>
Authored: Tue Jan 8 18:55:58 2013 +0200
Committer: marios <ma...@redhat.com>
Committed: Wed Jan 9 15:53:45 2013 +0200

----------------------------------------------------------------------
 server/lib/cimi/collections/volume_images.rb |   22 ++++++++++++++++++++-
 server/lib/cimi/models/volume_image.rb       |   16 +++++++++++++-
 2 files changed, 35 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltacloud/blob/657237f5/server/lib/cimi/collections/volume_images.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/collections/volume_images.rb b/server/lib/cimi/collections/volume_images.rb
index 2a7e1af..259a25a 100644
--- a/server/lib/cimi/collections/volume_images.rb
+++ b/server/lib/cimi/collections/volume_images.rb
@@ -42,8 +42,28 @@ module CIMI::Collections
           end
         end
       end
-    end
 
+      operation :create, :with_capability => :create_storage_snapshot do
+        description "Create a new volume image."
+        control do
+          volume_image = CIMI::Model::VolumeImage.create(request.body, self)
+          headers_for_create volume_image
+          respond_to do |format|
+            format.xml { volume_image.to_xml }
+            format.json { volume_image.to_json }
+          end
+        end
+      end
+
+      operation :destroy, :with_capability => :destroy_storage_snapshot do
+        description "Delete a specified VolumeImage"
+        control do
+          CIMI::Model::VolumeImage.delete!(params[:id], self)
+          no_content_with_status 200
+        end
+      end
+
+    end
 
   end
 end

http://git-wip-us.apache.org/repos/asf/deltacloud/blob/657237f5/server/lib/cimi/models/volume_image.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/models/volume_image.rb b/server/lib/cimi/models/volume_image.rb
index 29f8188..2dc04b5 100644
--- a/server/lib/cimi/models/volume_image.rb
+++ b/server/lib/cimi/models/volume_image.rb
@@ -38,12 +38,24 @@ class CIMI::Model::VolumeImage < CIMI::Model::Base
 
   def self.all(context); find(:all, context); end
 
+  def self.create(request_body, context)
+    type = context.grab_content_type(context.request.content_type, request_body)
+    input = (type == :xml)? XmlSimple.xml_in(request_body.read, {"ForceArray"=>false,"NormaliseSpace"=>2}) : JSON.parse(request_body.read)
+    params = {:volume_id => context.href_id(input["imageLocation"]["href"], :volumes), :name=>input["name"], :description=>input["description"]}
+    vol_image = context.driver.create_storage_snapshot(context.credentials, params)
+    from_storage_snapshot(vol_image, context)
+  end
+
+  def self.delete!(vol_image_id, context)
+    context.driver.destroy_storage_snapshot(context.credentials, {:id=>vol_image_id})
+  end
+
   private
 
   def self.from_storage_snapshot(snapshot, context)
     self.new( {
-               :name => snapshot.id,
-               :description => snapshot.id,
+               :name => snapshot.name || snapshot.id,
+               :description => snapshot.description || snapshot.id,
                :created => snapshot.created.nil? ? nil : Time.parse(snapshot.created).xmlschema,
                :id => context.volume_image_url(snapshot.id),
                :image_location => {:href=>context.volume_url(snapshot.storage_volume_id)},