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
