diff --git a/app/models/katello/concerns/host_managed_extensions.rb b/app/models/katello/concerns/host_managed_extensions.rb index ca54e70d9c7..a079a013739 100644 --- a/app/models/katello/concerns/host_managed_extensions.rb +++ b/app/models/katello/concerns/host_managed_extensions.rb @@ -204,7 +204,16 @@ def import_package_profile(simple_packages) def import_package_profile_in_bulk(simple_packages) nvreas = simple_packages.map { |sp| sp.nvrea } - found = InstalledPackage.where(:nvrea => nvreas).select(:id, :nvrea).to_a + found_nvrea = InstalledPackage.where(:nvrea => nvreas) + nil_vendor_installed_packages = found_nvrea.where(vendor: nil) + unless nil_vendor_installed_packages.blank? + packages_to_update = simple_packages.select { |sp| !sp.vendor.blank? && nil_vendor_installed_packages&.map(&:nvrea)&.include?(sp.nvrea) } + packages_to_update.each do |simple_package| + nil_vendor_installed_packages.where(nvrea: simple_package.nvrea).update(vendor: simple_package.vendor) + end + end + + found = found_nvrea.select(:id, :nvrea).to_a found_nvreas = found.map(&:nvrea) new_packages = simple_packages.select { |sp| !found_nvreas.include?(sp.nvrea) } @@ -217,7 +226,8 @@ def import_package_profile_in_bulk(simple_packages) :epoch => simple_package.epoch, :version => simple_package.version, :release => simple_package.release, - :arch => simple_package.arch) + :arch => simple_package.arch, + :vendor => simple_package.vendor) end InstalledPackage.import(installed_packages, validate: false, on_duplicate_key_ignore: true) #re-lookup all imported to pickup any duplicates/conflicts diff --git a/app/models/katello/installed_package.rb b/app/models/katello/installed_package.rb index 9a2e843056e..991dd58be08 100644 --- a/app/models/katello/installed_package.rb +++ b/app/models/katello/installed_package.rb @@ -23,5 +23,6 @@ class Jail < Safemode::Jail scoped_search :on => :version scoped_search :on => :release scoped_search :on => :arch + scoped_search :on => :vendor end end diff --git a/db/migrate/20220601163911_add_vendor_to_katello_installed_packages.rb b/db/migrate/20220601163911_add_vendor_to_katello_installed_packages.rb new file mode 100644 index 00000000000..d6df66b0c1d --- /dev/null +++ b/db/migrate/20220601163911_add_vendor_to_katello_installed_packages.rb @@ -0,0 +1,5 @@ +class AddVendorToKatelloInstalledPackages < ActiveRecord::Migration[6.1] + def change + add_column :katello_installed_packages, :vendor, :string + end +end diff --git a/test/models/concerns/host_managed_extensions_test.rb b/test/models/concerns/host_managed_extensions_test.rb index 2c621ceb432..a306927e342 100644 --- a/test/models/concerns/host_managed_extensions_test.rb +++ b/test/models/concerns/host_managed_extensions_test.rb @@ -232,7 +232,7 @@ class HostInstalledPackagesTest < HostManagedExtensionsTestBase def setup super package_json = {:name => "foo", :version => "1", :release => "1.el7", :arch => "x86_64", :epoch => "1", - :nvra => "foo-1-1.el7.x86_64"} + :nvra => "foo-1-1.el7.x86_64", :vendor => "Fedora"} @foreman_host.import_package_profile([::Katello::Pulp::SimplePackage.new(package_json)]) @nvra = 'foo-1-1.el7.x86_64' @foreman_host.reload @@ -242,6 +242,7 @@ def test_installed_packages assert_equal 1, @foreman_host.installed_packages.count assert_equal 'foo', @foreman_host.installed_packages.first.name assert_equal @nvra, @foreman_host.installed_packages.first.nvra + assert_equal 'Fedora', @foreman_host.installed_packages.first.vendor end def test_import_package_profile_adds_removes_bulk