[PATCH conductor] BZ 795743 - Detect architecture for imported images

Jan Provaznik jprovazn at redhat.com
Tue Feb 28 12:12:48 UTC 2012


On 02/24/2012 08:52 PM, Matt Wagner wrote:
> When importing an image, detect its architecture and stash that as an
> :architecture attribute on the Image itself. When creating a deployable,
> look for the attribute and restrict HWPs to those matching.
>
> This depends on a matching patch to aeolus-image-rubygem.
>
> Resolves https://bugzilla.redhat.com/show_bug.cgi?id=795743
> ---
>   src/app/controllers/deployables_controller.rb |    6 +++++-
>   src/app/models/hardware_profile.rb            |    1 +
>   src/lib/image.rb                              |    3 ++-
>   3 files changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/src/app/controllers/deployables_controller.rb b/src/app/controllers/deployables_controller.rb
> index e37bc4a..3fdea3f 100644
> --- a/src/app/controllers/deployables_controller.rb
> +++ b/src/app/controllers/deployables_controller.rb
> @@ -37,7 +37,11 @@ class DeployablesController<  ApplicationController
>       require_privilege(Privilege::CREATE, Deployable)
>       if params[:create_from_image]
>         @image = Aeolus::Image::Warehouse::Image.find(params[:create_from_image])
> -      @hw_profiles = HardwareProfile.frontend.list_for_user(current_user, Privilege::VIEW)
> +      if @image.respond_to?(:architecture)
> +        @hw_profiles = HardwareProfile.frontend.for_architecture(@image.architecture).list_for_user(current_user, Privilege::VIEW)
> +      else
> +        @hw_profiles = HardwareProfile.frontend.list_for_user(current_user, Privilege::VIEW)
> +      end
>         @deployable.name = @image.name
>         @selected_catalogs = params[:catalog_id].to_a
>         load_catalogs
> diff --git a/src/app/models/hardware_profile.rb b/src/app/models/hardware_profile.rb
> index 087d2ae..a75e4de 100644
> --- a/src/app/models/hardware_profile.rb
> +++ b/src/app/models/hardware_profile.rb
> @@ -43,6 +43,7 @@ class HardwareProfile<  ActiveRecord::Base
>     has_many :permissions, :as =>  :permission_object, :dependent =>  :destroy
>     has_many :instances
>     scope :frontend, :conditions =>  { :provider_id =>  nil }
> +  scope :for_architecture, lambda {|arch| includes(:architecture).where('hardware_profile_properties.value' =>  arch)}
>     has_many :provider_instances, :class_name =>  "Instance",
>              :foreign_key =>  "provider_hardware_profile_id"
>
> diff --git a/src/lib/image.rb b/src/lib/image.rb
> index 9911703..cfdbc78 100644
> --- a/src/lib/image.rb
> +++ b/src/lib/image.rb
> @@ -25,9 +25,10 @@ class Image
>       raise Aeolus::Conductor::Base::ImageNotFound unless img.present?
>       # We have the image name in the cloud provider, so we might as well use it
>       xml ||= "<image><name>#{img.name}</name></image>" if img.name.present?
> +    arch = img.architecture
>       provider = provider_account.provider
>       account_id = provider_account.credentials_hash['username']
> -    image = Aeolus::Image.import(provider.name, provider.provider_type.deltacloud_driver, image_id, account_id, environment.name, xml)
> +    image = Aeolus::Image.import(provider.name, provider.provider_type.deltacloud_driver, image_id, account_id, environment.name, xml, arch)
>       image
>     end
>   end

Hi Matt,
looks good, but there is couple of places which should be updated too 
(anywhere we currently use image.os.arch) - in instance matches method 
and when listing images.

Jan



More information about the aeolus-devel mailing list