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
