You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltacloud.apache.org by mf...@redhat.com on 2011/08/02 15:29:22 UTC

[PATCH core 4/5] RHEVM: Added create_image from instance

From: Michal Fojtik <mf...@redhat.com>


Signed-off-by: Michal fojtik <mf...@redhat.com>
---
 .../lib/deltacloud/drivers/rhevm/rhevm_client.rb   |   22 ++++++++++++++++++++
 .../lib/deltacloud/drivers/rhevm/rhevm_driver.rb   |   21 ++++++++++++++++++-
 2 files changed, 42 insertions(+), 1 deletions(-)

diff --git a/server/lib/deltacloud/drivers/rhevm/rhevm_client.rb b/server/lib/deltacloud/drivers/rhevm/rhevm_client.rb
index c5ffebe..04bd5b4 100644
--- a/server/lib/deltacloud/drivers/rhevm/rhevm_client.rb
+++ b/server/lib/deltacloud/drivers/rhevm/rhevm_client.rb
@@ -74,6 +74,28 @@ module RHEVM
       RHEVM::VM::new(self, Nokogiri::XML(vm).root)
     end
 
+    def create_template(vm_id, opts={})
+      opts ||= {}
+      puts vm_id
+      puts opts.inspect
+      builder = Nokogiri::XML::Builder.new do
+        template_ {
+          name opts[:name]
+          description opts[:description]
+          vm(:id => vm_id)
+        }
+      end
+      headers = opts[:headers] || {}
+      headers.merge!({
+        :content_type => 'application/xml',
+        :accept => 'application/xml',
+      })
+      headers.merge!(auth_header)
+      template = RHEVM::client(@api_entrypoint)["/templates"].post(Nokogiri::XML(builder.to_xml).root.to_s, headers)
+      puts template
+      RHEVM::Template::new(self, Nokogiri::XML(template).root)
+    end
+
     def templates(opts={})
       headers = {
         :accept => "application/xml"
diff --git a/server/lib/deltacloud/drivers/rhevm/rhevm_driver.rb b/server/lib/deltacloud/drivers/rhevm/rhevm_driver.rb
index 832620a..bf81683 100644
--- a/server/lib/deltacloud/drivers/rhevm/rhevm_driver.rb
+++ b/server/lib/deltacloud/drivers/rhevm/rhevm_driver.rb
@@ -102,6 +102,20 @@ class RHEVMDriver < Deltacloud::BaseDriver
     img_arr.sort_by{|e| [e.owner_id, e.name]}
   end
 
+  def create_image(credentials, opts={})
+    client = new_client(credentials)
+    unless opts[:name]
+      instance = instances(credentials, :id => opts[:id])
+      raise "ERROR: Unknown instance ID"
+      template_name = "#{instance.first.name}-template"
+    end
+    safely do
+      new_image = client.create_template(opts[:id], :name => (opts[:name] || template_name),
+                                         :description => opts[:description])
+      convert_image(client, new_image)
+    end
+  end
+
   def instances(credentials, opts={})
     client = new_client(credentials)
     inst_arr = []
@@ -226,7 +240,8 @@ class RHEVMDriver < Deltacloud::BaseDriver
       :hardware_profile_id => profile.id,
       :actions=>instance_actions_for( state ),
       :public_addresses => public_addresses,
-      :private_addresses => []
+      :private_addresses => [],
+      :create_image => true
     )
   end
 
@@ -299,6 +314,10 @@ class RHEVMDriver < Deltacloud::BaseDriver
       status 500
     end
 
+    on /ERROR:(.*)/ do
+      status 500
+    end
+
     on /Parameter name/ do
       status 400
     end
-- 
1.7.4.1


Re: [PATCH core 4/5] RHEVM: Added create_image from instance

Posted by David Lutterkort <lu...@redhat.com>.
On Tue, 2011-08-02 at 15:29 +0200, mfojtik@redhat.com wrote:
> From: Michal Fojtik <mf...@redhat.com>
> 
> 
> Signed-off-by: Michal fojtik <mf...@redhat.com>
> ---
>  .../lib/deltacloud/drivers/rhevm/rhevm_client.rb   |   22 ++++++++++++++++++++
>  .../lib/deltacloud/drivers/rhevm/rhevm_driver.rb   |   21 ++++++++++++++++++-
>  2 files changed, 42 insertions(+), 1 deletions(-)

ACK
 
> @@ -299,6 +314,10 @@ class RHEVMDriver < Deltacloud::BaseDriver
>        status 500
>      end
>  
> +    on /ERROR:(.*)/ do
> +      status 500
> +    end
> +

Wouldn't 400 Bad request or 404 Not found be more appropriate ?

David