app/lib/actions/katello/host/upload_profiles.rb in katello-3.16.0.rc1 vs app/lib/actions/katello/host/upload_profiles.rb in katello-3.16.0.rc1.1

- old
+ new

@@ -31,20 +31,46 @@ def rescue_strategy Dynflow::Action::Rescue::Skip end + def self.upload_modules_to_pulp(available_streams, host) + query_name_streams = available_streams.map do |profile| + ::Katello::ModuleStream.where(profile.slice(:name, :stream)) + end + + query_name_streams = query_name_streams.inject(&:or) + + bound_library_instances = host.content_facet.bound_repositories.map(&:library_instance_or_self) + query = ::Katello::ModuleStream.in_repositories(bound_library_instances). + select(:name, :stream, :version, :context, :arch). + merge(query_name_streams) + + updated_profiles = query.map do |module_stream| + module_stream.slice(:name, :stream, :version, :context, :arch) + end + + # We also need to pass module streams that are not found in the ModuleStream table + # but are present on the content host + unassociated_profiles = available_streams.select do |profile| + updated_profiles.none? { |p| p[:name] == profile[:name] && p[:stream] == profile[:stream] } + end + + ::Katello::Pulp::Consumer.new(host.content_facet.uuid). + upload_module_stream_profile(updated_profiles + unassociated_profiles) + rescue RestClient::ResourceNotFound + Rails.logger.warn("Host with ID %s was not known to Pulp, continuing" % host.id) + end + def import_module_streams(payload, host) enabled_payload = payload.map do |profile| - profile.slice("name", "stream", "version", "context", "arch") if profile["status"] == "enabled" + profile.slice("name", "stream", "version", "context", "arch").with_indifferent_access if profile["status"] == "enabled" end enabled_payload.compact! - ::Katello::Pulp::Consumer.new(host.content_facet.uuid).upload_module_stream_profile(enabled_payload) + UploadProfiles.upload_modules_to_pulp(enabled_payload, host) host.import_module_streams(payload) - rescue RestClient::ResourceNotFound - Rails.logger.warn("Host with ID %s was not known to Pulp, continuing" % input[:host_id]) end def import_deb_package_profile(host, profile) installed_deb_ids = profile.map do |item| ::Katello::InstalledDeb.find_or_create_by(name: item['name'], architecture: item['architecture'], version: item['version']).id @@ -67,21 +93,26 @@ elsif profiles.try(:has_key?, "deb_package_profile") # remove this when deb_package_profile API is removed payload = profiles.dig("deb_package_profile", "deb_packages") || [] import_deb_package_profile(host, payload) else + module_streams = [] profiles.each do |profile| payload = profile["profile"] case profile["content_type"] when "rpm" UploadPackageProfile.upload(input[:host_id], payload) when "deb" import_deb_package_profile(host, payload) when "enabled_repos" host.import_enabled_repositories(payload) else - import_module_streams(payload, host) + module_streams << payload end + end + + module_streams.each do |module_stream_payload| + import_module_streams(module_stream_payload, host) end end end end end