[PATCH conductor 6/8] API import (used by aeolus-cli) requires Provider Account now.
Matt Wagner
matt.wagner at redhat.com
Tue Dec 13 19:09:52 UTC 2011
The common Image.import method is used by both import methods now.
---
src/app/controllers/api/images_controller.rb | 16 ++++++++--------
src/app/models/image.rb | 4 ++--
2 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/src/app/controllers/api/images_controller.rb b/src/app/controllers/api/images_controller.rb
index 01280b0..1b83ff2 100644
--- a/src/app/controllers/api/images_controller.rb
+++ b/src/app/controllers/api/images_controller.rb
@@ -63,8 +63,10 @@ module Api
@image.save!
respond_with(@image)
elsif req[:type] == :import
- @image = Aeolus::Image::Factory::Image.new(req[:params])
- @image.save!
+ account = ProviderAccount.find_by_label(req[:params][:provider_account_name])
+ raise(Aeolus::Conductor::API::ProviderAccountNotFound.new(404, t("api.error_messages.provider_account_not_found",
+ :name => req[:params][:provider_account_name]))) unless account.present?
+ @image = Image.import(account, req[:params][:target_identifier], req[:params][:image_descriptor])
respond_with(@image)
end
rescue ActiveResource::BadRequest => e
@@ -94,14 +96,12 @@ module Api
{ :type => :build, :params => { :template => doc.xpath("/image/tdl/template").to_s,
:targets => doc.xpath("/image/targets").text }
}
- elsif !doc.xpath("/image/target_name").empty? && !doc.xpath("/image/target_identifier").empty? &&
- !doc.xpath("/image/image_descriptor").empty? && !doc.xpath("/image/provider_name").empty?
+ elsif !doc.xpath("/image/provider_account_name").empty? && !doc.xpath("/image/target_identifier").empty? &&
+ !doc.xpath("/image/image_descriptor").empty?
- { :type => :import, :params => { :target_name => doc.xpath("/image/target_name").text,
- :targets => doc.xpath("/image/target_name").text,
- :target_identifier => doc.xpath("/image/target_identifier").text,
+ { :type => :import, :params => { :target_identifier => doc.xpath("/image/target_identifier").text,
:image_descriptor => doc.xpath("/image/image_descriptor").children.first.to_s,
- :provider_name => doc.xpath("/image/provider_name").text }
+ :provider_account_name => doc.xpath("/image/provider_account_name").text }
}
else
{ :type => :failed }
diff --git a/src/app/models/image.rb b/src/app/models/image.rb
index dabd5d1..dcc8a0e 100644
--- a/src/app/models/image.rb
+++ b/src/app/models/image.rb
@@ -40,7 +40,7 @@ class Image < WarehouseModel
# Given a Provider Account and an image ID, import the image
# xml is an optional XML file describing the image (if omitted, we generate the XML)
- # Returns the Aeolus::Image::Warehouse::Image object, or raises any exceptions encountered
+ # Returns the Aeolus::Image::Factory::Image object, or raises any exceptions encountered
def self.import(provider_account, image_id, xml=nil)
provider = provider_account.provider
xml ||= "<image><name>#{image_id}</name></image>"
@@ -56,7 +56,7 @@ class Image < WarehouseModel
# This assumes (as is currently correct) that there will only be one provider image for imported images
pimg = iwhd_image.provider_images.first
pimg.set_attr('provider_account_identifier', provider_account.credentials_hash['username'])
- iwhd_image
+ image
end
# The iwhd API really isn't built for what we're trying to do.
--
1.7.6.4
More information about the aeolus-devel
mailing list