From: Michal Fojtik <[email protected]>

Signed-off-by: Michal fojtik <[email protected]>
---
 server/lib/deltacloud/drivers/ec2/ec2_driver.rb    |   17 ++++++++++++++---
 server/lib/deltacloud/drivers/mock/mock_driver.rb  |    3 ++-
 .../lib/deltacloud/drivers/rhevm/rhevm_driver.rb   |    1 +
 .../deltacloud/drivers/vsphere/vsphere_driver.rb   |    5 +++--
 server/lib/deltacloud/models/image.rb              |    1 +
 server/views/images/show.xml.haml                  |    6 +++++-
 6 files changed, 26 insertions(+), 7 deletions(-)

diff --git a/server/lib/deltacloud/drivers/ec2/ec2_driver.rb 
b/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
index 44db93a..4569056 100644
--- a/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
+++ b/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
@@ -132,10 +132,11 @@ module Deltacloud
           ec2 = new_client(credentials)
           img_arr = []
           opts ||= {}
+          profiles = hardware_profiles(nil)
           if opts[:id]
             safely do
               img_arr = ec2.describe_images([opts[:id]]).collect do |image|
-                convert_image(image)
+                convert_image(image, profiles)
               end
             end
             return img_arr
@@ -143,7 +144,7 @@ module Deltacloud
           owner_id = opts[:owner_id] || default_image_owner
           safely do
             img_arr = ec2.describe_images_by_owner([owner_id], 
default_image_type).collect do |image|
-              convert_image(image)
+              convert_image(image, profiles)
             end
           end
           img_arr = filter_on( img_arr, :architecture, opts )
@@ -783,7 +784,7 @@ module Deltacloud
           )
         end
 
-        def convert_image(image)
+        def convert_image(image, profiles)
           # There is not support for 'name' for now
           Image.new(
             :id => image[:aws_id],
@@ -791,6 +792,7 @@ module Deltacloud
             :description => image[:aws_description] || image[:aws_location],
             :owner_id => image[:aws_owner],
             :architecture => image[:aws_architecture],
+            :hardware_profiles => image_profiles(image, profiles),
             :state => image[:aws_state]
           )
         end
@@ -854,6 +856,15 @@ module Deltacloud
           )
         end
 
+        def image_profiles(image, profiles)
+          profiles = filter_hardware_profiles(profiles, :architecture => 
image[:aws_architecture])
+          if image[:aws_root_device_type] != 'ebs'
+            profiles.reject { |p| p.name == 't1.micro' }
+          else
+            profiles
+          end
+        end
+
         def convert_load_balancer(credentials, loadbalancer)
           puts loadbalancer.inspect
           realms = []
diff --git a/server/lib/deltacloud/drivers/mock/mock_driver.rb 
b/server/lib/deltacloud/drivers/mock/mock_driver.rb
index 1f36b36..caf14bc 100644
--- a/server/lib/deltacloud/drivers/mock/mock_driver.rb
+++ b/server/lib/deltacloud/drivers/mock/mock_driver.rb
@@ -120,7 +120,8 @@ module Deltacloud::Drivers::Mock
       else
         images = filter_on( images, :owner_id, opts )
       end
-      images.sort_by{|e| [e.owner_id,e.description]}
+      images = images.map { |i| (i.hardware_profiles = hardware_profiles(nil)) 
&& i }
+      images.sort_by{|e| [e.owner_id, e.description]}
     end
 
     def create_image(credentials, opts={})
diff --git a/server/lib/deltacloud/drivers/rhevm/rhevm_driver.rb 
b/server/lib/deltacloud/drivers/rhevm/rhevm_driver.rb
index f3edee9..4713321 100644
--- a/server/lib/deltacloud/drivers/rhevm/rhevm_driver.rb
+++ b/server/lib/deltacloud/drivers/rhevm/rhevm_driver.rb
@@ -310,6 +310,7 @@ class RHEVMDriver < Deltacloud::BaseDriver
       :description => img.description,
       :owner_id => client.credentials[:username],
       :architecture => 'x86_64', # All RHEV-M VMs are x86_64
+      :hardware_profiles => hardware_profiles(nil),
       :state => img.status
     )
   end
diff --git a/server/lib/deltacloud/drivers/vsphere/vsphere_driver.rb 
b/server/lib/deltacloud/drivers/vsphere/vsphere_driver.rb
index 6b2ab8c..0f6d93a 100644
--- a/server/lib/deltacloud/drivers/vsphere/vsphere_driver.rb
+++ b/server/lib/deltacloud/drivers/vsphere/vsphere_driver.rb
@@ -80,7 +80,7 @@ module Deltacloud::Drivers::VSphere
     def images(credentials, opts=nil)
       cloud = new_client(credentials)
       img_arr = []
-
+      profiles = hardware_profiles(credentials)
       # Skip traversing through all instances in all datacenters when ID
       # attribute is set
       safely do
@@ -109,7 +109,8 @@ module Deltacloud::Drivers::VSphere
             :architecture => image_architecture,
             :owner_id => credentials.user,
             :description => properties[:full_name],
-            :state => image_state
+            :state => image_state,
+            :hardware_profiles => profiles
           )
         end
       end
diff --git a/server/lib/deltacloud/models/image.rb 
b/server/lib/deltacloud/models/image.rb
index 67f6dfb..555004e 100644
--- a/server/lib/deltacloud/models/image.rb
+++ b/server/lib/deltacloud/models/image.rb
@@ -22,6 +22,7 @@ class Image < BaseModel
   attr_accessor :description
   attr_accessor :architecture
   attr_accessor :state
+  attr_accessor :hardware_profiles
 
   alias :to_hash_original :to_hash
 
diff --git a/server/views/images/show.xml.haml 
b/server/views/images/show.xml.haml
index c1f5348..6f52218 100644
--- a/server/views/images/show.xml.haml
+++ b/server/views/images/show.xml.haml
@@ -1,8 +1,12 @@
 - unless defined?(partial)
   !!! XML
 %image{:href => image_url(@image.id), :id => @image.id}
-  - @image.attributes.select{ |attr| attr!=:id }.each do |attribute|
+  - @image.attributes.select{ |attr| ![:id, :hardware_profiles].include?(attr) 
}.each do |attribute|
     - haml_tag(attribute, :<) do
       - haml_concat @image.send(attribute)
+  - if @image.hardware_profiles
+    %hardware_profiles
+      - @image.hardware_profiles.each do |profile|
+        %hardware_profile{ :href => hardware_profile_url(profile.name), :id => 
profile.name, :rel => :hardware_profile }
   %actions
     %link{ :rel => 'create_instance', :method => :post, :href => 
"#{instances_url};image_id=#{@image.id}"}
-- 
1.7.4.4

Reply via email to