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