When using the amazon-ec2 gem method "describe_images", if
both :owner_id and :image_id are specified, it means that
it will only fetch information about images matching
:image_id that are owned by owner :owner_id.  Unfortunately,
this means public AMI's are excluded.  In the case where
we know the image_id, don't set the owner_id; the number of
responses can only be 0 (meaning that image_id wasn't found)
or 1 (meaning that image_id was found), so it shouldn't
pose a performance problem.  With this in place I was able
to start an EC2 instance from a public AMI.

Signed-off-by: Chris Lalancette <[email protected]>
---
 server/lib/deltacloud/drivers/ec2/ec2_driver.rb |   11 ++++++++---
 1 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/server/lib/deltacloud/drivers/ec2/ec2_driver.rb 
b/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
index 3134469..c8b26cc 100644
--- a/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
+++ b/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
@@ -99,9 +99,14 @@ class EC2Driver < Deltacloud::BaseDriver
   def images(credentials, opts={} )
     ec2 = new_client(credentials)
     img_arr = []
-    config = { :owner_id => "amazon" }
-    config.merge!({ :owner_id => opts[:owner_id] }) if opts and opts[:owner_id]
-    config.merge!({ :image_id => opts[:id] }) if opts and opts[:id]
+    # if we know the image_id, we don't want to limit by owner_id, since this
+    # will exclude public images
+    if (opts and opts[:id])
+      config = { :image_id => opts[:id] }
+    else
+      config = { :owner_id => "amazon" }
+      config.merge!({ :owner_id => opts[:owner_id] }) if opts and 
opts[:owner_id]
+    end
     safely do
       ec2.describe_images(config).imagesSet.item.each do |image|
         img_arr << convert_image(image)
-- 
1.7.0.1

_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel

Reply via email to