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/02/03 12:45:03 UTC

[PATCH core] Create an Image from running EBS instance (EC2)

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

---
 server/lib/deltacloud/drivers/ec2/ec2_driver.rb    |    9 +++++++++
 .../lib/deltacloud/helpers/application_helper.rb   |    5 ++++-
 server/server.rb                                   |   15 +++++++++++++++
 server/views/instances/index.html.haml             |    2 ++
 4 files changed, 30 insertions(+), 1 deletions(-)

diff --git a/server/lib/deltacloud/drivers/ec2/ec2_driver.rb b/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
index 7436fb8..a825de6 100644
--- a/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
+++ b/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
@@ -145,6 +145,15 @@ module Deltacloud
           img_arr.sort_by { |e| [e.owner_id, e.name] }
         end
 
+        def create_image(credentials, opts={})
+          ec2 = new_client(credentials)
+          image_id = nil
+          safely do
+            image_id = ec2.create_image(opts[:instance_id], opts[:name])
+          end
+          image(credentials, :id => image_id)
+        end
+
         def realms(credentials, opts={})
           ec2 = new_client(credentials)
           zone_id = opts ? opts[:id] : nil
diff --git a/server/lib/deltacloud/helpers/application_helper.rb b/server/lib/deltacloud/helpers/application_helper.rb
index abe78bc..c73e72d 100644
--- a/server/lib/deltacloud/helpers/application_helper.rb
+++ b/server/lib/deltacloud/helpers/application_helper.rb
@@ -144,9 +144,12 @@ module ApplicationHelper
     "<pem><![CDATA[#{text.strip}]]></pem>"
   end
 
-  def link_to_action(action, url, method)
+  def link_to_action(action, url, method, opts=nil)
     capture_haml do
       haml_tag :form, :method => :post, :action => url, :class => :link do
+        opts.each do |name, value|
+          haml_tag :input, :type => :hidden, :name => name, :value => value
+        end if opts
         haml_tag :input, :type => :hidden, :name => '_method', :value => method
         haml_tag :button, :type => :submit do 
           haml_concat action
diff --git a/server/server.rb b/server/server.rb
index a801bea..bab11a5 100644
--- a/server/server.rb
+++ b/server/server.rb
@@ -163,6 +163,21 @@ END
     control { show(:image) }
   end
 
+  operation :create do
+    description 'Create image from instance.'
+    with_capability :create_image
+    param :instance_id, :string,  :required
+    param :name,  :string,  :required
+    control do
+      @image = driver.create_image(credentials, params)
+      respond_to do |format|
+        format.html { haml :"images/show" }
+        format.xml { haml :"images/show" }
+        format.json { convert_to_json(model, @image) }
+      end
+    end
+  end
+
 end
 
 collection :instance_states do
diff --git a/server/views/instances/index.html.haml b/server/views/instances/index.html.haml
index d728ec5..c0aa99e 100644
--- a/server/views/instances/index.html.haml
+++ b/server/views/instances/index.html.haml
@@ -30,3 +30,5 @@
             =link_to_action action, self.send(:"#{action}_instance_url", instance.id), instance_action_method(action)
           - if driver.respond_to?(:run_on_instance) and instance.state=="RUNNING"
             =link_to_action "Run command", url_for("/api/instances/#{instance.id}/run"), :get
+          - if driver.respond_to?(:create_image) and ['RUNNING', 'STOPPPED'].include?(instance.state)
+            =link_to_action "Create image", url_for("/api/images"), :post, { :instance_id => instance.id, :name => Time.now.to_i.to_s }
-- 
1.7.4


Re: [PATCH core] Create an Image from running EBS instance (EC2)

Posted by Michal Fojtik <mf...@redhat.com>.
On 04/02/11 16:41 -0800, David Lutterkort wrote:
>On Thu, 2011-02-03 at 12:45 +0100, mfojtik@redhat.com wrote:
>> From: Michal Fojtik <mf...@redhat.com>
>>
>> ---
>>  server/lib/deltacloud/drivers/ec2/ec2_driver.rb    |    9 +++++++++
>>  .../lib/deltacloud/helpers/application_helper.rb   |    5 ++++-
>>  server/server.rb                                   |   15 +++++++++++++++
>>  server/views/instances/index.html.haml             |    2 ++
>>  4 files changed, 30 insertions(+), 1 deletions(-)
>
>NAK for now until we've figured out how this should all be represented
>in the API across the clouds that allow image creation (EC2, RAX, and
>GoGrid)

Sure, I'll do the same stuff for all other providers (GoGrid, Rackspace) to
see if it will work in this way.
Since we will not deal with Windows images at this point, it should work.

   -- Michal


-- 
--------------------------------------------------------
Michal Fojtik, mfojtik@redhat.com
Deltacloud API: http://deltacloud.org
--------------------------------------------------------

Re: [PATCH core] Create an Image from running EBS instance (EC2)

Posted by David Lutterkort <lu...@redhat.com>.
On Thu, 2011-02-03 at 12:45 +0100, mfojtik@redhat.com wrote:
> From: Michal Fojtik <mf...@redhat.com>
> 
> ---
>  server/lib/deltacloud/drivers/ec2/ec2_driver.rb    |    9 +++++++++
>  .../lib/deltacloud/helpers/application_helper.rb   |    5 ++++-
>  server/server.rb                                   |   15 +++++++++++++++
>  server/views/instances/index.html.haml             |    2 ++
>  4 files changed, 30 insertions(+), 1 deletions(-)

NAK for now until we've figured out how this should all be represented
in the API across the clouds that allow image creation (EC2, RAX, and
GoGrid)

David