From: Michal Fojtik <[email protected]>

Signed-off-by: Michal fojtik <[email protected]>
---
 .../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

Reply via email to