You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltacloud.apache.org by Tobias Crawley <tc...@gmail.com> on 2010/11/13 05:31:52 UTC

[PATCH 2/2] Added actions to storage_volumes; changed 'size' to 'capacity' and 'zone' to 'realm_id' to match lingo elsewhere.

---
 server/lib/deltacloud/drivers/ec2/ec2_driver.rb    |   15 +++++++++------
 .../lib/deltacloud/helpers/application_helper.rb   |    6 +++++-
 server/lib/deltacloud/models/storage_volume.rb     |    1 +
 server/server.rb                                   |    4 ++--
 server/views/storage_volumes/index.xml.haml        |   11 +----------
 server/views/storage_volumes/new.html.haml         |    4 ++--
 server/views/storage_volumes/show.xml.haml         |    9 ++++++++-
 7 files changed, 28 insertions(+), 22 deletions(-)

diff --git a/server/lib/deltacloud/drivers/ec2/ec2_driver.rb b/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
index 14030a4..a0fd919 100644
--- a/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
+++ b/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
@@ -281,14 +281,14 @@ module Deltacloud
           end
         end
 
-        def create_storage_volume(credentials, opts={})
+        def create_storage_volume(credentials, opts=nil)
           ec2 = new_client(credentials)
           opts ||= {}
-          opts.merge!(:snapshot_id => "") unless opts[:snapshot_id]
-          opts.merge!(:size => "1") unless opts[:volume_size]
-          opts.merge!(:realm_id => realms(credentials).first.id) unless opts[:realm_id]
+          opts[:snapshot_id] ||= ""
+          opts[:capacity] ||= "1"
+          opts[:realm_id] ||= realms(credentials).first.id
           safely do
-            convert_volume(ec2.create_volume(opts[:snapshot_id], opts[:size], opts[:realm_id]))
+            convert_volume(ec2.create_volume(opts[:snapshot_id], opts[:capacity], opts[:realm_id]))
           end
         end
 
@@ -421,7 +421,10 @@ module Deltacloud
             :capacity => volume[:aws_size],
             :instance_id => volume[:aws_instance_id],
             :realm_id => volume[:zone],
-            :device => volume[:aws_device]
+            :device => volume[:aws_device],
+            # TODO: the available actions should be tied to the current
+            # volume state                
+            :actions => [:attach, :detach, :destroy] 
           )
         end
 
diff --git a/server/lib/deltacloud/helpers/application_helper.rb b/server/lib/deltacloud/helpers/application_helper.rb
index 00e8bc9..8f4db94 100644
--- a/server/lib/deltacloud/helpers/application_helper.rb
+++ b/server/lib/deltacloud/helpers/application_helper.rb
@@ -38,9 +38,13 @@ module ApplicationHelper
   end
 
   def instance_action_method(action)
-    collections[:instances].operations[action.to_sym].method
+    action_method(action, :instances)
   end
 
+  def action_method(action, collection)
+    collections[collection].operations[action.to_sym].method
+  end
+  
   def driver_has_feature?(feature_name, collection_name = :instances)
     not driver.features(collection_name).select{ |f| f.name.eql?(feature_name) }.empty?
   end
diff --git a/server/lib/deltacloud/models/storage_volume.rb b/server/lib/deltacloud/models/storage_volume.rb
index 2f379da..7870ef2 100644
--- a/server/lib/deltacloud/models/storage_volume.rb
+++ b/server/lib/deltacloud/models/storage_volume.rb
@@ -25,5 +25,6 @@ class StorageVolume < BaseModel
   attr_accessor :instance_id
   attr_accessor :realm_id
   attr_accessor :device
+  attr_accessor :actions
 
 end
diff --git a/server/server.rb b/server/server.rb
index 424daab..5cab5ce 100644
--- a/server/server.rb
+++ b/server/server.rb
@@ -450,8 +450,8 @@ collection :storage_volumes do
     description "Create a new storage volume"
     with_capability :create_storage_volume
     param :snapshot_id, :string,  :optional
-    param :size,        :string,  :optional
-    param :zone,        :string,  :optional
+    param :capacity,    :string,  :optional
+    param :realm_id,    :string,  :optional
     control do
       @storage_volume = driver.create_storage_volume(credentials, params)
       respond_to do |format|
diff --git a/server/views/storage_volumes/index.xml.haml b/server/views/storage_volumes/index.xml.haml
index 471169c..e73c46a 100644
--- a/server/views/storage_volumes/index.xml.haml
+++ b/server/views/storage_volumes/index.xml.haml
@@ -1,13 +1,4 @@
 !!!XML
 %storage_volumes
   - @elements.each do |volume|
-    %storage_volume{ :href => storage_volume_url(volume.id), :id => volume.id }
-      %created<
-        =volume.created
-      %capacity{ :unit => "GB" }<
-        = volume.capacity
-      - unless volume.instance_id.nil?
-        %mount
-          %instance{:href => instance_url(volume.instance_id), :id => volume.instance_id}
-          - unless volume.device.nil?
-            %device{ :name => volume.device }
+    = haml :'storage_volumes/show', :locals =>  { :@storage_volume =>  volume, :partial =>  true } 
diff --git a/server/views/storage_volumes/new.html.haml b/server/views/storage_volumes/new.html.haml
index 66bf015..f8ab6b8 100644
--- a/server/views/storage_volumes/new.html.haml
+++ b/server/views/storage_volumes/new.html.haml
@@ -7,8 +7,8 @@
     %input{ :name => 'snapshot_id', :size => 30 } (optional)
   %p
     %label
-      Size (in GB):
-    %input{ :name => "size", :size => 3, :value => "1"}
+      Capacity (in GB):
+    %input{ :name => "capacity", :size => 3, :value => "1"}
   %p
     %label
       Realm ID:
diff --git a/server/views/storage_volumes/show.xml.haml b/server/views/storage_volumes/show.xml.haml
index ebf1b24..0a89192 100644
--- a/server/views/storage_volumes/show.xml.haml
+++ b/server/views/storage_volumes/show.xml.haml
@@ -1,11 +1,18 @@
-!!!XML
+- unless defined?(partial)
+  !!!XML
 %storage_volume{ :href => storage_volume_url(@storage_volume.id), :id => @storage_volume.id}
   %created<
     =@storage_volume.created
   %capacity{ :unit => "GB" }<
     = @storage_volume.capacity
+  %state<
+    = @storage_volume.state
   - unless @storage_volume.instance_id.nil?
     %mount
       %instance{:href => @storage_volume.instance_id, :id => @storage_volume.instance_id}
       - unless @storage_volume.device.nil?
         %device{ :name => @storage_volume.device }
+  - if @storage_volume.actions
+    %actions
+      - @storage_volume.actions.each do |action|
+        %link{:rel => action, :method => action_method(action, :storage_volumes), :href => self.send("#{action}_storage_volume_url", @storage_volume.id)}
-- 
1.7.2.3