You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltacloud.apache.org by mf...@apache.org on 2013/03/01 10:38:05 UTC

[1/3] git commit: CIMI: Added VolumeImageCreate model

CIMI: Added VolumeImageCreate model


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

Branch: refs/heads/master
Commit: 99a1198e9ffb615d97117853129487f1aed20fce
Parents: 246e621
Author: Michal Fojtik <mf...@redhat.com>
Authored: Wed Feb 27 15:25:34 2013 +0100
Committer: Michal fojtik <mf...@redhat.com>
Committed: Fri Mar 1 10:36:40 2013 +0100

----------------------------------------------------------------------
 server/lib/cimi/collections/volume_images.rb  |    3 +-
 server/lib/cimi/models.rb                     |    1 +
 server/lib/cimi/models/volume_image.rb        |   25 +++-------
 server/lib/cimi/models/volume_image_create.rb |   47 ++++++++++++++++++++
 server/support/cimi/volume_image.xml          |    7 +++
 5 files changed, 65 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltacloud/blob/99a1198e/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 708f2f1..1596e2d 100644
--- a/server/lib/cimi/collections/volume_images.rb
+++ b/server/lib/cimi/collections/volume_images.rb
@@ -46,7 +46,8 @@ module CIMI::Collections
       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)
+          img = CIMI::Model::VolumeImageCreate.parse(request.body, request.content_type)
+          volume_image = img.create(self)
           headers_for_create volume_image
           respond_to do |format|
             format.xml { volume_image.to_xml }

http://git-wip-us.apache.org/repos/asf/deltacloud/blob/99a1198e/server/lib/cimi/models.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/models.rb b/server/lib/cimi/models.rb
index b41cb8f..2f7e158 100644
--- a/server/lib/cimi/models.rb
+++ b/server/lib/cimi/models.rb
@@ -68,6 +68,7 @@ require_relative './models/volume_configuration'
 require_relative './models/volume_image'
 require_relative './models/volume_template'
 require_relative './models/volume_create'
+require_relative './models/volume_image_create'
 require_relative './models/machine'
 require_relative './models/machine_configuration'
 require_relative './models/machine_image'

http://git-wip-us.apache.org/repos/asf/deltacloud/blob/99a1198e/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 4858ad8..ef06552 100644
--- a/server/lib/cimi/models/volume_image.rb
+++ b/server/lib/cimi/models/volume_image.rb
@@ -20,6 +20,7 @@ class CIMI::Model::VolumeImage < CIMI::Model::Base
   href :image_location
   text :image_data
   text :bootable
+
   array :operations do
     scalar :rel, :href
   end
@@ -38,29 +39,19 @@ class CIMI::Model::VolumeImage < CIMI::Model::Base
 
   def self.all(context); find(:all, context); end
 
-  def self.create(request_body, context)
-    type = context.current_content_type
-    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.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)},
-               :bootable => "false"  #FIXME
-            } )
+      :name => snapshot.name,
+      :description => snapshot.description,
+      :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)},
+      :bootable => "false"  #FIXME
+    } )
   end
 
 end

http://git-wip-us.apache.org/repos/asf/deltacloud/blob/99a1198e/server/lib/cimi/models/volume_image_create.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/models/volume_image_create.rb b/server/lib/cimi/models/volume_image_create.rb
new file mode 100644
index 0000000..f953146
--- /dev/null
+++ b/server/lib/cimi/models/volume_image_create.rb
@@ -0,0 +1,47 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.  The
+# ASF licenses this file to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance with the
+# License.  You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+class CIMI::Model::VolumeImageCreate < CIMI::Model::Base
+
+  href :image_location
+  text :image_data
+  text :bootable, :required => true
+
+  def create(context)
+    validate!
+
+    params = {
+      :volume_id => context.href_id(image_location.href, :volumes),
+      :name => name,
+      :description => description
+    }
+
+    unless context.driver.respond_to? :create_storage_snapshot
+      raise Deltacloud::Exceptions.exception_from_status(
+        501,
+        'Creating VolumeImage is not supported by the current driver'
+      )
+    end
+
+    new_snapshot = context.driver.create_storage_snapshot(context.credentials, params)
+    result = CIMI::Model::VolumeImage.from_storage_snapshot(new_snapshot, context)
+    result.name= name unless new_snapshot.name
+    result.description = description unless new_snapshot.description
+    result.property = property if property
+    result.save
+    result
+  end
+
+end

http://git-wip-us.apache.org/repos/asf/deltacloud/blob/99a1198e/server/support/cimi/volume_image.xml
----------------------------------------------------------------------
diff --git a/server/support/cimi/volume_image.xml b/server/support/cimi/volume_image.xml
new file mode 100644
index 0000000..b89f1e5
--- /dev/null
+++ b/server/support/cimi/volume_image.xml
@@ -0,0 +1,7 @@
+<VolumeImageCreate>
+  <name>myVolumeImage</name>
+  <description>My very first VolumeImage</description>
+  <imageLocation href="http://localhost:3001/cimi/volumes/vo1"/>
+  <bootable>false</bootable>
+  <property key="foo">bar</property>
+</VolumeImageCreate>